Come da titolo non riesco a capire perrche non mi funziona correttamente oltre il primo ciclo.
il programma è ancora incompleto ma se gli do in input una carta che non siane briscola ne punti la prima volta funziona correttamente
ma alla seconda inizia a non funzionare chiedendomi nuovamente cosa voglio giocare o ridicendomi la mano che ho senza alcuna modifica(come se la mia scelta non fosse mai avvenuta).
non capisco se ciò è dovuto a:
-incompletezza del codice(il programma non è terminato come detto prima);
-errori nel posizionamento delle parentesi(ho dovuto modificarle a mano perche avevo fatto alcuni errori e forse fatto un danno ancora maggiore);
-problemi con gli if;
-altri eventuali errori;
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
//
struct carte{//variabili di ogni carta
char nome[30]; //nome della carta es. Asse di spade
int id; //numero compreso tra 1 e 10 che identifica il num della carta es. asse spade id=1; 2 di bastoni id=1, ecc.
int id_generico; // numero compreso tra 1 e 40 che identifica TUTTE le carte es. asse s ha id 0, asse b ha id 10
int seme; // 1 spade, 2 bastoni, 3 denari, 4 coppe
int punti; // valore dei punti di ogni carta es asse--> punti=11
int valore_strozzo; //numero per identificare quale fra 2 carte dello stasso seme è > es. 2 spade ha val di strozzo=0 asse di spade val di strozzo=9 3 di spade val s=8 ecc.
int status; //se status=0 carta non pescata, se status=1 carta pescata
int briscola; // se bricola=0 il seme non è briscola se 1 lo è
int carta_sotto; //se 1 questa carta è quella sotto tutte e definisce la briscola e sara l'ultima pescata
};
struct giocatore{
int turno; //chi gioca per primo se turno=1 inizi per primo, se = a 2 per secondo //p.s devo ancora capire come usarla bene
char nome[30];
struct carte carte_mano[3];
};
int main(int argc, char*argv[])
{
int trovato;
int mossa,caso; //caso-->indica la situazione in cui mi trovo(vedi foglio)
int i,j,k, scelta,giocata;//giocata-->scelta ma per AI
int punti_fatti; //punti del giocatore
int id_generato; // generare numeri casuali per dare le carte
struct carte carta[41];
struct giocatore umano, AI, lavoro;
srand(time(NULL)); //inizializzazione generatore
umano.turno=1;//gioca prima il giocatore reale
trovato=0;
punti_fatti=0;
{//dichiarazione carte
for(i=1; i<41; i++){//uso i=1 e come condizione 41 per non confondermi con lo zero
// ID carta, seme
if(i/10 <= 1)
{
carta[i].id=i; //spade 1-10
carta[i].seme=1;
}
if(i/10 > 1 && i/10 <= 2)
{
carta[i].id=i-10; //bastoni 11-20
carta[i].seme=2;
}
if(i/10 > 2 && i/10 <= 3)
{
carta[i].id=i-20; //denari 21-30
carta[i].seme=3;
}
if(i/10 > 2 && i/10 <=40)
{
carta[i].id=i-30; //coppe 31-40
carta[i].seme=4;
}
// ID carta generico
carta[i].id_generico=i;
// punti, strozzo
if(i==1 || i==11 || i==21 || i==31)
{
carta[i].punti=11; // asse
carta[i].valore_strozzo=9;
}
if(i==2 || i==12 || i==22 || i==32)
{
carta[i].punti=0; // 2
carta[i].valore_strozzo=0;
}
if(i==3 || i==13 || i==23 || i==33)
{
carta[i].punti=10; // 3
carta[i].valore_strozzo=8;
}
if(i==4 || i==14 || i==24 || i==34)
{
carta[i].punti=0; // 4
carta[i].valore_strozzo=1;
}
if(i==5 || i==15 || i==25 || i==35)
{
carta[i].punti=0; // 5
carta[i].valore_strozzo=2;
}
if(i==6 || i==16 || i==26 || i==36)
{
carta[i].punti=0; // 6
carta[i].valore_strozzo=3;
}
if(i==7 || i==17 || i==27 || i==37)
{
carta[i].punti=0; // 7
carta[i].valore_strozzo=4;
}
if(i==8 || i==18 || i==28 || i==38)
{
carta[i].punti=2; // fante
carta[i].valore_strozzo=5;
}
if(i==9 || i==19 || i==29 || i==39)
{
carta[i].punti=3; // cavallo
carta[i].valore_strozzo=6;
}
if(i==10 || i==20 || i==30 || i==40)
{
carta[i].punti=4; // re
carta[i].valore_strozzo=7;
}
// status
carta[i].status=0;
// briscola
carta[i].briscola=0;
// carta sotto
carta[i].carta_sotto=0;
// nome
if(i==1)
strcpy(carta[i].nome, "Asso di spade");
if(i==2)
strcpy(carta[i].nome, "Due di spade");
if(i==3)
strcpy(carta[i].nome, "Tre di spade");
if(i==4)
strcpy(carta[i].nome, "Quattro di spade");
if(i==5)
strcpy(carta[i].nome, "Cinque di spade");
if(i==6)
strcpy(carta[i].nome, "Sei di spade");
if(i==7)
strcpy(carta[i].nome, "Sette di spade");
if(i==8)
strcpy(carta[i].nome, "Fante di spade");
if(i==9)
strcpy(carta[i].nome, "Cavallo di spade");
if(i==10)
strcpy(carta[i].nome, "Re di spade");
if(i==11)
strcpy(carta[i].nome, "Asso di bastoni");
if(i==12)
strcpy(carta[i].nome, "Due di bastoni");
if(i==13)
strcpy(carta[i].nome, "Tre di bastoni");
if(i==14)
strcpy(carta[i].nome, "Quattro di bastoni");
if(i==15)
strcpy(carta[i].nome, "Cinque di bastoni");
if(i==16)
strcpy(carta[i].nome, "Sei di bastoni");
if(i==17)
strcpy(carta[i].nome, "Sette di bastoni");
if(i==18)
strcpy(carta[i].nome, "Fante di bastoni");
if(i==19)
strcpy(carta[i].nome, "Cavallo di bastoni");
if(i==20)
strcpy(carta[i].nome, "Re di bastoni");
if(i==21)
strcpy(carta[i].nome, "Asso di denari");
if(i==22)
strcpy(carta[i].nome, "Due di denari");
if(i==23)
strcpy(carta[i].nome, "Tre di denari");
if(i==24)
strcpy(carta[i].nome, "Quattro di denari");
if(i==25)
strcpy(carta[i].nome, "Cinque di denari");
if(i==26)
strcpy(carta[i].nome, "Sei di denari");
if(i==27)
strcpy(carta[i].nome, "Sette di denari");
if(i==28)
strcpy(carta[i].nome, "Fante di denari");
if(i==29)
strcpy(carta[i].nome, "Cavallo di denari");
if(i==30)
strcpy(carta[i].nome, "Re di denari");
if(i==31)
strcpy(carta[i].nome, "Asso di coppe");
if(i==32)
strcpy(carta[i].nome, "Due di coppe");
if(i==33)
strcpy(carta[i].nome, "Tre di coppe");
if(i==34)
strcpy(carta[i].nome, "Quattro di coppe");
if(i==35)
strcpy(carta[i].nome, "Cinque di coppe");
if(i==36)
strcpy(carta[i].nome, "Sei di coppe");
if(i==37)
strcpy(carta[i].nome, "Sette di coppe");
if(i==38)
strcpy(carta[i].nome, "Fante di coppe");
if(i==39)
strcpy(carta[i].nome, "Cavallo di coppe");
if(i==40)
strcpy(carta[i].nome, "Re di coppe");
}
}
{//da la prima mano
j=0;
for(i=0; i<3;i++)
{
//ciclo di tre volte, ogni volta da una carta a me e una all'AI
do
{
id_generato=rand()%40+1;
}while(carta[id_generato].status==1);
carta[id_generato].status=1;
umano.carte_mano[j]=carta[id_generato];
printf("carta %d = %s\n", j+1, carta[id_generato].nome);
do
{
id_generato=rand()%40+1;
}while(carta[id_generato].status==1);
carta[id_generato].status=1;
AI.carte_mano[j]=carta[id_generato];
j++;
}
}
{//Scelta carta sotto e impostazione della briscola su tutte le carte
printf("\n");
do
{
id_generato=rand()%40+1;
}while(carta[id_generato].status==1);
carta[id_generato].status=1;
carta[id_generato].carta_sotto=1;
for(i=i; i<41; i++){
if(carta[i].seme == carta[id_generato].seme)
{
carta[i].briscola=1;
}
}
printf("Carta sotto: %s\n", carta[id_generato].nome);
}
{//prime 17 mani (escludo le ultime tre ovvero quando la brisola sotto va in mano)
for(k=0;k<17;k++){
mossa=0;
if(umano.turno=1){
printf("Quale carta vuoi giocare? ");
scanf("%d", &scelta);
printf("Hai giocato: %s\n", umano.carte_mano[scelta-1].nome);
{//individuazione del caso (vedi foglio)
caso=0;
if(umano.carte_mano[scelta-1].briscola==0 && umano.carte_mano[scelta-1].punti==0)
caso=1;
if(umano.carte_mano[scelta-1].briscola==0 && umano.carte_mano[scelta-1].punti!=0)
caso=2;
if(umano.carte_mano[scelta-1].briscola==1 && umano.carte_mano[scelta-1].punti==0)
caso=3;
if(umano.carte_mano[scelta-1].briscola==1 && umano.carte_mano[scelta-1].punti!=0 && umano.carte_mano[scelta-1].punti<5)
caso=4;
if(umano.carte_mano[scelta-1].briscola==1 && umano.carte_mano[scelta-1].punti>=10)
caso=5;}
switch(caso) {
case 1:
//sub caso A (vedi foglio)
for(i=1;i<2;i++) {//ordinamento per punti
for(j=i-1;j<3;j++){
if(AI.carte_mano[i].punti>AI.carte_mano[j].punti){
lavoro.carte_mano[0]=AI.carte_mano[i];
AI.carte_mano[i]=AI.carte_mano[j];
AI.carte_mano[j]=lavoro.carte_mano[0];
}
}
}
for(i=0;i<3 && trovato==0;i++){
if(umano.carte_mano[scelta-1].seme==AI.carte_mano[i].seme && umano.carte_mano[scelta-1].punti<AI.carte_mano[i].punti){
printf("l'AI gioca: %s\n",AI.carte_mano[i].nome);
printf("prende l'AI\n");
trovato=1;
umano.turno=2;
do //pescate
{
id_generato=rand()%40+1;
}while(carta[id_generato].status==1);
carta[id_generato].status=1;
AI.carte_mano[i]=carta[id_generato];
do{
id_generato=rand()%40+1;
}while(carta[id_generato].status==1);
carta[id_generato].status=1;
umano.carte_mano[scelta-1]=carta[id_generato];
} }
//sub caso B
//ordinamento per strozzo
for(i=1;i<2;i++) {
for(j=i-1;j<3;j++){
if(AI.carte_mano[i].valore_strozzo>AI.carte_mano[j].valore_strozzo){
lavoro.carte_mano[0]=AI.carte_mano[i];
AI.carte_mano[i]=AI.carte_mano[j];
AI.carte_mano[j]=lavoro.carte_mano[0];
}
}
}
for(i=0;i<3 && trovato==0;i++){
if(AI.carte_mano[i].briscola==0){
trovato=1;
if(AI.carte_mano[i].valore_strozzo>umano.carte_mano[scelta-1].valore_strozzo && AI.carte_mano[i].seme==umano.carte_mano[scelta-1].seme){
umano.turno=2;
printf("l'AI gioca: %s\n",AI.carte_mano[i].nome);
printf("prende l'AI\n");
umano.turno=2;
do //pescate
{
id_generato=rand()%40+1;
}while(carta[id_generato].status==1);
carta[id_generato].status=1;
AI.carte_mano[i]=carta[id_generato];
do{
id_generato=rand()%40+1;
}while(carta[id_generato].status==1);
carta[id_generato].status=1;
umano.carte_mano[scelta-1]=carta[id_generato];
}
else{
printf("l'AI gioca: %s\n",AI.carte_mano[i].nome);
printf("prendi tu\n");
punti_fatti=punti_fatti+umano.carte_mano[scelta-1].punti+AI.carte_mano[i].punti;
do //pescate
{
id_generato=rand()%40+1;
}while(carta[id_generato].status==1);
carta[id_generato].status=1;
umano.carte_mano[scelta-1]=carta[id_generato];
do{
id_generato=rand()%40+1;
}while(carta[id_generato].status==1);
carta[id_generato].status=1;
AI.carte_mano[i]=carta[id_generato];
}
}}
//sub caso c
if(trovato==0){
printf("l'AI gioca: %s\n",AI.carte_mano[0].nome);
printf("prende l'AI\n");
umano.turno=2;
do{
id_generato=rand()%40+1;
}while(carta[id_generato].status==1);
carta[id_generato].status=1;
AI.carte_mano[i]=carta[id_generato];
do{
id_generato=rand()%40+1;
}while(carta[id_generato].status==1);
carta[id_generato].status=1;
umano.carte_mano[scelta-1]=carta[id_generato];
}
printf("la tua mano:\n");
for(i=0;i<3;i++){
printf("carta %d = %s\n",i+1,umano.carte_mano[i].nome);
}
break;
}
}
else
{//caso in cui tocca prima all AI
}
}}
system("PAUSE");
return 0;
}
Ho provato a risolvere ma non riesco. grazie della collaborazione