non trovo l'errore logico (C)

« Older   Newer »
  Share  
Paolo Calvi
view post Posted on 18/5/2018, 15:12




buongiorno a tutti,
sto provando a creare un programma che mi permetta di giocare a briscola.
premetto che devo ancora fare la parte in cui inizia per primo il giocatore reale ma comunque ciò che ho scritto fin ora non funziona correttamente (ho verificato facendomi mostrare la mano del computer)

Probabilmente ho commesso qualche errore logico o dimenticato qualcosa nelle funzioni ma non riesco a capire cosa

CODICE
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
//record vari//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct carta{
       char nome[20];
       int seme; // 0 spade,1 bastoni,2 denari,3 coppe
       int id; // 0-9 spade,10-19 bastoni,20-29 denari,30-39 coppe
       int briscola; // 0 no, 1 sì
       int carta_sotto; // 0 no, 1 sì
       int valore_strozzo; // asso=10,tre=9,re=8,cavallo=7,fante=6,sette=5,sei=5,cinque=4,quattro=3,due=2
       int status; // 0 non pescata, 1 pescata o carta sotto
       int punti;        //punti che vale la carta
};
struct giocatore{
       int turno; // 1 gioca per primo, 0 gioca per secondo
       struct carta mano[3]; //la mano del giocatore
       int punteggio; //punteggio totalizzato
};
//funzioni///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void loading(struct carta mazzo[]);
void preparazione(struct carta mazzo[],struct giocatore umano[],struct giocatore ia[]);//da le carte, estrae la carta sotto e imposta la briscola
void gioca_prima_ia_mani_1_a_17(struct carta mazzo[],struct giocatore umano[],struct giocatore ia[]);
struct carta pescata(struct carta mazzo[]);//da usare per tutte le pescate tranne l'ultima che è la carta sotto
//main////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int main(int argc, char*argv[]){
//variabili(aggiungere man mano)
       int i;
       struct carta mazzo[40];
       struct giocatore umano[1], ia[1];
       //dati iniziali (il computer fa sempre le carte ed inizia prima il giocatore reale [riga 32])
       printf("Ciao.\nTi va di giocare?\n\n\n");
       umano[0].punteggio=0;
       umano[0].turno=0;
//programma(soprattutto con chiamate varie)        
       loading(mazzo);
       preparazione(mazzo, umano, ia);
//prime 17 mani        
       for(i=0;i<17;i++){
               printf("La tua mano:\n");  
               printf("1\t%s\n",umano[0].mano[0].nome);
               printf("2\t%s\n",umano[0].mano[1].nome);
               printf("3\t%s\n",umano[0].mano[2].nome);
               if(umano[0].turno==0){
                       //gioca prima la ia
                       gioca_prima_ia_mani_1_a_17(mazzo, umano, ia);
               }
               else{
                       //gioca prima il giocatore
               }
               
       }
       
       system("PAUSE");
