Loop Monopoly in C

di il
10 risposte

Loop Monopoly in C

Buongiorno ragazzi, ho un problema col mio codice in C del monopoly.. in pratica durante l'esecuzione mi va in loop, ma non riesco a capire dove sia il problema..se potreste aiutarmi ve ne sarei grato.
Vi allego il codice in C:
 #include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <conio.h>
#include <windows.h>


typedef struct giocatore{
    char nome[10];
    int soldi;
    int terr_pos[4];
    int pos;

}Giocatore;

void color(int col);
void gioco(int scacchiera[7][5], Giocatore player[]);
int ricerca(Giocatore player[], int dado);
int ricerca_Winner(Giocatore player[]);

Giocatore player[6];
    void main(){
    srand(time(NULL));
    int i,j,ro=0,end=0;
    int scacchiera[7][5]={{1,2,3,4,5},
                         {20,0,0,0,6},
                         {19,0,0,0,7},
                         {18,0,0,0,8},
                         {17,0,0,0,9},
                         {16,0,0,0,10},
                         {15,14,13,12,11}};
    int terreni[19]={2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
        for(int i=0; i<7; i++){
            for(int j=0; j<5; j++){
                printf("| %d |", scacchiera[i][j]);
        }
        printf("\n");
        }
        for(int i=0;i<6;i++) {
            printf("Mettere il nome del giocatore %i : ", i+1);
            gets(player[i].nome);
            player[i].soldi=100;
            player[i].pos=1;
        }
            for(i=0;i<6;i++){
                for(j=0;j<3;j++){
                    do{
                        ro=rand()%19;
                        if(terreni[ro]==0){
                            end=1;
                        }else{
                            player[i].terr_pos[j]=terreni[ro];
                            terreni[ro]=0;
                            end=0;
                        }
                    }while(end==1);
                }
            }

    for(i=0;i<6;i++){
        printf(" Giocatore %i ha come terreni :", i+1);
        for(j=0;j<3;j++){
        printf(" %d", player[i].terr_pos[j]);
        }
        printf("\n");
    }
    gioco(scacchiera,player);
       }

void gioco(int scacchiera[][5], Giocatore player[]){
 int inizio,i,dadou,dadod,dado,bk,win,z,t;
 int perdenti[5];
 inizio=rand()%6;
 i=inizio;

 printf("Inizia %s\n", player[i].nome);

 do {
  if (i>5) {
    i=0;
  }
  //printf("Tocca a %s\n", player[i].nome);

 do {
        if (player[i].soldi<=0) {
          bk==1;
        }
  dado=0;
  dadou=1+rand()%6;
  dadod=1+rand()%6;
  dado=dadou+dadod;
    player[i].pos=player[i].pos+dado;
  if (player[i].pos>20){
    player[i].pos=player[i].pos-20;
  }
  if (player[i].pos>=2 && player[i].pos<=4){
            for (int j=0; j<3; j++){
            if (player[i].terr_pos[j]>=2 && player[i].terr_pos[j]<=4) {
                //printf("La Casella in cui %s e' finito  e' sua. \n", player[i].nome);
                j=3;
                }
                else
                if (player[i].terr_pos[j]!=2 && player[i].terr_pos[j]!=3 && player[i].terr_pos[j]!=4) {
                 //printf("Mi dispiace %s, sei caduto su una casella non tua.. \n", player[i].nome);
                 z= ricerca(player,dado);
                 //printf("Sei caduto sulla casella gialla quindi paghi 2 euro a %s \n", player[z].nome);
                 player[i].soldi-2;
                 player[z].soldi+2;
                 j=3;
                 }
                 eliminato(player[i]);
             }

    }
    if (player[i].pos==5 || player[i].pos==11 || player[i].pos==15){
            for (int j=0; j<3; j++){
            if (player[i].terr_pos[j]==5 || player[i].terr_pos[j]==11 || player[i].terr_pos[j]==15) {
                //printf("La Casella in cui %s e' finito  e' sua.\n", player[i].nome);
                j=3;
             }
             else
             if (player[i].terr_pos[j]!=5 || player[i].terr_pos[j]!=11 || player[i].terr_pos[j]!=15) {
             //printf("Mi dispiace %s, sei caduto su una casella non tua.. \n", player[i].nome);
             z=ricerca(player,dado);
             //printf("Sei caduto sulla casella rossa quindi paghi 5 euro a %s \n", player[z].nome);
             player[i].soldi-5;
             player[z].soldi+5;
             j=3;
             }
             eliminato(player[i]);
             }

    }
    if (player[i].pos==6 || player[i].pos==7 || player[i].pos==16 || player[i].pos==17){
            for (int j=0; j<3; j++){
            if (player[i].terr_pos[j]==6 || player[i].terr_pos[j]==7 || player[i].terr_pos[j]==16 || player[i].terr_pos[j]==17) {
                //printf("La Casella in cui %s e' finito  e' sua.\n", player[i].nome);
                j=3;
            }
            else
            if (player[i].terr_pos[j]!=6 || player[i].terr_pos[j]!=7 || player[i].terr_pos[j]!=16 || player[i].terr_pos[j]!=17) {
             //printf("Mi dispiace %s, sei caduto su una casella non tua.. \n", player[i].nome);
             z= ricerca(player,dado);
            // printf("Sei caduto sulla casella verde quindi paghi 4 euro a %s \n", player[z].nome);
             player[i].soldi-4;
             player[z].soldi+4;
            j=3;
            }
            eliminato(player[i]);
            }

  }
    if (player[i].pos==8 || player[i].pos==18){
            for (int j=0; j<3; j++){
            if (player[i].terr_pos[j]==8 || player[i].terr_pos[j]==18) {
               // printf("La Casella in cui %s e' finito  e' sua.\n", player[i].nome);
                j=3;
            }
            else
            if (player[i].terr_pos[j]!=8 || player[i].terr_pos[j]!=18) {
             //printf("Mi dispiace %s, sei caduto su una casella non tua.. \n", player[i].nome);
             z= ricerca(player,dado);
             //printf("Sei caduto sulla casella nera quindi paghi 3 euro a %s \n", player[z].nome);
             player[i].soldi-3;
             player[z].soldi+3;
             j=3;
            }
            eliminato(player[i]);
            }

  }
    if (player[i].pos==9 || player[i].pos==10 || player[i].pos==19 || player[i].pos==20){
            for (int j=0; j<3; j++){
            if (player[i].terr_pos[j]==9 || player[i].terr_pos[j]==10 || player[i].terr_pos[j]==19 || player[i].terr_pos[j]==20) {
                //printf("La Casella in cui %s e' finito  e' sua.\n", player[i].nome);
                j=3;
            }
            else
            if (player[i].pos!=9 || player[i].pos!=10 || player[i].pos!=19 || player[i].pos!=20) {
             //printf("Mi dispiace %s, sei caduto su una casella non tua.. \n", player[i].nome);
             z= ricerca(player,dado);
            // printf("Sei caduto sulla casella azzurra quindi paghi 4 euro a %s \n", player[z].nome);
             player[i].soldi-1;
             player[z].soldi+1;
             j=3;
             }
             eliminato(player[i]);
             }

  }

    if (player[i].pos>=12 && player[i].pos<=14){
            for (int j=0; j<3; j++){
            if (player[i].terr_pos[j]>=12 && player[i].terr_pos[j]<=14) {
              //  printf("La Casella in cui %s e' finito  e' sua.\n", player[i].nome);
                j=3;
            }
            else
            if (player[i].terr_pos[j]!=12 || player[i].terr_pos[j]!=13 || player[i].terr_pos[j]!=14) {
             //printf("Mi dispiace %s, sei caduto su una casella non tua.. \n", player[i].nome);
             z= ricerca(player,dado);
             //printf("Sei caduto sulla casella viola quindi paghi 6 euro a %s \n", player[z].nome);
             player[i].soldi-6;
             player[z].soldi+6;
             j=3;
            }
            eliminato(player[i]);
            }

  }

   } while(bk==1);
   i++;
   win=0;
   for (int g=0; g<6; g++) {
    if (player[g].soldi<=0) {
       win++;
    }
   }
   if (win==5) {
    t= ricerca_Winner(player);
    printf("Ha vinto il Giocatore %s", player[t].nome);
   }
  }while(win<5);
}
int ricerca(Giocatore player[], int dado) {

            for(int i=0;i<6;i++){
                for(int j=0;j<3;j++){
                  if (player[i].terr_pos[j]==dado)
                    return i;
                    }
}
}

int ricerca_Winner(Giocatore player[]) {
int win;
win=0;
for (int i=0; i<6; i++) {
    if( player[i].soldi>0)
    win=i;
}
return win;
}

void eliminato(Giocatore player[]){
    for(int i=0; i<6; i++){
    if (player[i].soldi<=0){
        printf("%s e' stato eliminato.\n", player[i].nome);
        player[i]=player[i+1];
    }
    }
}
void color(int col){
{
    HANDLE hCon;
    hCon=GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(hCon,col);
}
}

10 Risposte

  • Re: Loop Monopoly in C

    E dove va in loop? Magari dovresti dirlo non credi?

    L'hai scritto tu tutto quel codice? Se è così dovresti saper dare maggiori spiegazioni
  • Re: Loop Monopoly in C

    Sei sicuro che quel codice compila?
  • Re: Loop Monopoly in C

    oregon ha scritto:

    E dove va in loop? Magari dovresti dirlo non credi?

    L'hai scritto tu tutto quel codice? Se è così dovresti saper dare maggiori spiegazioni

    hai ragione..
    esegue i turni all'infinito, non finisce mai..nessun giocatore viene eliminato

    Nippolo ha scritto:

    Sei sicuro che quel codice compila?

    certo che compila

  • Re: Loop Monopoly in C

    In esecuzione accade questo, ma all'infinito
    [b]Tocca a d
    Mi dispiace d, sei caduto su una casella non tua..
    Sei caduto sulla casella nera quindi paghi 3 euro a g
    Tocca a f
    Mi dispiace f, sei caduto su una casella non tua..
    Sei caduto sulla casella viola quindi paghi 6 euro a d
    Tocca a g
    La Casella in cui g e' finito  e' sua.
    Tocca a h
    Mi dispiace h, sei caduto su una casella non tua..
    Sei caduto sulla casella viola quindi paghi 6 euro a f
    Tocca a a
    Mi dispiace a, sei caduto su una casella non tua..
    Sei caduto sulla casella viola quindi paghi 6 euro a a
    Tocca a s
    Mi dispiace s, sei caduto su una casella non tua..
    Sei caduto sulla casella verde quindi paghi 4 euro a d
    Tocca a d
    Mi dispiace d, sei caduto su una casella non tua..
    Sei caduto sulla casella azzurra quindi paghi 4 euro a a
    Tocca a f
    Mi dispiace f, sei caduto su una casella non tua..
    Sei caduto sulla casella azzurra quindi paghi 4 euro a d
    Tocca a g
    Mi dispiace g, sei caduto su una casella non tua..
    Sei caduto sulla casella verde quindi paghi 4 euro a d
    Tocca a h
    Tocca a a
    Mi dispiace a, sei caduto su una casella non tua..
    Sei caduto sulla casella azzurra quindi paghi 4 euro a d[/b]
  • Re: Loop Monopoly in C

    Intanto questa

    bk==1;

    è da correggere.

    E poi come è possibile che vedi quelle frasi se le printf sono commentate con // ?
  • Re: Loop Monopoly in C

    oregon ha scritto:


    Intanto questa

    bk==1;

    è da correggere.

    E poi come è possibile che vedi quelle frasi se le printf sono commentate con // ?
    Le avevo messe temporaneamente per non vedere tutto quel casino di scritte, ma non cambia niente
  • Re: Loop Monopoly in C

    Non cambia niente facendo cosa?

    Ma hai fatto un po' di debugging? Quel codice è scritto ed indentato malissimo.
  • Re: Loop Monopoly in C

    oregon ha scritto:


    Non cambia niente facendo cosa?
    intendo mettere/togliere i printf sottoforma di commenti
  • Re: Loop Monopoly in C

    Ma hai letto TUTTO il mio commento?
  • Re: Loop Monopoly in C

    NickSplitter ha scritto:


    Nippolo ha scritto:


    Sei sicuro che quel codice compila?
    certo che compila
    Sorvolando sul void main(), utilizzi la funzione eliminato() prima di dichiararla e soprattutto quando la richiami gli passi una variabile Giocatore, mentre essa si aspetta un puntatore a Giocatore.
Devi accedere o registrarti per scrivere nel forum
10 risposte