コード例 #1
0
ファイル: api_siam.c プロジェクト: JeremBlain/Jeu_Siam
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;


}
コード例 #2
0
void jeu_changer_joueur(jeu_siam* jeu)
{
    assert(jeu!=NULL);
    assert(jeu_etre_integre(jeu));

    joueur_changer(&jeu->joueur);

    assert(jeu_etre_integre(jeu));

}
コード例 #3
0
ファイル: api_siam.c プロジェクト: JeremBlain/Jeu_Siam
coup_jeu api_siam_tenter_changer_orientation_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);


    if(plateau_modification_changer_orientation_piece_etre_possible(&(jeu->plateau),x,y,orientation)==0)
    {
        puts("  orientation pas bonne");
        return coup;
    }

    const piece_siam *piece = plateau_obtenir_piece_info(&(jeu->plateau), x, y);
	// On vérifie que la pièce au coordonnées indiquées appartienne bien au joueur actuel.
    if(piece->type==rocher || piece->type==case_vide)
    {
        puts("  Vous ne pouvez pas bouger cette pièce (rocher ou case vide) !");
        return coup;
    }

    if(joueur_etre_type_animal(jeu->joueur,piece->type)==0)
    {
        puts("  La piece choisie n'est pas la votre !");
        return coup;
    }


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

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

    // Cette fonction permet de changer l'orientation d'une pièce, dans tous les cas elle ne permettra pas
    // de désigner un vainqueur : on ne changera pas la valeur de coup.victoire (initialisée à 0).
}
コード例 #4
0
ファイル: api_siam.c プロジェクト: JeremBlain/Jeu_Siam
coup_jeu api_siam_tenter_deplacer_piece_si_possible(jeu_siam* jeu,
                                                    int x,int y,
                                                    orientation_deplacement deplacement,
                                                    orientation_deplacement orientation)
{
    assert(jeu_etre_integre(jeu));
    coup_jeu coup;
    coup_jeu_initialiser(&coup);

  
    if(plateau_modification_deplacer_piece_etre_possible(&(jeu->plateau),x,y, deplacement, orientation)==0)
    {
        puts("  deplacement impossible");
        return coup;
    }

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

    // On vérifie que la pièce au coordonnées indiquées appartienne bien au joueur actuel.

    if(piece->type==rocher || piece->type==case_vide)
    {
        puts("  Vous ne pouvez pas bouger cette pièce (rocher ou case vide) !");
        return coup;
    }

    if(joueur_etre_type_animal(jeu->joueur,piece->type)==0 )
    {
        puts("  La piece choisie n'est pas la votre !");
        return coup;
    }

	

    	//on copie les valeurs de x et y pour regarder ensuite à la case après deplacement, pour voir si la poussee
	//est réalisable
    int x_deplacement = x, y_deplacement=y;
    coordonnees_appliquer_deplacement(&x_deplacement, &y_deplacement, deplacement);

	//si la piece est au bord et qu'on veut l'enlever (deplacement hors plateau), 
	//on l'enleve directement et on fini le tour
    if(coordonnees_etre_dans_plateau(x_deplacement,y_deplacement) != 1)
    {
	plateau_modification_deplacer_piece(&(jeu->plateau), x, y , deplacement, orientation, &(coup.condition_victoire));
    	coup.valide=1;
 	joueur_changer(&(jeu->joueur));

	return coup;
    }

    piece = plateau_obtenir_piece_info(&(jeu->plateau), x_deplacement, y_deplacement);

    if(piece->type != case_vide)
    {
       if(poussee_etre_valide(&(jeu->plateau), x_deplacement, y_deplacement, deplacement, orientation) == 1)
       {
        coup.condition_victoire=verification_condition_victoire_valide(jeu,x,y,orientation);
        poussee_realiser(&(jeu->plateau), x_deplacement, y_deplacement, deplacement, orientation, &(coup.condition_victoire));
       }

       else
       {
           puts("  La poussee n'est pas valide");
           return coup;
       }
    }


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

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