Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
void piece_initialiser(piece_siam* piece)
{
    assert(piece!=NULL);

    piece_definir(piece,case_vide,aucune_orientation);

    assert(piece_etre_integre(piece));
}
Exemplo n.º 3
0
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;
}
Exemplo n.º 7
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++;
    }
}
Exemplo n.º 8
0
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

}
Exemplo n.º 9
0
void piece_definir_rocher(piece_siam* piece)
{
  assert(piece!=NULL);
  piece_definir(piece,rocher,aucune_orientation);
  assert(piece_etre_integre(piece));
}