+ Rispondi al messaggio
Pagina 1 di 2 12 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16

Rilevare collisione (C)

  1. #1
    Shoot non  in linea Novello
    Salve a tutti. Sto lavorando per un progetto universitario, si tratta del gioco delle biglie, come dice appunto il titolo. Ho un problema riguardo l'interazione delle biglie con le buche. Non riesco a far andare le biglie nelle buche. Vorrei fare tipo che quando la biglia va sulla buca, il gioco finisce, ho rappresentato il tavolo da gioco con una griglia 50x50, le buche con l'asterisco * e la biglia con la O maiuscola. Questo il codice che ho fatto:
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    #define SIZE 50
    #define bucap '*'
    int main()
    {
        char griglia[SIZE][SIZE];
        int colonna,riga,c1,c2,c3,a, x1, y1, z1;
        int cont=0;
        char biglia, b2;
        srand( (unsigned)time(NULL) );
        for(colonna=0;colonna<SIZE;colonna++)
            for(riga=0;riga<SIZE;riga++)
                griglia[riga][colonna] = '.';
        c1 = 0;
        c2 = 0;
        c3 = 0;
        int xlose=x1;
        int ylose=y1;
        while(c1 < 40)
        {
            colonna = rand() % SIZE;
            riga = rand() % SIZE;
    
            griglia[riga][colonna] = '.';
            c1++;
        }
    
        while(c2 < 20)
        {
            colonna = rand() % SIZE;
            riga = rand() % SIZE;
            b2=griglia[riga][colonna] = '*';
            c2++;
        }
        while(c3 < 1)
        {
            colonna = rand() % SIZE;
            riga = rand() % SIZE;
            griglia[riga][colonna] = '*';
            c3++;
        }
        x1=rand() %50;
        y1=rand() %50;
        z1=rand() %50;
        biglia=griglia[x1][y1] = 'O';
        int xpos = x1;
        int ypos = y1;
        int zpos = z1;
        while (cont<50)
        {
            system("cls||clear");
                for(colonna=0;colonna<SIZE;colonna++)
        {
            for(riga=0;riga<SIZE;riga++)
                printf(" %c ",griglia[riga][colonna]);
            putchar('\n');
        }
            printf("Lancio %d \n", cont);
            printf("1 Sinistra - 2 Destra - 3 Su - 4 Giu' - 5 Giu' a sinistra - 6 Su a sinistra - 7 Giu' a destra - 8 Su a destra \n");
    
            int savex = xpos;
            int savey = ypos;
            int move = 0;
            scanf("%d", &move);
            char c;
    
            switch (move)
            {
            case 1: if (xpos > 0) xpos--; break;
            case 2: if (xpos < 49) xpos++; break;
            case 3: if (ypos > 0) ypos--; break;
            case 4: if (ypos < 49) ypos++; break;
            case 5: zpos=x1; if (zpos > 0) xpos--; ypos++; break;
            case 6: zpos=x1; if (zpos < 49) xpos--; ypos--; break;
            case 7: zpos=x1; if (zpos > 0) xpos++; ypos++; break;
            case 8: zpos=x1; if (zpos < 49) xpos++; ypos--; break;
            }
    
            griglia[savex][savey] = '.';
            griglia[xpos][ypos] = 'O';
            cont++;
        }
        printf("GAME OVER");
        return 0;
    }
    
    Ho provato ad usare vari modi per far finire il gioco, ma niente, quando la biglia va sulla buca, non succede niente. Aspetto qualche vostro consiglio. Grazie in anticipo.
    Ultima modifica di AntonioG; 19-10-2020 19:23 

  2. #2
    Nel tuo codice in quale linea controlli che la biglia sia nella buca?

    P.S. il titolo che hai usato non aiuta chi fa le ricerche,lo cambio in modo che spieghi il problema.
    Ultima modifica di AntonioG; 19-10-2020 19:28 
    ℹ️ Leggi di pi su AntonioG ...

  3. #3
    Shoot non  in linea Novello
    Ho provato ad impostare nello switch che se griglia[riga][colonna] fosse uguale a * allora il gioco sarebbe finito, invece non ho ottenuto tale risultato e l'ho tolto dal codice.

  4. #4
    Ma non va nello switch..case ... il controllo va fuori, dopo lo switch... Prova
    ℹ️ Leggi di pi su AntonioG ...

  5. #5
    Shoot non  in linea Novello
    Ho fatto anche cos ma non va. Vuoi vedere come scrivo la condizione nel codice? Per farti capire meglio il problema.

  6. #6
    Certo... mostra cosa fai... dovevi mostrarlo fin dall'inizio
    ℹ️ Leggi di pi su AntonioG ...

  7. #7
    Shoot non  in linea Novello
    Ok. Ecco qua:
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    #define SIZE 50
    #define bucap '*'
    int main()
    {
        char griglia[SIZE][SIZE];
        int colonna,riga,c1,c2,c3,a, x1, y1, z1;
        int cont=0;
        char biglia, b2;
        srand( (unsigned)time(NULL) );
        for(colonna=0;colonna<SIZE;colonna++)
            for(riga=0;riga<SIZE;riga++)
                griglia[riga][colonna] = '.';
        c1 = 0;
        c2 = 0;
        c3 = 0;
        int xlose=x1;
        int ylose=y1;
        while(c1 < 40)
        {
            colonna = rand() % SIZE;
            riga = rand() % SIZE;
    
            griglia[riga][colonna] = '.';
            c1++;
        }
    
        while(c2 < 20)
        {
            colonna = rand() % SIZE;
            riga = rand() % SIZE;
            b2=griglia[riga][colonna] = '*';
            c2++;
        }
        while(c3 < 1)
        {
            colonna = rand() % SIZE;
            riga = rand() % SIZE;
            griglia[riga][colonna] = '*';
            c3++;
        }
        x1=rand() %50;
        y1=rand() %50;
        z1=rand() %50;
        biglia=griglia[x1][y1] = 'O';
        int xpos = x1;
        int ypos = y1;
        int zpos = z1;
        while (cont<50)
        {
            system("cls||clear");
                for(colonna=0;colonna<SIZE;colonna++)
        {
            for(riga=0;riga<SIZE;riga++)
                printf(" %c ",griglia[riga][colonna]);
            putchar('\n');
        }
            printf("Lancio %d \n", cont);
            printf("1 Sinistra - 2 Destra - 3 Su - 4 Giu' - 5 Giu' a sinistra - 6 Su a sinistra - 7 Giu' a destra - 8 Su a destra \n");
    
            int savex = xpos;
            int savey = ypos;
            int move = 0;
            scanf("%d", &move);
            char c;
    
            switch (move)
            {
            case 1: if (xpos > 0) xpos--; break;
            case 2: if (xpos < 49) xpos++; break;
            case 3: if (ypos > 0) ypos--; break;
            case 4: if (ypos < 49) ypos++; break;
            case 5: zpos=x1; if (zpos > 0) xpos--; ypos++; break;
            case 6: zpos=x1; if (zpos < 49) xpos--; ypos--; break;
            case 7: zpos=x1; if (zpos > 0) xpos++; ypos++; break;
            case 8: zpos=x1; if (zpos < 49) xpos++; ypos--; break;
            }
            if(griglia[riga][colonna]=='*'&&griglia[x1][y1]=='O')
            {
                return 0;
            }
            griglia[savex][savey] = '.';
            griglia[xpos][ypos] = 'O';
            cont++;
        }
        printf("GAME OVER");
        return 0;
    }
    

  8. #8
    Ma no... cosa c'entrano riga e colonna? Sono variabili che non contengono la posizione attuale della biglia.
    Rifletti invece sulla riga

    griglia[xpos][ypos] = 'O';

    che ti dice dove la biglia e cosa devi controllare.
    Ma l'hai scritto tu il resto del codice? Non sembra...
    ℹ️ Leggi di pi su AntonioG ...

  9. #9
    Shoot non  in linea Novello
    Veramente l'ho fatto io, semplicemente sto ancora imparando ad usare gli array e le griglie.

    Comunque adesso ci provo. Grazie
    Ultima modifica di AntonioG; 20-10-2020 07:43 

  10. #10
    Quote Originariamente inviato da Shoot Visualizza il messaggio
    Veramente l'ho fatto io
    Allora saprai a cosa servono xpos e ypos.

    E magari ci potrai dire che utilit ha la variabile zpos ...

    P.S. che sono le 'griglie'?
    Ultima modifica di AntonioG; 20-10-2020 09:57 
    ℹ️ Leggi di pi su AntonioG ...

+ Rispondi al messaggio
Pagina 1 di 2 12 ultimoultimo

Potrebbero interessarti anche ...

  1. Risolto: [VB2010] Spostamento e collisione PictureBox
    Da scorpionato nel forum Visual Basic .Net
    Risposte: 14
    Ultimo Post: 17-04-2012, 21:01
  2. Rilevare connessione internet
    Da Nottambulo nel forum Visual Basic .Net
    Risposte: 3
    Ultimo Post: 09-02-2010, 05:27
  3. [VB6] Rilevare suono
    Da dolcissimo nel forum Visual Basic 6
    Risposte: 9
    Ultimo Post: 16-09-2008, 16:57
  4. Collisione tra immagini
    Da acer1629 nel forum Visual Basic 6
    Risposte: 8
    Ultimo Post: 12-01-2006, 02:37
  5. Rilevare dati
    Da Lelaccio nel forum Microsoft Word
    Risposte: 10
    Ultimo Post: 02-03-2005, 23:23