PROGETTO IN C, [gioco delle biglie]

di il
19 risposte

PROGETTO IN C, [gioco delle biglie]

Salve a tutti, cercavo aiuto per il seguente progetto in c, si tratta del gioco delle biglie

Gioco delle biglie Si vuole sviluppare un programma per la simulazione del gioco delle biglie. Supponiamo di avere un giocatore che gioca su di un campo di dimensione 50x50. Il giocatore (rosso in figura) in ogni istante può lanciare in una delle 8 direzioni. Nel campo da gioco esiste una sola buca, scelta in modo casuale all’inizio del gioco, che permette di terminare il gioco ed è nota al giocatore.

Il giocatore può incontrare diverse difficoltà durante il percorso
• 40 buche nascoste al giocatore fanno andare la palla in un’altra posizione scelta casualmente
• 20 buche fanno terminare il gioco senza arrivare alla fine del gioco
Il gioco procede in questo modo:
• La posizione iniziale del giocatore è casuale ma non può corrispondere con quella della buca.
• Ad ogni lancio viene visualizzato il campo da gioco e la posizione del giocatore. Viene chiesto al giocatore la direzione di lancio della palla.
• La palla che va fuori va rimessa in una posizione casuale sul bordo da dove è uscita.
• Il gioco termina o quando la palla va nella buca principale o quando si superano 50 tiri

L’algoritmo usa la function rand() in stdlib per generare numeri casuali: si ricorda che, per esempio, se numero_casuale è un int, la chiamata numero_casuale=rand()%11; genera un numero casuale intero (distribuzione uniforme) nell’insieme (0,1,2,3,4,5,6,7,8,9,10).

Ora beh io ho iniziato ad inizializzare il campo da gioco, ovviamente considerando una matrice 50X50 ma non capisco come dovrei andare a scrivere che 40 di queste 100 posizioni devono essere buche casuali,20 perdenti, 1 vincente e il resto caselle normali, in piu vorrei avere qualche indicazione su come dovrei inizializzare la pedina del giocatore, e su come andare a costruire le function riguardo lo spostamento della biglia.

ho provato ad inizializzare la generazione del campo in questo modo:
void generacampo (campo Campo[][50],int n,int m)
{

    int i,j,nc,mc,bucaC,bucaP,bucaV,prato;
    srand(time(NULL));
 /*inizializzo le buche casuali*/
    for(i=0;i<40;i++){
       
                nc=1+rand()%49;
                mc=1+rand()%49;
            Campo[nc][mc].tipo=bucaC;


        
    }
      /*inizializzo le buche che fanno terminare il gioco*/
            for(j=0;j<20;j++)
            {
                nc=1+rand()%49;
                mc=1+rand()%49;
                if(Campo[nc][mc].tipo!=bucaC){
                    Campo[nc][mc].tipo=bucaP;
                }
            }
nc=1+rand()%49;
mc=1+rand()%49;
if(Campo[nc][mc].tipo!=bucaC && Campo[nc][mc]!=bucaP){
    Campo[nc][mc]=bucaV;
}
 /*inizializzo le restanti caselle del campo da gioco*/
for(i=0;i<n;i++){
    for(j=0;j<m;j++){
            nc=1+rand()%49;
            nm=1+rand()%49;
        if(Campo[nc][nm]!=bucaC && Campo[nc][nm]!=bucaP && Campo[nc][nm]!=bucaV){
            Campo[nc][nm]=prato;
        }
    }
}
}
Grazie mille della considerazione!

