add some game logic
This commit is contained in:
parent
633b76be01
commit
5ef1f3fd98
2 changed files with 90 additions and 6 deletions
|
@ -56,7 +56,16 @@ Jeu *nouvelle_partie(void);
|
|||
/* Lance et joue une partie */
|
||||
void deroulement_partie(Jeu *jeu);
|
||||
|
||||
/* Gère le coup d'un joueur en faisant les changements nécessaire au jeu */
|
||||
/* Renvoie la couleur de l'ennemi */
|
||||
int couleur_ennemi(int couleur);
|
||||
|
||||
/* Auxiliaire : S'occupe de faire les changements de jetons récursivement
|
||||
* lorsqu'un joueur joue */
|
||||
void _jeu_joueur(Jeu *jeu, int case_i, int case_j, int case_i_direction,
|
||||
int case_j_direction, int couleur);
|
||||
|
||||
/* Gère le coup d'un joueur en faisant les changements nécessaire au jeu.
|
||||
* Renvoie 0 en cas de coup illégal */
|
||||
int jeu_joueur(Jeu *jeu, int case_i, int case_j, int couleur);
|
||||
|
||||
/* Vérifie si un joueur peut jouer */
|
||||
|
|
83
src/jeu.c
83
src/jeu.c
|
@ -55,11 +55,83 @@ void deroulement_partie(Jeu *jeu) {
|
|||
}
|
||||
}
|
||||
|
||||
int jeu_joueur(Jeu *jeu, int case_i, int case_j, int couleur) {
|
||||
// TODO
|
||||
(void)jeu, (void)case_i, (void)case_j, (void)couleur;
|
||||
void _jeu_joueur(Jeu *jeu, int case_i, int case_j, int case_i_direction,
|
||||
int case_j_direction, int couleur) {
|
||||
if (case_i + case_i_direction < 0 || case_i + case_i_direction > 7 ||
|
||||
case_j + case_j_direction < 0 || case_j + case_j_direction > 7) {
|
||||
// Après une suite de pion ennemi, si l'on arrive à l'extérieur du
|
||||
// plateau ce n'est pas valide
|
||||
return;
|
||||
}
|
||||
if (jeu->plateau[case_i + case_i_direction][case_j + case_j_direction]
|
||||
->couleur == -couleur) {
|
||||
jeu->plateau[case_i + case_i_direction][case_j + case_j_direction]
|
||||
->couleur = couleur;
|
||||
|
||||
return 0;
|
||||
Joueur *joueur, *adversaire;
|
||||
if (couleur == NOIR) {
|
||||
joueur = jeu->j1;
|
||||
adversaire = jeu->j2;
|
||||
} else {
|
||||
joueur = jeu->j2;
|
||||
adversaire = jeu->j1;
|
||||
}
|
||||
|
||||
// Retire le jeton de l'adversaire
|
||||
retire_jeton_joueur(
|
||||
adversaire,
|
||||
jeu->plateau[case_i + case_i_direction][case_j + case_j_direction]);
|
||||
|
||||
// Ajoute le jeton du joueur
|
||||
ajoute_jeton_joueur(
|
||||
joueur,
|
||||
jeu->plateau[case_i + case_i_direction][case_j + case_j_direction]);
|
||||
|
||||
_jeu_joueur(jeu, case_i + case_i_direction, case_j + case_j_direction,
|
||||
case_i_direction, case_j_direction, couleur);
|
||||
}
|
||||
}
|
||||
|
||||
int couleur_ennemi(int couleur) { return couleur == NOIR ? BLANC : NOIR; }
|
||||
|
||||
int jeu_joueur(Jeu *jeu, int case_i, int case_j, int couleur) {
|
||||
int flag = 0;
|
||||
|
||||
// Coup illégal
|
||||
if (jeu->plateau[case_i][case_j]->couleur == NOIR ||
|
||||
jeu->plateau[case_i][case_j]->couleur == BLANC) {
|
||||
return flag;
|
||||
}
|
||||
|
||||
// Regarde dans toutes les directions
|
||||
for (int i = -1; i <= 1; ++i) {
|
||||
for (int j = -1; j <= 1; ++j) {
|
||||
if (i != 0 || j != 0) {
|
||||
if (case_i + i >= 0 && case_j + j >= 0 &&
|
||||
jeu->plateau[case_i + i][case_j + j]->couleur ==
|
||||
couleur_ennemi(couleur) &&
|
||||
_case_jouable(jeu->plateau, case_i, case_j, i, j,
|
||||
couleur)) {
|
||||
_jeu_joueur(jeu, case_i, case_j, i, j, couleur);
|
||||
flag = 1;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Case actuelle
|
||||
jeu->plateau[case_i][case_j]->couleur = couleur;
|
||||
if (flag) {
|
||||
if (couleur == NOIR) {
|
||||
ajoute_jeton_joueur(jeu->j1, jeu->plateau[case_i][case_j]);
|
||||
} else {
|
||||
ajoute_jeton_joueur(jeu->j2, jeu->plateau[case_i][case_j]);
|
||||
}
|
||||
}
|
||||
|
||||
return flag;
|
||||
}
|
||||
|
||||
int action_possible_joueur(Jeton *plat[LONGEUR][LARGEUR], int couleur) {
|
||||
|
@ -121,6 +193,9 @@ void action_joueur_humain(Jeu *jeu, int couleur) {
|
|||
printf("mais ce n'est pas possible, réessayez !\n");
|
||||
|
||||
_action_joueur_humain(&ligne, &colonne);
|
||||
} else {
|
||||
printf("et c'est un bon coup ;)\n");
|
||||
ok = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Reference in a new issue