コード例 #1
0
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]);
            }
    }
   
}
コード例 #2
0
ファイル: piece_siam.c プロジェクト: AlperenAydin/CSC2
piece_siam piece_correspondre_nom_cours(const char* nom_cours)
{
  assert(nom_cours!=NULL);
  assert(strlen(nom_cours)==3);

  //Possibilites:
  //
  // - nom vaut "***" -> case vide
  // - nom vaut "RRR" -> rocher
  // - nom commence par "e-" ou "r-"
  //     Alors il s'agit d'un animal.
  //     -> Recuperer le 3eme caractere
  //     -> Le convertir dans l'orientation de l'animal.
  //  - Si aucun des cas precedent, alors affiche erreur.

  piece_siam piece;
  piece_initialiser(&piece);


  if(strncmp(nom_cours,"***",3)==0)
    {
      piece_definir_case_vide(&piece);
    }
  else if(strncmp(nom_cours,"RRR",3)==0)
    {
      piece_definir_rocher(&piece);
    }
  else if((nom_cours[0]=='e' || nom_cours[0]=='r') && nom_cours[1]=='-')
    {
      const type_piece type=type_correspondre_caractere_animal(nom_cours[0]);
      const orientation_deplacement orientation=orientation_correspondre_caractere(nom_cours[2]);

      piece_definir(&piece,type,orientation);
    }
  else
    {
      printf("Erreur fonction %s\n",__FUNCTION__);
      abort();
    }

  return piece;

}
コード例 #3
0
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);
}