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);
            }
        }
    
}
Example #2
0
coup_jeu api_siam_tenter_introduire_nouvelle_piece_si_possible(jeu_siam* jeu,
                                                               int x,int y,
                                                               orientation_deplacement orientation)
{
    assert(jeu_etre_integre(jeu));
    coup_jeu coup;
    coup_jeu_initialiser(&coup);

 
    type_piece type = joueur_obtenir_animal(jeu->joueur);
    if(plateau_modification_introduire_piece_etre_possible(&(jeu->plateau),x,y,type,orientation)==0)
        return coup;

    const piece_siam *piece = plateau_obtenir_piece_info(&(jeu->plateau), x, y);

    if(piece->type != case_vide)
    {
       if(poussee_etre_valide(&(jeu->plateau), x, y, orientation, orientation) == 1)
       {
		//ici il faut vérifier la condition de victoire avant la poussée
		//car si jamais un rocher est au bord, il faut pouvoir le voir avant que la poussé ne soit effectuée !
            coup.condition_victoire=verification_condition_victoire_valide(jeu,x,y,orientation);
            poussee_realiser(&(jeu->plateau), x, y, orientation, orientation, &(coup.condition_victoire));
       }
    }

    plateau_modification_introduire_piece(&(jeu->plateau),x,y,type,orientation,&(coup.condition_victoire));
    coup.valide=1;   

	//on change de joueur
    joueur_changer(&(jeu->joueur));
    return coup;


}
Example #3
0
coup_jeu api_siam_tenter_introduire_nouvelle_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 (!coordonnees_etre_dans_plateau(x, y)) {
      // Dans le cas ou les coord ne sont pas de le
      // plateau, coup non valide.
      puts("\nErreur : Coordonnees hors du plateau");
      coup.valide = 0;
      return coup;
    }
    if (!coordonnees_etre_bordure_plateau(x, y)) {
      // Dans le cas ou la pièce n'est pas introduite sur le bord
      // du plateau, le coup n'est pas valide.
      puts("\nErreur : Coordonnees hors du bord du plateau");
      coup.valide = 0;
      return coup;
    }
    if (!orientation_etre_integre_deplacement(orientation)) {
      // L'orientation n'est pas integre, ou est aucune_orientation
      // Le coup n'est donc pas valide.
      coup.valide = 0;
      return coup;
    }
    type_piece type_joueur_courant = jeu_obtenir_type_animal_courant(jeu);
    if (plateau_denombrer_type(&jeu->plateau, type_joueur_courant) >= NBR_ANIMAUX) {
      // Déjà trop d'animaux sur le plateau pour le joueur courant
      printf("\nErreur : nombre maxmum d'animaux atteins");
      coup.valide = 0;
      return coup;
    }
    
    if (plateau_exister_piece(&jeu->plateau, x, y)) {
    int test = 1;
    // En x = 0 :
    if (x==0) {
      // Si (y = 0), 2 orient valides : droite et haut
      if (y == 0 && (orientation == bas || orientation == gauche))
	test = 0;
      else if (y == NBR_CASES && (orientation == haut || orientation == gauche))
	test = 0;
      
      // Si y qqconque, 1 orient valide : droite
      else if (orientation != droite)
	test = 0;
    }
    
    // En x = NBR_CASES :
    else if (x==NBR_CASES) {
      // Si (y = 0), 2 orient valides : droite et haut
      if (y == 0 && (orientation == bas || orientation == droite))
	test = 0;
      
      else if (y == NBR_CASES && (orientation == haut || orientation == droite))
	test = 0;
      
      // Si y qqconque, 1 orient valide : droite
      else if (orientation != gauche)
	test = 0;
    }
    
    if (y==0) {
      if (x == 0 && (orientation == bas || orientation == gauche))
	test = 0;
      
      else if (x == NBR_CASES && (orientation == bas || orientation == droite))
	test = 0;
      
      // Si y qqconque, 1 orient valide : droite
      else if (orientation != haut)
	test = 0;
    }
    
    else if (y==NBR_CASES) {
      if (x == 0 && (orientation == haut || orientation == gauche))
	test = 0;
      
      else if (x == NBR_CASES && (orientation == haut || orientation == droite))
	test = 0;
      
      // Si y qqconque, 1 orient valide : droite
      else if (orientation != bas)
	test = 0;
    }
      if (!test) {
	puts("\nErreur : Orientation invalide pour pousser");
	coup.valide = 0;
	return coup;
      }
    }
    
    if (plateau_modification_introduire_piece_etre_possible(&jeu->plateau, x, y, type_joueur_courant, orientation)) {
      plateau_modification_introduire_piece(&jeu->plateau, x, y, type_joueur_courant, orientation);
      coup.valide = 1;
      
      if (plateau_denombrer_type(&jeu->plateau, rocher) < NBR_ROCHERS) {
	// On a un gagnant !!!
	condition_victoire_partie cdt_vic = victoire_determiner_gagnant(&jeu->plateau, x, y, orientation);
	coup.condition_victoire = cdt_vic;
	  
	assert(coup_etre_integre(&coup));
	assert(condition_victoire_etre_victorieux(&cdt_vic));
	  
	condition_victoire_afficher(&cdt_vic);
	
      }
      
      
      jeu_changer_joueur(jeu);
    }


    return coup;
}