Discussione chiusa
Pagina 1 di 3 123 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 24

Problema delle buche nascoste

  1. #1
    Shoot non è in linea Novello
    Post
    47
    Like Inviati  
    0
    Like Ricevuti  
    0
    Salve a tutti. Ho un problema riguardo il gioco delle biglie. Prima mi funzionavano le buche nascoste. Adesso modificando il codice, non funzionano più. Questo è il codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #define SIZE 50
    #define BUCA '*'
    #define BUCAN '+'
    int main()
    {
        char griglia[SIZE][SIZE];
        int colonna,riga,c1,c2,c3,a, x1, y1, b, scelta, rn1,rn2;
        int cont=1;
        int rBucaV, cBucaV, rBucaN, cBucaN;
        char biglia, b1;
        srand( (unsigned)time(NULL) );
        for(colonna=0;colonna<SIZE;colonna++)
            for(riga=0;riga<SIZE;riga++)
                b=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] = BUCAN;
            rBucaN=riga;
            cBucaN=colonna;
            c1++;
        }
    
        while(c2 < 20)
        {
            colonna = rand() % SIZE;
            riga = rand() % SIZE;
            griglia[riga][colonna] = BUCA;
            c2++;
        }
        while(c3 < 1)
        {
            colonna = rand() % SIZE;
            riga = rand() % SIZE;
            griglia[riga][colonna] = BUCA;
            rBucaV=riga;
            cBucaV=colonna;
            c3++;
        }
        x1=rand() %50;
        y1=rand() %50;
        if(griglia[x1][y1]==BUCA && rBucaV==x1 && cBucaV==y1)
        {
            printf("50");
            return 0;
        }
        biglia=griglia[x1][y1] = 'O';
    
        int xpos = x1;
        int ypos = y1;
        printf("************************* \n");
        printf("* IL GIOCO DELLE BIGLIE * \n");
        printf("************************* \n");
        do{
        printf("Seleziona le opzioni disponibili: \n");
        printf("1)Gioca \n2)Crediti \n");
        scanf("%d",&scelta);
        switch(scelta)
        {
            case 1:system("cls");
            while (cont<1000)
        {
            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);
    
            switch (move)
            {
            case 1: if (xpos > -1) xpos--; break;
            case 2: if (xpos < 50) xpos++; break;
            case 3: if (ypos > -1) ypos--; break;
            case 4: if (ypos < 50) ypos++; break;
            case 5: if (ypos < 50 && xpos > -1) xpos--; ypos++; break;
            case 6: if (ypos > -1 && xpos > -1) xpos--; ypos--; break;
            case 7: if (ypos < 50 && xpos < 50) xpos++; ypos++; break;
            case 8: if (ypos > -1 && xpos <50) xpos++; ypos--; break;
            default: cont--;
            }
            if(griglia[xpos][ypos]==BUCA)
            {
            if(rBucaV==xpos && cBucaV==ypos)
            {
                printf("Hai vinto");
                return 0;
            }
            else
            {
                printf("Hai perso");
                return 0;
            }
    
            if(rBucaV==xpos && cBucaV==ypos && cont==2)
            {
                printf("50");
                return 0;
            }
            }
            else
            if(griglia[xpos][ypos]==BUCAN)
            {
            if(rBucaN==xpos && cBucaN==ypos)
            {
                xpos=rand() %50;
                ypos=rand() %50;
            }
            }
    
            if(xpos==50||ypos==50)
            {
                rn1=1+rand()%1;
                rn2=1+rand()%3;
                xpos=xpos-rn1;
                ypos=ypos-rn2;
            }
            if(xpos==-1||ypos==-1)
            {
                rn1=1+rand()%1;
                rn2=1+rand()%3;
                xpos=xpos+rn1;
                ypos=ypos+rn2;
            }
            griglia[savex][savey] = '-';
            griglia[xpos][ypos] = 'O';
            cont++;
            if(cont==1)
            {
                griglia[xpos][ypos]!=BUCA;
                griglia[xpos][ypos]!=BUCAN;
            }
    
    
        }
        printf("Hai finito il numero di lanci. Game Over \n"); return 0;
            case 2:system("cls"); printf("Gioco creato da Pasquale Marzocchi, studente di informatica dell'Universita' Parthenope \n"); break;
        }
        printf("Premi un tasto qualunque per tornare al menu, premi 9 se invece vuoi uscire dal gioco' \n");
        scanf("%d",&scelta);
        }while(scelta!=9);
    }
    
    P.S:Riguardo questa parte (
    if(griglia[x1][y1]==BUCA && rBucaV==x1 && cBucaV==y1)
    {
    printf("50");
    return 0;
    }), ho lasciato così per quando riuscirò a risolvere prima questo problema, poi ripasserò dopo nel thread precedente.

  2. #2
    Post
    17,513
    Blogs
    6
    Like Inviati  
    6
    Like Ricevuti  
    36
    Sì ma che vuol dire "non funzionano più ..."?? Se si prova il programma cosa bisogna fare per replicare il malfunzionamento?

    E poi, come ti ho detto nell'altro thread, righe come

    					griglia[xpos][ypos] != BUCA;
    					griglia[xpos][ypos] != BUCAN;
    
    non hanno senso in C e non fanno nulla (e sono segnati come warning)

    E inoltre utilizzi qui

    int xlose = x1;
    int ylose = y1;

    le variabili x1 e y1 che NON sono mai state inizializzate e non hanno un valore certo.

    Devi CORREGGERE queste linee altrimenti non si capisce come possa funzionare il programma.
    ℹ️ Leggi di più su AntonioG ...

  3. #3
    Shoot non è in linea Novello
    Post
    47
    Like Inviati  
    0
    Like Ricevuti  
    0
    Quando vado sulle buche nascoste, che per ora le ho rese visibli, non mi teletrasporta la biglia in un punto casuale della mappa, ci passa sopra e basta.
    Ho cercato di fare come ho fatto con questa parte di codice:
    if(griglia[xpos][ypos]==BUCA)
            {
            if(rBucaV==xpos && cBucaV==ypos)
            {
                printf("Hai vinto");
                return 0;
            }
            else
            {
                printf("Hai perso");
                return 0;
            }
    
    Scusa se te lo dico ma ho controllato e il programma non mi ha dato nessun tipo di warning
    Ho creato quelle variabili per cercare di fare in modo di non far spawnare la biglia nello stesso punto in cui si trova una buca vincente, perdente o nascosta.
    Riguardo quei xlose e ylose lo so che devo toglierli.

    Veramente io le ho inizializzate ad inizio codice x1 e y1. Poi se intendi dire un'altra cosa dimmelo.
    Comunque sto provando vari modi per far funzionare queste buche ma niente. Non funzionano. Se scrivo l'if in questo modo
    if(griglia[xpos][ypos]==BUCAN)
            {
            if(rBucaN==xpos && cBucaN==ypos)
                xpos=rand() %50;
                ypos=rand() %50;
            }
    
    Le buche nascoste (per ora visibili) funzionano, ma se cambio segno e faccio lo stesso segno del pavimento di gioco, si sposta sempre a caso, come se il pavimento fosse pieno di buche nascoste.
    Se invece lo scrivo normale
    if(griglia[xpos][ypos]==BUCAN)
            {
            if(rBucaN==xpos && cBucaN==ypos)
            {
                xpos=rand() %50;
                ypos=rand() %50;
            }
            }
    
    Ultima modifica di Shoot; 15-11-2020 11:58 

  4. #4
    Post
    17,513
    Blogs
    6
    Like Inviati  
    6
    Like Ricevuti  
    36
    Ho unito i 3 messaggi che hai scritto nel giro di minuti. Se devi aggiungere qualcosa subito, modifica il post, non scrivere a ripetizione. Te l'ho già detto, rende illeggibile il thread.

    Cominciamo con x1 e y1. Non sono inizializzate a inizio programma a meno che tu non comprenda cosa voglia dire "inizializzare". E un buon compilatore te lo segnala.
    Altrettanto vale per quelle linee

    griglia[xpos][ypos] != BUCA;
    griglia[xpos][ypos] != BUCAN;

    che vengono segnalate dal compilatore perché NON hanno senso!

    Detto questo, il suggerimento che ti avevo dato di usare rBucaV e cBucaV era perché pensavo che la buca vincente fosse UNA SOLA. Se sono più di una, allora non devi usarle.
    Lasciando per ora le buche visibili, ti basta scrivere

    
    				if (griglia[xpos][ypos] == BUCA)
    				{
    					printf("Hai perso");
    					return 0;
    				}
    
    				if (griglia[xpos][ypos] == BUCAN)
    				{
    					printf("Hai vinto 50");
    					return 0;
    				}
    
    per individuarle.
    ℹ️ Leggi di più su AntonioG ...

  5. #5
    Shoot non è in linea Novello
    Post
    47
    Like Inviati  
    0
    Like Ricevuti  
    0
    Aspetto un momento ma perchè andando su BUCAN dovrebbe uscirmi quel messaggio di vittoria? Dovrebbe solo spostarmi in un punto casuale della mappa.
    La buca vincente "è" una sola. BUCAN sta per buca nascosta

  6. #6
    Post
    17,513
    Blogs
    6
    Like Inviati  
    6
    Like Ricevuti  
    36
    Allora devi ripetere tutte le regole perché mi sono perso.

    E comunque, devi rivedere il programma. Nella matrice ci devi inserire dei valori numerici e scrivere il codice che parta dai valori numerici e visualizzi dei caratteri.
    ℹ️ Leggi di più su AntonioG ...

  7. #7
    Shoot non è in linea Novello
    Post
    47
    Like Inviati  
    0
    Like Ricevuti  
    0
    Allora, ci sono 40 buche nascoste, 20 visibili che ti fanno perdere e 1 che ti fa vincere. Quelle nascoste ti portano un punto casuale della mappa.
    La biglia non deve essere spawnata ad inizio gioco su una buca nascosta, perdente o vincente. E se becco la buca vincente ad inizio gioco, ottengo come punteggio massimo 50.
    Nel caso di questo thread, le buche nascoste non funzionano come dovrebbero. E ti ho mostrato prima come ho provato a scrivere la condizione if delle buche nascoste.

  8. #8
    Post
    17,513
    Blogs
    6
    Like Inviati  
    6
    Like Ricevuti  
    36
    Devi rivedere il codice.

    Inserisci un valore numerico nella matrice

    #define VALSPAZIO 0
    #define VALBNAS 1
    #define VALBVIS 2
    #define VALBVIN 3
    #define VALBIGLIA 4

    #define CHSPAZIO '.'
    #define CHBNAS '.'
    #define CHBVIS '*'
    #define CHBVIN '*'
    #define CHBIGLIA 'O'
    Ultima modifica di AntonioG; 15-11-2020 13:03 
    ℹ️ Leggi di più su AntonioG ...

  9. #9
    Shoot non è in linea Novello
    Post
    47
    Like Inviati  
    0
    Like Ricevuti  
    0
    Lo stesso della buca perdente, perchè appunto le buche visibili devono essere uguali. E ho usato queste condizioni che mi hai suggerito tu
    if(griglia[xpos][ypos]==BUCA)
            {
            if(rBucaV==xpos && cBucaV==ypos)
            {
                printf("Hai vinto");
                return 0;
            }
            else
            {
                printf("Hai perso");
                return 0;
            }
    
    E fanno si che le buche sia vincenti che perdenti funzioni per bene
    E per la buca nascosta uso lo stesso simbolo del pavimento da gioco
    Ultima modifica di Shoot; 15-11-2020 12:48 

  10. #10
    Post
    17,513
    Blogs
    6
    Like Inviati  
    6
    Like Ricevuti  
    36
    No ... usa le definizioni che ti ho dato prima e risolvi più facilmente
    ℹ️ Leggi di più su AntonioG ...

Discussione chiusa
Pagina 1 di 3 123 ultimoultimo

Potrebbero interessarti anche ...

  1. access tabelle nascoste
    Da sasy_80 nel forum Microsoft Access
    Risposte: 5
    Ultimo Post: 15-10-2013, 17:36
  2. Risposte: 3
    Ultimo Post: 15-01-2009, 10:37
  3. [Win2000] Gestione delle lettere delle Unita: un serio problema
    Da Black Wings Angel nel forum Microsoft Windows
    Risposte: 4
    Ultimo Post: 23-03-2007, 00:07
  4. tabelle nascoste in access
    Da pricious nel forum Microsoft Access
    Risposte: 4
    Ultimo Post: 20-11-2006, 11:43
  5. Cartelle nascoste con VBA
    Da jos nel forum Microsoft Word
    Risposte: 2
    Ultimo Post: 27-02-2006, 18:38