add some game logic

This commit is contained in:
Mylloon 2022-11-18 13:56:01 +01:00
parent 633b76be01
commit 5ef1f3fd98
Signed by: Anri
GPG key ID: A82D63DFF8D1317F
2 changed files with 90 additions and 6 deletions

View file

@ -56,13 +56,22 @@ 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 */
int action_possible_joueur(Jeton *plateau[LONGEUR][LARGEUR], int couleur);
/* Auxiliaire: Demande au joueur où placer son jeton */
/* Auxiliaire : Demande au joueur où placer son jeton */
void _action_joueur_humain(int *ligne, int *colonne);
/* Joue le tour d'un joueur humain */

View file

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