void test_plateau_obtenir_piece() { puts("Test plateau_obtenir_piece"); plateau_siam plateau; plateau_initialiser(&plateau); piece_siam *piece = &(plateau.piece[0][0]); piece->type=elephant; piece->orientation=haut; piece = &(plateau.piece[0][1]); piece->type=rhinoceros; piece->orientation=haut; int kx=0; for(kx=0;kx<NBR_CASES;kx++) { int ky=0; for(ky=0;ky<NBR_CASES;ky++) { if(kx == 0 && ky == 0) { if(plateau_obtenir_piece(&plateau,kx,ky)->type != elephant) printf("case [%d][%d] KO\n",kx,ky); if(plateau_obtenir_piece_info(&plateau,kx,ky)->type != elephant) printf("case [%d][%d] info KO\n",kx,ky); } else if(kx == 0 && ky == 1) { if(plateau_obtenir_piece(&plateau,kx,ky)->type != rhinoceros) printf("case [%d][%d] KO\n",kx,ky); if(plateau_obtenir_piece_info(&plateau,kx,ky)->type != rhinoceros) printf("case [%d][%d] info KO\n",kx,ky); } else if(ky==2 && (kx>=1 && kx<=3)) { if(plateau_obtenir_piece(&plateau,kx,ky)->type != rocher) printf("case [%d][%d] KO\n",kx,ky); if(plateau_obtenir_piece_info(&plateau,kx,ky)->type != rocher) printf("case [%d][%d] info KO\n",kx,ky); } else { if(plateau_obtenir_piece(&plateau,kx,ky)->type != case_vide) printf("case [%d][%d] KO\n",kx,ky); if(plateau_obtenir_piece_info(&plateau,kx,ky)->type != case_vide) printf("case [%d][%d] info KO\n",kx,ky); } } } }
void test_api_siam_tenter_introduire_nouvelle_piece_si_possible() { puts("Test api_siam_tenter_introduire_nouvelle_piece_si_possible"); jeu_siam jeu; jeu_initialiser(&jeu); coup_jeu coup; coup_jeu_initialiser(&coup); const piece_siam *piece = plateau_obtenir_piece_info(&(jeu.plateau),0,0); //on test si le coup est valide si on envoie des coordonnees au bord coup = api_siam_tenter_introduire_nouvelle_piece_si_possible(&jeu, 0, 0, haut); if(coup.valide!=1 || piece->orientation!=haut || jeu.joueur!=1) puts(" introduction case vide KO"); //on test si le coup n'est pas valide si on envoie des coordonnees pas au bord coup = api_siam_tenter_introduire_nouvelle_piece_si_possible(&jeu, 1, 1, haut); if(coup.valide!=0 || jeu.joueur!=1) puts(" introduction pas au bord KO"); //on test si le coup est valide si on introduit sur une case deja occupee avec une bonne orientation coup = api_siam_tenter_introduire_nouvelle_piece_si_possible(&jeu, 0, 0, haut); if(coup.valide!=1 || jeu.joueur!=0) puts(" introduction sur une piece deja existante bonne orientation KO"); //on test si le coup est non valide si on introduit sur une case deja occupee avec une mauvaise orientation coup = api_siam_tenter_introduire_nouvelle_piece_si_possible(&jeu, 0, 0, bas); if(coup.valide!=0 || jeu.joueur!=0) puts(" introduction sur une piece deja existante mauvaise orientation KO"); //on test si on essaye d'introduire trop de piece (plus de 5) //il y a déjà un éléphant, il faut en rajouter 4 piece_siam *piece_4_4 = plateau_obtenir_piece(&(jeu.plateau), NBR_CASES-1, NBR_CASES-1); piece_4_4->type = elephant; piece_4_4->orientation = gauche; piece_siam *piece_3_4 = plateau_obtenir_piece(&(jeu.plateau), 3, NBR_CASES-1); piece_3_4->type = elephant; piece_3_4->orientation = gauche; piece_siam *piece_2_4 = plateau_obtenir_piece(&(jeu.plateau), 2, NBR_CASES-1); piece_2_4->type = elephant; piece_2_4->orientation = gauche; piece_siam *piece_1_4 = plateau_obtenir_piece(&(jeu.plateau), 1, NBR_CASES-1); piece_1_4->type = elephant; piece_1_4->orientation = gauche; coup = api_siam_tenter_introduire_nouvelle_piece_si_possible(&jeu, NBR_CASES-1, 0, haut); if(coup.valide!=0 || jeu.joueur!=0) puts(" introduction de plus de 5 pieces KO"); }
void test_api_siam_tenter_deplacer_piece_si_possible() { puts("Test api_siam_tenter_deplacer_piece_si_possible"); jeu_siam jeu; jeu_initialiser(&jeu); int x=0, y=0; piece_siam *piece = plateau_obtenir_piece(&(jeu.plateau),x,y); piece->type=elephant; piece->orientation=bas; coup_jeu coup; coup_jeu_initialiser(&coup); //on test si le coup est valide en bougeant la bonne piece et avec des coordonnees dans le plateau coup = api_siam_tenter_deplacer_piece_si_possible(&jeu, x, y, haut, bas); coordonnees_appliquer_deplacement(&x, &y, haut); piece_siam *piece_apres_deplacement = plateau_obtenir_piece(&(jeu.plateau),x,y); if(coup.valide!=1 || piece_apres_deplacement->orientation!= bas || jeu.joueur!=1) {printf("orientation = %d",piece_apres_deplacement->orientation); puts(" joueur 0/elephant orientation KO");} //on test si le coup n'est pas valide si on envoie des coordonnees pas dans le plateau coup = api_siam_tenter_deplacer_piece_si_possible(&jeu, 6, 2, haut, bas); if(coup.valide!=0 || jeu.joueur!=1) puts(" joueur 1/coordonnees pas au bord KO"); //on test si le coup est non valide si on essaye de deplacer sur une case avec un animal d'orientation non opposée int copy_x=x, copy_y=y; //on copie les valeurs de x et y pour introduire une nouvelle piece coordonnees_appliquer_deplacement(©_x, ©_y, droite); //on change les coordonnes pour introduire la nouvelle piece //à l'endroit desire piece_siam *nouvelle_piece = plateau_obtenir_piece(&(jeu.plateau), copy_x, copy_y); piece_apres_deplacement->type = rhinoceros; //on est au joueur 1 qui joue les rhino, or à la position x et y a il y a un elephant ! nouvelle_piece->type = rhinoceros; nouvelle_piece->orientation = gauche; coup = api_siam_tenter_deplacer_piece_si_possible(&jeu, x, y, droite, droite); if(coup.valide!=0 || jeu.joueur!=1) puts(" joueur 1/deplacement sur une case avec un animal non oppose KO"); //on test si le coup est valide si on essaye de deplacer sur une case avec un animal d'orientation non opposée nouvelle_piece->orientation = bas; coup = api_siam_tenter_deplacer_piece_si_possible(&jeu, x, y, droite, droite); if(coup.valide!=0 || jeu.joueur!=1) puts(" joueur 0/deplacement sur une case avec un animal non oppose KO"); }
void plateau_modification_deplacer_piece(plateau_siam* plateau, int x0,int y0, orientation_deplacement direction_deplacement, orientation_deplacement orientation_final) { assert(plateau_etre_integre(plateau)); assert(coordonnees_etre_dans_plateau(x0, y0)); assert(orientation_etre_integre_deplacement(direction_deplacement)); assert(orientation_etre_integre(orientation_final)); if ( (x0==0 && direction_deplacement==gauche) || (x0==4 && direction_deplacement==droite) || (y0==0 && direction_deplacement==bas) || (y0==4 && direction_deplacement==haut) ) { piece_definir_case_vide(&plateau->piece[x0][y0]); } if(plateau_exister_piece(plateau, x0, y0) && coordonnees_etre_dans_plateau(x0, y0)) { piece_siam* piece=plateau_obtenir_piece(plateau,x0,y0); type_piece type=piece->type; if(plateau_modification_deplacer_piece_etre_possible(plateau,x0,y0,direction_deplacement,orientation_final)) { int x=x0; int y=y0; // on réalise des boucles afin de s'assurer que les coordonnées ne sortiront pas du plateau if (coordonnees_etre_bordure_plateau(x0, y0)==0) { coordonnees_appliquer_deplacement(&x0,&y0,direction_deplacement); } else if ( (x0==0 && direction_deplacement!=gauche) || (x0==4 && direction_deplacement!=droite) || (y0==0 && direction_deplacement!=bas) || (y0==4 && direction_deplacement!=haut) ) { coordonnees_appliquer_deplacement(&x0,&y0,direction_deplacement); } else if ( (x0==0 && direction_deplacement==gauche) || (x0==4 && direction_deplacement==droite) || (y0==0 && direction_deplacement==bas) || (y0==4 && direction_deplacement==haut) ) { piece_definir_case_vide(&plateau->piece[x0][y0]); plateau->piece[x0][y0].orientation=aucune_orientation; } if (piece_etre_case_vide(&plateau->piece[x0][y0]) ) { if (type!=case_vide) {piece_definir(&plateau->piece[x0][y0],type,orientation_final);} } else { poussee_realiser(plateau, x0, y0, plateau->piece[x0][y0].type, direction_deplacement); } piece_definir_case_vide(&plateau->piece[x][y]); } } }
//fonctions de tests void test_api_siam_tenter_changer_orientation_piece_si_possible() { puts("Test api_siam_tenter_changer_orientation_piece_si_possible"); jeu_siam jeu; jeu_initialiser(&jeu); piece_siam *piece = plateau_obtenir_piece(&(jeu.plateau),1,1); piece->type=elephant; piece->orientation=bas; coup_jeu coup; coup_jeu_initialiser(&coup); //on test si le coup est valide en changeant l'orientation de l'éléphant avec le bon joueur coup = api_siam_tenter_changer_orientation_piece_si_possible(&jeu,1,1,haut); if(coup.valide!=1 || piece->orientation!=haut || jeu.joueur!=1) puts("joueur 0/elephant haut KO"); //on test si le coup est non valide en changeant l'orientation d'une piece avec le mauvais joueur coup = api_siam_tenter_changer_orientation_piece_si_possible(&jeu,1,1,bas); if(coup.valide!=0 || jeu.joueur!=1) puts("joueur 1/elephant haut KO"); jeu.joueur=0; //on revient au premier joueur (des elephants) //on test si le coup est non valide en envoyant la meme orientation coup = api_siam_tenter_changer_orientation_piece_si_possible(&jeu,1,1,haut); if(coup.valide!=0 || jeu.joueur!=0) puts("joueur 0/meme orientation KO"); }
void plateau_modification_changer_orientation_piece(plateau_siam* plateau,int x0,int y0,orientation_deplacement orientation) { assert(plateau_etre_integre(plateau)); assert(plateau_modification_changer_orientation_piece_etre_possible(plateau, x0, y0, orientation)==1); piece_siam* piece=plateau_obtenir_piece(plateau, x0, y0); piece->orientation=orientation; }
void plateau_initialiser(plateau_siam* plateau) { // Initialise l'ensemble des cases du plateau a piece_vide // sauf les 3 cases du milieu avec un rocher (1,2), (2,2) et (3,2) // // L'etat de l'echiquier initial est le suivant: // // [4] *** | *** | *** | *** | *** | // [3] *** | *** | *** | *** | *** | // [2] *** | RRR | RRR | RRR | *** | // [1] *** | *** | *** | *** | *** | // [0] *** | *** | *** | *** | *** | // [0] [1] [2] [3] [4] // int kx=0; for(kx=0 ; kx<NBR_CASES ; ++kx) { int ky=0; for(ky=0 ; ky<NBR_CASES ; ++ky) { piece_siam* piece=plateau_obtenir_piece(plateau,kx,ky); assert(piece!=NULL); if(ky==2 && (kx>=1 && kx<=3) ) piece_definir_rocher(piece); else piece_definir_case_vide(piece); } } /* piece_siam piece; piece.orientation = gauche; piece.type = elephant; plateau->piece[1][1] = piece; */ assert(plateau_etre_integre); }