add some game logic
This commit is contained in:
parent
633b76be01
commit
5ef1f3fd98
2 changed files with 90 additions and 6 deletions
|
@ -56,13 +56,22 @@ Jeu *nouvelle_partie(void);
|
||||||
/* Lance et joue une partie */
|
/* Lance et joue une partie */
|
||||||
void deroulement_partie(Jeu *jeu);
|
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);
|
int jeu_joueur(Jeu *jeu, int case_i, int case_j, int couleur);
|
||||||
|
|
||||||
/* Vérifie si un joueur peut jouer */
|
/* Vérifie si un joueur peut jouer */
|
||||||
int action_possible_joueur(Jeton *plateau[LONGEUR][LARGEUR], int couleur);
|
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);
|
void _action_joueur_humain(int *ligne, int *colonne);
|
||||||
|
|
||||||
/* Joue le tour d'un joueur humain */
|
/* Joue le tour d'un joueur humain */
|
||||||
|
|
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) {
|
void _jeu_joueur(Jeu *jeu, int case_i, int case_j, int case_i_direction,
|
||||||
// TODO
|
int case_j_direction, int couleur) {
|
||||||
(void)jeu, (void)case_i, (void)case_j, (void)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) {
|
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");
|
printf("mais ce n'est pas possible, réessayez !\n");
|
||||||
|
|
||||||
_action_joueur_humain(&ligne, &colonne);
|
_action_joueur_humain(&ligne, &colonne);
|
||||||
|
} else {
|
||||||
|
printf("et c'est un bon coup ;)\n");
|
||||||
|
ok = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue