coup_jeu api_siam_tenter_changer_orientation_piece_si_possible(jeu_siam* jeu,int x,int y,orientation_deplacement orientation) { assert(jeu!=NULL); assert(jeu_etre_integre(jeu)); coup_jeu coup; coup_jeu_initialiser(&coup); if(orientation_etre_integre(orientation)==0){ coup.valide=0; return coup; } // on verifie si on peut changer l'orientation de la piece if(plateau_modification_changer_orientation_piece_etre_possible(&jeu->plateau,x,y,orientation)==0){ coup.valide=0; return coup; } // on verifie si la piece qu'on veut modifier appartient au joueur courant if(jeu_verifier_type_piece_a_modifier(jeu,x,y)==0){ coup.valide=0; return coup; } /* si les conditions sont verifies on change l'orientation de la piece, on change de joueur, on regarde s'il est victorieux et on renvoie le coup valide*/ plateau_modification_changer_orientation_piece(&jeu->plateau,x,y,orientation); const piece_siam* piece=plateau_obtenir_piece_info(&jeu->plateau,x,y); assert(piece!=NULL); assert(piece_etre_integre(piece));//on regarde si on a pas corrompu la piece jeu_changer_joueur(jeu); coup.valide=1; assert(coup_etre_integre(&coup));//on verifie qu'on renvoie un coup integre return coup; }
void piece_initialiser(piece_siam* piece) { assert(piece!=NULL); piece_definir(piece,case_vide,aucune_orientation); assert(piece_etre_integre(piece)); }
orientation_deplacement piece_recuperer_orientation_animal(const piece_siam* piece) { assert(piece!=NULL); assert(piece_etre_integre(piece)); assert(piece_etre_animal(piece)); return piece->orientation; }
int plateau_etre_integre(const plateau_siam* plateau) { assert(plateau != NULL); int compteur_rocher=0; int compteur_elephant=0; int compteur_rhinoceros=0; int kx=0; for(kx=0;kx<NBR_CASES;++kx) { int ky=0; for(ky=0;ky<NBR_CASES;++ky) { const piece_siam* piece = plateau_obtenir_piece_info(plateau,kx,ky); assert(piece!=NULL); if (piece_etre_integre(piece) == 0) return 0; switch(piece->type) { case rocher : compteur_rocher++; break; case elephant : compteur_elephant++; break; case rhinoceros : compteur_rhinoceros++; break; default : break; } } } if(compteur_rocher > NBR_ROCHERS) return 0; if( !(compteur_elephant >=0 && compteur_elephant <=NBR_ANIMAUX) ) return 0; if( !(compteur_rhinoceros >=0 && compteur_rhinoceros <=NBR_ANIMAUX) ) return 0; return 1; }
int plateau_modification_changer_orientation_piece_etre_possible(const plateau_siam* plateau,int x0,int y0,orientation_deplacement orientation) { assert(plateau_etre_integre(plateau)); assert(coordonnees_etre_dans_plateau(x0, y0)); assert(orientation_etre_integre_deplacement(orientation)); const piece_siam* piece=plateau_obtenir_piece_info(plateau, x0, y0); assert(piece_etre_integre(piece)); if(piece_etre_animal(piece)==1 && piece->orientation!=orientation) return 1; if (piece_etre_animal(piece)==1 && piece->orientation==orientation) return 0; return 0; }
int plateau_etre_integre(const plateau_siam* plateau) { int kx=0; assert(plateau!=NULL); for(kx=0;kx<NBR_CASES;kx++) { int ky=0; for(ky=0;ky<NBR_CASES;ky++) { if(piece_etre_integre(&(plateau->piece[kx][ky]))==0) return 0; } } int nb_rocher=plateau_denombrer_type(plateau,rocher); int nb_rhino=plateau_denombrer_type(plateau,rhinoceros); int nb_elephant=plateau_denombrer_type(plateau,elephant); if(nb_rhino>=0 && nb_elephant>=0 && nb_rocher>=0 && nb_rhino<6 && nb_elephant<6 && nb_rocher<=3) return 1; else return 0; }
void test_piece_etre_cas_vide() { piece_siam* piece= malloc(sizeof(piece_siam)) ; piece->type=elephant; piece->orientation =0; int i; for(i=1;i<=4;i++) { if(piece_etre_integre(piece)==1) { if(piece->type==4) { if(piece_etre_case_vide(piece)==1) {printf("Test ok");} else{printf("Test ko");} } } piece++; } }
void test_piece_etre_integre() { piece_siam* piece = malloc(sizeof(piece_siam)) ; // Allocation dynamique de notre piece de test piece -> type = elephant; piece ->orientation = haut; char* validite = NULL; int i=0; int j=0; //Nous allons tester pour les 20 combinaisons possibles //et nous afficherons la validite for (i=0; i<4; i++) { piece->orientation = haut; for (j=0; j<5; j++ ) { if(piece_etre_integre(piece) == 1) validite = "valide"; else validite = "pas valide"; printf("%d vers %d est %s \n" ,piece->type ,piece->orientation , validite); piece->orientation ++; } piece->type ++; } free(piece); // Liberation de l'espace }
void piece_definir_rocher(piece_siam* piece) { assert(piece!=NULL); piece_definir(piece,rocher,aucune_orientation); assert(piece_etre_integre(piece)); }