int main(int argc, char *argv[]){ int nbByteCom; int i=0, x, y, a, b, k, l, erreur, mauvMouv; char str2[100]; char stop; int nbPara; int nbPionJ; int sockfd; DATA *dataBuf=(DATA*)malloc(sizeof(DATA)); DAMIER *damier; PION *p; DATA dataFin; dataFin.type=FIN; damier = init_damier(); if(damier==NULL){ printf("Initialisation du damier échouée\n"); return 0; } if(argc==2){ printf("Server, en attente d'un client sur le port %s\n", argv[1]); sockfd=server(atoi(argv[1])); if(sockfd<0) return 1; aff_damier(*damier); }else if(argc==3){ printf("Client, connection au server %s, sur le port %s\n", argv[1], argv[2]); sockfd=client(argv[1],atoi(argv[2])); if(sockfd<0) return 1; aff_damier(*damier); affTour(damier); printf("Nombre de prise possible : %d\n", verif_possibilite_prendre(damier)); puts("En attente du joueur adverse..."); nbByteCom=read(sockfd,dataBuf,sizeof(DATA)); if(nbByteCom>0){ while(dataBuf->type!=FIN){ if(readData(damier,*dataBuf)){ printf("Desynchronisation\n"); close(sockfd); free(dataBuf); free_damier(damier); return 1; } aff_damier(*damier); nbByteCom=read(sockfd,dataBuf,sizeof(DATA)); } }else{ printf("Connection perdue\n"); close(sockfd); if(dataBuf!=NULL) free(dataBuf); if(damier!=NULL) free_damier(damier); exit(0); } tour_suivant(damier); }else{ printf("Nombre d'arguments incorrect\n"); return 1; } while(!fin_partie(damier)){ mauvMouv=1; promotion(damier); affTour(damier); printf("Nombre de prise possible : %d\n", verif_possibilite_prendre(damier)); while(mauvMouv){ mauvMouv=0; printf("Action sur un pion : "); nbPara=sscanf(fgets(str2,14,stdin),"%d,%d %d,%d %d,%d", &x, &y, &a, &b, &k, &l); if(nbPara<1){ printf("Bye!\n"); close(sockfd); if(dataBuf!=NULL) free(dataBuf); if(damier!=NULL) free_damier(damier); exit(0); } while(nbPara<4){ printf("paramètre manquant(%d)\n",nbPara); printf("Action sur un pion : "); nbPara=sscanf(fgets(str2,14,stdin),"%d,%d %d,%d %d,%d", &x, &y, &a, &b, &k, &l); if(nbPara<1){ printf("Bye!\n"); close(sockfd); if(dataBuf!=NULL) free(dataBuf); if(damier!=NULL) free_damier(damier); exit(0); } } PION *p1 = rech_pion_c(damier,x,y); if(nbPara<6){ k=a+(a-x); l=b+(b-y); } if(verif_possibilite_prendre(damier)==0){ if(deplacer(damier,p1,a,b)==0){ printf("Pion déplacé en (%d,%d)\n",a,b); nbByteCom=write(sockfd,&last_modif,sizeof(DATA)); }else{ printf("MAUVAIS MOUVEMENT\n"); mauvMouv=1; } }else{ if(prendre(damier,p1,rech_pion_c(damier,a,b),k,l)==0){ printf("Prise de (%d,%d) par (%d,%d) en (%d,%d)\n",a,b,x,y,k,l); nbByteCom=write(sockfd,&last_modif,sizeof(DATA)); while(verif_possibilite_prendre(damier)>0){ aff_damier(*damier); printf("Rafle : "); nbPara=sscanf(fgets(str2,14,stdin),"%d,%d %d,%d %d,%d", &x, &y, &a, &b, &k, &l); if(nbPara<1){ printf("Bye!\n"); close(sockfd); if(dataBuf!=NULL) free(dataBuf); if(damier!=NULL) free_damier(damier); exit(0); } while(nbPara<4){ printf("paramètre manquant(%d)\n",nbPara); printf("Rafle : "); nbPara=sscanf(fgets(str2,14,stdin),"%d,%d %d,%d %d,%d", &x, &y, &a, &b, &k, &l); if(nbPara<1){ printf("Bye!\n"); close(sockfd); if(dataBuf!=NULL) free(dataBuf); if(damier!=NULL) free_damier(damier); exit(0); } } if(nbPara<6){ k=a+(a-x); l=b+(b-y); } if(prendre(damier,p1,rech_pion_c(damier,a,b),k,l)==0){ printf("Prise de (%d,%d) par (%d,%d) en (%d,%d)\n",a,b,x,y,k,l); nbByteCom=write(sockfd,&last_modif,sizeof(DATA)); }else{ printf("Prise de (%d,%d) par (%d,%d) en (%d,%d)\n",a,b,x,y,k,l); printf("MAUVAIS MOUVEMENT\n"); } } }else{ printf("MAUVAIS MOUVEMENT\n"); mauvMouv=1; } } } aff_damier(*damier); nbByteCom=write(sockfd,&dataFin,sizeof(DATA)); tour_suivant(damier); affTour(damier); printf("Nombre de prise possible : %d\n", verif_possibilite_prendre(damier)); printf("En attente du joueur adverse...\n"); nbByteCom=read(sockfd,dataBuf,sizeof(DATA)); if(nbByteCom>0){ while(dataBuf->type!=FIN){ if(readData(damier,*dataBuf)){ printf("Desynchronisation\n"); close(sockfd); free(dataBuf); free_damier(damier); return 1; } aff_damier(*damier); nbByteCom=read(sockfd,dataBuf,sizeof(DATA)); } }else{ printf("Connection perdue\n"); close(sockfd); if(dataBuf!=NULL) free(dataBuf); if(damier!=NULL) free_damier(damier); exit(0); } tour_suivant(damier); } free_damier(damier); free(dataBuf); close(sockfd); return 0; }
int main_loop(Game game,int noprint, int notiret, int nbessai, unsigned short int state[3]) { int nbscrab = 0; int nbisotop = 0 ; int maxisotop = 0 ; int nbsol = 0 ; while(1) { int i,res; int joue; score w_score ; score t_score ; int change_tirage = 0 ; res = Game_setrack_random(game, state, 0) ; if (res == -1) { fin_partie(game,noprint,nbscrab,maxisotop) ; return 0 ; } if (res == 1) { change_tirage = 1; } Game_search(game); while (Game_getnresults(game) == 0 && nbessai-- > 0) { change_tirage = 2 ; if (verbeux) { char tirage[RACK_SIZE_MAX]; Game_getplayedrack(game,Game_getnrounds(game),tirage) ; printf ("<essai_tirage>%s</essai_tirage>\n",tirage) ; } Game_setrack_random(game, state, 1) ; Game_search(game); } if (nbessai < 0) { fin_partie(game,noprint,nbscrab,maxisotop) ; return 0 ; } nbisotop = Game_getnresults(game) ; nbsol = Game_getntotal(game) ; if (nbisotop > maxisotop) { maxisotop = nbisotop ; } if (nbisotop == 1) { Game_play(game, 0) ; } else { joue = 0 ; w_score = traite(game,0,state); for (i = 1; i<nbisotop; i++) { if ( cmp_score(t_score=traite(game,i,state), w_score) > 0 ) { w_score = t_score ; joue = i; } } Game_play(game, joue) ; } if (Game_getplayedbonus(game,Game_getnrounds(game)-1)) { nbscrab ++ ; } if (Game_getnrounds(game)==1 || (Game_getplayedbonus(game,Game_getnrounds(game)-2))) { change_tirage = 0 ; } if (! noprint) { print_line(game,Game_getnrounds(game)-1,nbisotop,change_tirage,notiret,nbsol); } } }