* 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 */
|
/* 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);
|
||||||
|
|
||||||
/* Joue le tour d'un joueur */
|
/* Joue le tour d'un joueur humain */
|
||||||
void action_joueur(Jeu *jeu, int couleur);
|
void action_joueur_humain(Jeu *jeu, int couleur);
|
||||||
|
|
||||||
/* Vérifie si une partie est terminée */
|
/* Vérifie si une partie est terminée */
|
||||||
int partie_finie(Jeu *jeu);
|
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 */
|
/* Libère le jeu en mémoire */
|
||||||
void free_jeu(Jeu *jeu);
|
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
|
// TODO: Check if player can play
|
||||||
if (action_possible_joueur(jeu->plateau, tour)) {
|
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;
|
tour = tour == NOIR ? BLANC : NOIR;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Handle end game
|
// 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) {
|
int action_possible_joueur(Jeton *plat[LONGEUR][LARGEUR], int couleur) {
|
||||||
for (int i = 0; i < 8; i++) {
|
for (int i = 0; i < LONGEUR; i++) {
|
||||||
for (int j = 0; j < 8; j++) {
|
for (int j = 0; j < LARGEUR; j++) {
|
||||||
if (case_jouable(plat, i, j, couleur)) {
|
if (case_jouable(plat, i, j, couleur)) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -56,7 +66,7 @@ int action_possible_joueur(Jeton *plat[LONGEUR][LARGEUR], int couleur) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void action_joueur(Jeu *jeu, int couleur) {
|
void action_joueur_humain(Jeu *jeu, int couleur) {
|
||||||
// TODO
|
// TODO
|
||||||
printf("Tour de %c !\n", couleur);
|
printf("Tour de %c !\n", couleur);
|
||||||
}
|
}
|
||||||
|
@ -67,6 +77,27 @@ int partie_finie(Jeu *jeu) {
|
||||||
plateau_rempli(jeu->plateau);
|
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) {
|
void free_jeu(Jeu *jeu) {
|
||||||
free_liste(jeu->j1->liste_jeton);
|
free_liste(jeu->j1->liste_jeton);
|
||||||
free(jeu->j1);
|
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_jouable(Jeton *plat[LONGEUR][LARGEUR], int case_i, int case_j,
|
||||||
int case_i_direction, int case_j_direction, int couleur) {
|
int case_i_direction, int case_j_direction, int couleur) {
|
||||||
// TODO
|
if (case_i + case_i_direction < 0 ||
|
||||||
return 1;
|
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,
|
int case_jouable(Jeton *plat[LONGEUR][LARGEUR], int case_i, int case_j,
|
||||||
|
|
Reference in a new issue