19 Risposte

  • Re: PROGETTO IN C, [gioco delle biglie]

    Genera 40 coppie di coordinate casuali e inserisci nell'array un valore in ogni elemento scelto per indicare la buca. La buca sarà identificata da un valore prestabilito. Se scegli un elemento in cui esiste già qualcosa, ripeti la scelta.

    E similmente per il resto.
  • Re: PROGETTO IN C, [gioco delle biglie]

    Quindi eventualmente potrei anche definire delle costanti del tipo BUCAVINCENTE 1, BUCA CASUALE 2 ecc..?? poi per quanto riguarda le direzioni come dovrei muovermi?
  • Re: PROGETTO IN C, [gioco delle biglie]

    Io ho buttato giù questo.. ma non capisco perchè mi da alcune posizioni di campo con delle stringhe di numeri strani e altre tutte a zero, quando a me a 0 serve solo una..

     #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    
    enum tipo {bucaV,bucaC,bucaP,prato};
    typedef enum tipo Tipo;
    
    typedef struct {
    Tipo  tipo;
    }Campo;
    
    void generacampo(Campo [][50],int , int);
    int main()
    {
        int n,m,i,j;
        n=50; m=50;
    Campo campo[n][m];
    
    generacampo(campo,n,m);
    
    for(i=0;i<n;i++){
        for(j=0;j<m;j++){
            printf("%2d",campo[n][m]);
    
        }
    }
    
    
    
    
    
    
    
    
        return 0;
    }
    
    /*inizializzazione campo da gioco */
    
    void generacampo (Campo Campo[][50],int n,int m)
    {
    
        int i,j,nc,mc,bucaC,bucaP,bucaV,prato;
    
        srand(time(NULL));
     /*inizializzo le buche casuali*/
        for(i=0;i<40;i++){
    
                    nc=1+rand()%49;
                    mc=1+rand()%49;
                    if(Campo[nc][mc].tipo!=bucaC){
                Campo[nc][mc].tipo=bucaC;
                    }
    
    
    
        }
          /*inizializzo le buche che fanno terminare il gioco*/
                for(j=0;j<20;j++)
                {
                    nc=1+rand()%49;
                    mc=1+rand()%49;
                    if(Campo[nc][mc].tipo!=bucaC){
                        Campo[nc][mc].tipo=bucaP;
                    }
                }
    nc=1+rand()%49;
    mc=1+rand()%49;
    if(Campo[nc][mc].tipo!=bucaC && Campo[nc][mc].tipo!=bucaP){
        Campo[nc][mc].tipo=bucaV;
    }
     /*inizializzo le restanti caselle del campo da gioco*/
    for(i=0;i<n;i++){
        for(j=0;j<m;j++){
                nc=1+rand()%49;
                mc=1+rand()%49;
            if(Campo[nc][mc].tipo!=bucaC && Campo[nc][mc].tipo!=bucaP && Campo[nc][mc].tipo!=bucaV){
                Campo[nc][mc].tipo=prato;
            }
        }
    }
    }
    
    
  • Re: PROGETTO IN C, [gioco delle biglie]

    Perchè a 0 serve solo una?

    0 dovrebbe essere una cella in cui non c'è nulla
  • Re: PROGETTO IN C, [gioco delle biglie]

    oregon ha scritto:


    Perchè a 0 serve solo una?

    0 dovrebbe essere una cella in cui non c'è nulla

    0 io l'ho identificata come una cella in cui ho la buca vincente.. non dovrebbe essere cosi?
  • Re: PROGETTO IN C, [gioco delle biglie]

    No, perchè dovrebbe essere così?

    E' meglio che 0 indichi una cella in cui non c'è nulla e da 1 in poi i vari oggetti.

    In questo modo, quando piazzi i vari oggetti a caso, devi solo essere sicuro che la cella scelta contenga 0 altrimenti cambi cella.
  • Re: PROGETTO IN C, [gioco delle biglie]

    oregon ha scritto:


    No, perchè dovrebbe essere così?

    E' meglio che 0 indichi una cella in cui non c'è nulla e da 1 in poi i vari oggetti.

    In questo modo, quando piazzi i vari oggetti a caso, devi solo essere sicuro che la cella scelta contenga 0 altrimenti cambi cella.


    ah okok ho modificato in questo modo allora
    /*inizializzazione campo da gioco */
    
    void generacampo (Campo Campo[][50],int n,int m)
    {
    
        int i,j,nc,mc,bucaC,bucaP,bucaV,prato;
    
        srand(time(NULL));
     /*inizializzo le buche casuali*/
        for(i=0;i<40;i++){
    
                    nc=rand()%49;
                    mc=rand()%49;
                    if(Campo[nc][mc].tipo==0){
                Campo[nc][mc].tipo=bucaC;
                    }
    
    
    
        }
          /*inizializzo le buche che fanno terminare il gioco*/
                for(j=0;j<20;j++)
                {
                    nc=rand()%49;
                    mc=rand()%49;
                    if(Campo[nc][mc].tipo==0){
                        Campo[nc][mc].tipo=bucaP;
                    }
                }
    nc=rand()%49;
    mc=rand()%49;
    if(Campo[nc][mc].tipo==0){
        Campo[nc][mc].tipo=bucaV;
    }
     /*inizializzo le restanti caselle del campo da gioco*/
    for(i=0;i<n;i++){
        for(j=0;j<m;j++){
                nc=rand()%49;
                mc=rand()%49;
            if(Campo[nc][mc].tipo==0){
                Campo[nc][mc].tipo=prato;
            }
        }
    }
    }
    

    però mi da questo problema..
  • Re: PROGETTO IN C, [gioco delle biglie]

    Quando indichi 'prato' vuoi dire che è una cella in cui non c'è nulla? Se è così deve contenere 0 e non devi scrivere nelle celle in modo random questo valore, che senso avrebbe?

    L'array nasce tutto a 0 proprio per indicare inizialmente un intero prato. Dopo devi inserire casualmente i vari oggetti modificando i valori da 0 a quello che ti serve.

    Per la visualizzazione sbagliata, devo mostrare il codice che visualizza il campo. Altrimenti come si fa a vedere dove hai sbagliato?
  • Re: PROGETTO IN C, [gioco delle biglie]

    oregon ha scritto:


    Quando indichi 'prato' vuoi dire che è una cella in cui non c'è nulla? Se è così deve contenere 0 e non devi scrivere nelle celle in modo random questo valore, che senso avrebbe?

    L'array nasce tutto a 0 proprio per indicare inizialmente un intero prato. Dopo devi inserire casualmente i vari oggetti modificando i valori da 0 a quello che ti serve.

    Per la visualizzazione sbagliata, devo mostrare il codice che visualizza il campo. Altrimenti come si fa a vedere dove hai sbagliato?

    si hai ragione, il codice che visualizza per ora stavo utilizzando questo
    void visualizza2D (int *pa,int col, int n, int m)
    {
        int i,j;
        for(i=0;i<n;i++){
            for(j=0;j<m;j++){
                printf("%5d",*(pa+col*i+j));
            }
        }
    }




    ma ho provato anche con questo
    for(i=0;i<n;i++){
        for(j=0;j<m;j++){
            printf("%5d",campo[i][j]);
           
        }
    }
  • Re: PROGETTO IN C, [gioco delle biglie]

    Devi azzerare l'array all'inizio esplicitamente perché il suo contenuto è casuale, scrivendo
    
    	enum tipo {prato,bucaV,bucaC,bucaP};
    
    e poi
    
    	int campo[50][50] = {prato};
    
    E poi ti consiglio di modificare il codice per visualizzare usando un solo carattere e andando a capo ad ogni linea
    
    	for(i=0;i<n;i++)
    	{
    		for(j=0;j<m;j++)
    			printf("%d",campo[i][j]);
    
    		printf("\n");
    	}
    
  • Re: PROGETTO IN C, [gioco delle biglie]

    oregon ha scritto:


    Devi azzerare l'array all'inizio esplicitamente perché il suo contenuto è casuale, scrivendo
    
    	enum tipo {prato,bucaV,bucaC,bucaP};
    
    e poi
    
    	int campo[50][50] = {prato};
    
    E poi ti consiglio di modificare il codice per visualizzare usando un solo carattere e andando a capo ad ogni linea
    
    	for(i=0;i<n;i++)
    	{
    		for(j=0;j<m;j++)
    			printf("%d",campo[i][j]);
    
    		printf("\n");
    	}
    

    ah ecco, grazie mille! ora sembra andar bene. puoi darmi consigli su come dovrei inizializzare la pedina del giocatore? e soprattutto riguardo la fase in cui: se la biglia esce dalla matrice come faccio a farlo capire?
  • Re: PROGETTO IN C, [gioco delle biglie]

    Anche il giocatore è come una buca ... è un elemento 'giocatore' da porre casualmente nell'array.

    La biglia esce dalla matrice se le sue coordinare superano uno dei bordi, ovvero se sono minori di 0 o maggiori di 49
  • Re: PROGETTO IN C, [gioco delle biglie]

    oregon ha scritto:


    Anche il giocatore è come una buca ... è un elemento 'giocatore' da porre casualmente nell'array.

    La biglia esce dalla matrice se le sue coordinare superano uno dei bordi, ovvero se sono minori di 0 o maggiori di 49

    OK fin qui ho capito, ma quando poi esce dalla matrice come potrei ripristinare la pedina però mantenendola sullo stesso bordo ma in posizione casuale?
  • Re: PROGETTO IN C, [gioco delle biglie]

    Poi un altra cosa.. la traccia mi chiede di nascondere le buche casuali e quelle in cui il gioco termina e in cui si vince. come potrei nasconderle??
Devi accedere o registrarti per scrivere nel forum
19 risposte