void plateau_modification_introduire_piece(plateau_siam* plateau, int x,int y, type_piece type, orientation_deplacement orientation) { assert(plateau_etre_integre(plateau)); assert(coordonnees_etre_bordure_plateau(x, y)); assert(type_etre_animal(type)); assert(orientation_etre_integre_deplacement(orientation)); if ((plateau_modification_introduire_piece_etre_possible(plateau, x, y, type, orientation)==1)) { if (piece_etre_case_vide(&plateau->piece[x][y])==1) { piece_siam* piece=&plateau->piece[x][y]; piece_definir(piece,type,orientation); } else { poussee_realiser(plateau, x, y, type, orientation); piece_definir(&plateau->piece[x][y],type,orientation); } } }
void test_type_etre_animal() { // Verifie que pour les enum correspond aux animaux il retourne 1, et 0 pour les non animaux. puts("Test type_etre_animal"); if(type_etre_animal(elephant)!=1) puts("elephant KO"); if(type_etre_animal(rhinoceros)!=1) puts("rhinoceros KO"); if(type_etre_animal(rocher)!=0) puts("rocher KO"); if(type_etre_animal(case_vide)!=0) puts("case vide KO"); int k= 0; for(k=4;k<20;++k) if(type_etre_animal(k)!=0) printf("valeur %d KO \n",k); }
int jeu_verifier_type_piece_a_modifier(const jeu_siam* jeu,int x,int y) { assert(jeu_etre_integre(jeu)); assert(coordonnees_etre_dans_plateau(x,y)); const piece_siam* piece=plateau_obtenir_piece_info(&jeu->plateau,x,y); assert(piece!=NULL); int num_joueur=jeu->joueur; type_piece type=piece->type; if (type_etre_animal(type)==0) return 0; if(joueur_etre_type_animal(num_joueur,type)==1) return 1 ; return 0; }
void entree_sortie_ecrire_plateau_pointeur_fichier(FILE* identifiant,const plateau_siam* plateau) { int y, x; for (y = NBR_CASES-1; y >= 0; y--) { fprintf(identifiant, "[%d] ", y); for (x = 0; x < NBR_CASES; x++) { const piece_siam *piece = plateau_obtenir_piece_info(plateau, x, y); if (type_etre_animal(piece->type)) fprintf(identifiant, "%s-%s | ", type_nommer_nom_cours(piece->type), orientation_nommer_nom_cours(piece->orientation)); else fprintf(identifiant, "%s | ", type_nommer_nom_cours(piece->type)); } fprintf(identifiant, "\n"); } fprintf(identifiant, " "); for (x = 0; x < NBR_CASES; x++) { fprintf(identifiant, "[%d] ", x); } printf("\n"); }
int plateau_modification_deplacer_piece_etre_possible(const plateau_siam* plateau, int x0,int y0, orientation_deplacement direction_deplacement, orientation_deplacement orientation) { assert(plateau_etre_integre(plateau)); assert(coordonnees_etre_dans_plateau(x0, y0)); assert(orientation_etre_integre_deplacement(direction_deplacement)); assert(orientation_etre_integre(orientation)); if(type_etre_animal(plateau->piece[x0][y0].type)) { orientation_deplacement orientation_piece_qui_pousse=plateau->piece[x0][y0].orientation; if ( (x0==0 && direction_deplacement==gauche) || (x0==4 && direction_deplacement==droite) || (y0==0 && direction_deplacement==bas) || (y0==4 && direction_deplacement==haut) ) { return 1; } coordonnees_appliquer_deplacement(&x0,&y0,direction_deplacement); if( coordonnees_etre_dans_plateau(x0, y0)==0 || poussee_etre_valide(plateau, x0, y0, direction_deplacement ) ) { if ( piece_etre_case_vide(&plateau->piece[x0][y0])==0 && orientation!=direction_deplacement ) { puts("orientation finale non valide"); return 0; } if(piece_etre_case_vide(&plateau->piece[x0][y0])==0 && orientation_piece_qui_pousse!=direction_deplacement ) { puts("orientation de la piece qui pousse differente de la direction de deplacement"); return 0; } return 1; } } if (poussee_etre_valide(plateau, x0, y0, direction_deplacement)) return 1; return 0; }
int plateau_modification_introduire_piece_etre_possible(const plateau_siam* plateau, int x,int y, type_piece type, orientation_deplacement orientation) { assert(plateau_etre_integre(plateau)); assert(type_etre_animal(type)); assert(orientation_etre_integre_deplacement(orientation)); // cas de l'introduction hors coin quand la piece n'est pas vide if ( (plateau_exister_piece(plateau, x, y)) && ((x==0 && y>0 && y<4 && orientation!=droite) || (x==4 && y>0 && y<4 && orientation!=gauche) || (y==0 && x>0 && x<4 && orientation!=haut) || (y==4 && x>0 && x<4 && orientation!=bas) )) { return 0; } // cas de l'introduction dans les coins quand la piece n'est pas vide et que la poussée est valide if ( (plateau_exister_piece(plateau, x, y)) && poussee_etre_valide(plateau, x, y, orientation) && ( ( x==0 && y==0 && (orientation==haut || orientation== droite) ) || ( x==4 && y==4 && (orientation==bas || orientation== gauche) ) || ( x==4 && y==0 && (orientation==haut || orientation== gauche) ) || ( x==0 && y==4 && (orientation==bas || orientation== droite) ) ) ) { return 1; } if( (coordonnees_etre_bordure_plateau(x, y)==1) && poussee_etre_valide(plateau, x, y, orientation) && plateau_denombrer_type(plateau, type)<5 ) { return 1; } else { return 0; } }
int piece_etre_integre(const piece_siam* piece) { assert (piece!= NULL); // On verifie que le pointeur est valide //On verifie que on a des types valides assert (type_etre_integre (piece -> type) == 1); assert (orientation_etre_integre (piece -> orientation) == 1); // Si piece est un animal et possede un deplacement comme orientation // Il est valide if(type_etre_animal(piece->type) == 1) { if(orientation_etre_integre_deplacement(piece ->orientation) == 1) return 1; } //Si piece n'est pas un animal et aucune deplacement //Il est valide else { if(orientation_etre_integre_deplacement(piece ->orientation) == 0) return 1; } return 0; }