* select the winner
* check if move playable
This commit is contained in:
parent
0d24785b3e
commit
2eae2e2f1e
3 changed files with 67 additions and 8 deletions
|
@ -59,12 +59,17 @@ void deroulement_partie(Jeu *jeu);
|
|||
/* Vérifie si un joueur peut jouer */
|
||||
int action_possible_joueur(Jeton *plateau[LONGEUR][LARGEUR], int couleur);
|
||||
|
||||
/* Joue le tour d'un joueur */
|
||||
void action_joueur(Jeu *jeu, int couleur);
|
||||
/* Joue le tour d'un joueur humain */
|
||||
void action_joueur_humain(Jeu *jeu, int couleur);
|
||||
|
||||
/* Vérifie si une partie est terminée */
|
||||
int partie_finie(Jeu *jeu);
|
||||
|
||||
/* Compte les points, change le résultat avec le gagnant ainsi que les points de
|
||||
* chacun des joueurs (Gagnant, Perdant). Renvoie 0 si égalité entre les 2
|
||||
* joueurs */
|
||||
int selection_gagnant(Jeu *jeu, int *resultat);
|
||||
|
||||
/* Libère le jeu en mémoire */
|
||||
void free_jeu(Jeu *jeu);
|
||||
|
||||
|
|
39
src/jeu.c
39
src/jeu.c
|
@ -36,18 +36,28 @@ void deroulement_partie(Jeu *jeu) {
|
|||
|
||||
// TODO: Check if player can play
|
||||
if (action_possible_joueur(jeu->plateau, tour)) {
|
||||
action_joueur(jeu, tour);
|
||||
action_joueur_humain(jeu, tour);
|
||||
} else {
|
||||
printf("Pas de coup jouable.\n");
|
||||
}
|
||||
|
||||
tour = tour == NOIR ? BLANC : NOIR;
|
||||
}
|
||||
|
||||
// TODO: Handle end game
|
||||
int resultat[3];
|
||||
if (selection_gagnant(jeu, resultat)) {
|
||||
printf("Fin de partie ! Le joueur %c a gagné %d contre %d !\n",
|
||||
resultat[0], resultat[1], resultat[2]);
|
||||
} else {
|
||||
printf("Égalité parfaite, %d contre %d !\n", jeu->j1->nb_jeton,
|
||||
jeu->j2->nb_jeton);
|
||||
}
|
||||
}
|
||||
|
||||
int action_possible_joueur(Jeton *plat[LONGEUR][LARGEUR], int couleur) {
|
||||
for (int i = 0; i < 8; i++) {
|
||||
for (int j = 0; j < 8; j++) {
|
||||
for (int i = 0; i < LONGEUR; i++) {
|
||||
for (int j = 0; j < LARGEUR; j++) {
|
||||
if (case_jouable(plat, i, j, couleur)) {
|
||||
return 1;
|
||||
}
|
||||
|
@ -56,7 +66,7 @@ int action_possible_joueur(Jeton *plat[LONGEUR][LARGEUR], int couleur) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
void action_joueur(Jeu *jeu, int couleur) {
|
||||
void action_joueur_humain(Jeu *jeu, int couleur) {
|
||||
// TODO
|
||||
printf("Tour de %c !\n", couleur);
|
||||
}
|
||||
|
@ -67,6 +77,27 @@ int partie_finie(Jeu *jeu) {
|
|||
plateau_rempli(jeu->plateau);
|
||||
}
|
||||
|
||||
int selection_gagnant(Jeu *jeu, int *resultat) {
|
||||
if (jeu->j1->nb_jeton == jeu->j2->nb_jeton) {
|
||||
// Si égalité
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (jeu->j1->nb_jeton > jeu->j2->nb_jeton) {
|
||||
// Si le joueur 1 a gagné
|
||||
resultat[0] = jeu->j1->couleur;
|
||||
resultat[1] = jeu->j1->nb_jeton;
|
||||
resultat[2] = jeu->j2->nb_jeton;
|
||||
} else {
|
||||
// Si le joueur 2 a gagné
|
||||
resultat[0] = jeu->j2->couleur;
|
||||
resultat[1] = jeu->j2->nb_jeton;
|
||||
resultat[2] = jeu->j1->nb_jeton;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
void free_jeu(Jeu *jeu) {
|
||||
free_liste(jeu->j1->liste_jeton);
|
||||
free(jeu->j1);
|
||||
|
|
|
@ -63,8 +63,31 @@ void affiche_plateau(Jeton *plat[LONGEUR][LARGEUR]) {
|
|||
|
||||
int _case_jouable(Jeton *plat[LONGEUR][LARGEUR], int case_i, int case_j,
|
||||
int case_i_direction, int case_j_direction, int couleur) {
|
||||
// TODO
|
||||
if (case_i + case_i_direction < 0 ||
|
||||
case_i + case_i_direction > (LONGEUR - 1) ||
|
||||
case_j + case_j_direction < 0 ||
|
||||
case_j + case_j_direction > (LARGEUR - 1)) {
|
||||
// Après une suite de pion ennemi, si l'on arrive à l'extérieur du
|
||||
// plateau ce n'est pas valide
|
||||
return 0;
|
||||
}
|
||||
|
||||
// S'il y a un pion ennemi
|
||||
if (plat[case_i + case_i_direction][case_j + case_j_direction]->couleur ==
|
||||
(couleur == NOIR ? BLANC : NOIR)) {
|
||||
return _case_jouable(plat, case_i + case_i_direction,
|
||||
case_j + case_j_direction, case_i_direction,
|
||||
case_j_direction, couleur);
|
||||
}
|
||||
|
||||
// Si c'est bon
|
||||
if (plat[case_i + case_i_direction][case_j + case_j_direction]->couleur ==
|
||||
couleur) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Couleur vide
|
||||
return 0;
|
||||
}
|
||||
|
||||
int case_jouable(Jeton *plat[LONGEUR][LARGEUR], int case_i, int case_j,
|
||||
|
|
Reference in a new issue