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
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;

}
Example #4
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;
    }

}
Example #7
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;
}