return 0;
}
//esecuzione funzioni//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void loading(struct carta mazzo[]){
       int i;  //ti manca da inserire la parte riguardante punti e valore strozzo (briscola e carta sotto in altra funz)
       for(i=0;i<40;i++){
               mazzo[i].id=i;
               if(i<10)
               mazzo[i].seme=0;
               if(i>=10 && i<20)
               mazzo[i].seme=1;
               if(i>=20 && i<30)
               mazzo[i].seme=2;
               if(i>=30 && i<40)
               mazzo[i].seme=3;
               mazzo[i].status=0;//cambia in altre funz
               mazzo[i].briscola=0;//cambia in altre funz
       }
       strcpy(mazzo[0].nome,"asso di spade");
       strcpy(mazzo[1].nome,"2 di spade");
       strcpy(mazzo[2].nome,"3 di spade");
       strcpy(mazzo[3].nome,"4 di spade");
       strcpy(mazzo[4].nome,"5 di spade");
       strcpy(mazzo[5].nome,"6 di spade");
       strcpy(mazzo[6].nome,"7 di spade");
       strcpy(mazzo[7].nome,"fante di spade");
       strcpy(mazzo[8].nome,"cavallo di spade");
       strcpy(mazzo[9].nome,"re di spade");
       strcpy(mazzo[10].nome,"asso di bastoni");
       strcpy(mazzo[20].nome,"asso di denari");
       strcpy(mazzo[30].nome,"asso di coppe");
       strcpy(mazzo[11].nome,"2 di bastoni");
       strcpy(mazzo[12].nome,"3 di bastoni");
       strcpy(mazzo[13].nome,"4 di bastoni");
       strcpy(mazzo[14].nome,"5 di bastoni");
       strcpy(mazzo[15].nome,"6 di bastoni");
       strcpy(mazzo[16].nome,"7 di bastoni");
       strcpy(mazzo[17].nome,"fante di bastoni");
       strcpy(mazzo[18].nome,"cavallo di bastoni");
       strcpy(mazzo[19].nome,"re di bastoni");
       strcpy(mazzo[21].nome,"2 di denari");
       strcpy(mazzo[22].nome,"3 di denari");
       strcpy(mazzo[23].nome,"4 di denari");
       strcpy(mazzo[24].nome,"5 di denari");
       strcpy(mazzo[25].nome,"6 di denari");
       strcpy(mazzo[26].nome,"7 di denari");
       strcpy(mazzo[27].nome,"fante di denari");
       strcpy(mazzo[28].nome,"cavallo di denari");
       strcpy(mazzo[29].nome,"re di denari");
       strcpy(mazzo[31].nome,"2 di coppe");
       strcpy(mazzo[32].nome,"3 di coppe");
       strcpy(mazzo[33].nome,"4 di coppe");
       strcpy(mazzo[34].nome,"5 di coppe");
       strcpy(mazzo[35].nome,"6 di coppe");
       strcpy(mazzo[36].nome,"7 di coppe");
       strcpy(mazzo[37].nome,"fante di coppe");
       strcpy(mazzo[38].nome,"cavallo di coppe");
       strcpy(mazzo[39].nome,"re di coppe");
}
void preparazione(struct carta mazzo[],struct giocatore umano[],struct giocatore ia[]){
       int i,j;
       srand(time(NULL));
       for(i=0;i<3;i++){
               do{        
               j=rand()%40;
               }while(mazzo[j].status==1);
               mazzo[j].status=1;        
               umano[0].mano[i]=mazzo[j];
       }
               for(i=0;i<3;i++){
               do{        
               j=rand()%40;
               }while(mazzo[j].status==1);
               mazzo[j].status=1;        
               ia[0].mano[i]=mazzo[j];
       }
       do{        
               j=rand()%40;
       }while(mazzo[j].status==1);
       mazzo[j].carta_sotto=1;
       printf("carta sotto:\n");
       printf("%s\n\n\n",mazzo[j].nome);
       for(i=0;i<40;i++){
               if(mazzo[j].seme==mazzo[i].seme)
               mazzo[i].briscola=1;
       }
               
}
struct carta pescata(struct carta mazzo[]){
       int j;
       srand(time(NULL));
       do{        
               j=rand()%40;
               }while(mazzo[j].status==1);
       return mazzo[j];        
}
void gioca_prima_ia_mani_1_a_17(struct carta mazzo[],struct giocatore umano[],struct giocatore ia[]){
       struct carta l,giocata,decisa;
       int scelta,controllo,i,j;
       controllo=0;
       for(i=0;i<2;i++){
               for(j=i+1;j<3;j++){
                       if(ia[0].mano[j].valore_strozzo<ia[0].mano[i].valore_strozzo){
                               l=ia[0].mano[j];
                               ia[0].mano[j]=ia[0].mano[i];
                               ia[0].mano[i]=l;
                       }
               }
       }
       for(i=0;i<3 && controllo==0;i++){
               if(ia[0].mano[i].briscola==0){
                       giocata=ia[0].mano[i];
                       controllo=1;
                       ia[0].mano[i]=pescata(mazzo);
               }
       }
       if(controllo==0){
               giocata=ia[0].mano[0];
               ia[0].mano[0]=pescata(mazzo);
       }
       
       printf("giocata ia: %s\n",giocata.nome);
       printf("seleziona che carta giocare\n");
       scanf("%d",&scelta);
       scelta--;
       decisa=umano[0].mano[scelta];
       umano[0].mano[scelta]=pescata(mazzo);
       if(decisa.briscola==0 && giocata.briscola==1){
               printf("prende la ia\n");
               }
               
       if(decisa.briscola==1 && giocata.briscola==0){
               printf("prendi tu\n");
               umano[0].turno=1;
               umano[0].punteggio=umano[0].punteggio+decisa.punti+giocata.punti;
       }
       if(decisa.briscola==1 && giocata.briscola==1){
               if(decisa.valore_strozzo>giocata.valore_strozzo){
               printf("prendi tu\n");
               umano[0].turno=1;
               umano[0].punteggio=umano[0].punteggio+decisa.punti+giocata.punti;        
               }
               else
               {
               printf("prende la ia\n");        
               }
       }
       if(decisa.briscola==0 && giocata.briscola==0){
               if(decisa.seme!=giocata.seme){
                       printf("prende la ia\n");
               }
               else{
                       if(decisa.valore_strozzo>giocata.valore_strozzo){
                       printf("prendi tu\n");
                       umano[0].turno=1;
                       umano[0].punteggio=umano[0].punteggio+decisa.punti+giocata.punti;        
                       }
                       else
                       {
                       printf("prende la ia\n");        
                       }
                       
               }
       }        
       
}


Grazie per l'aiuto
 
Top
0 replies since 18/5/2018, 15:12   87 views
  Share