* add fn about the play itself
* update comments * ask the human player to play something * hide temporarly unused args warning
This commit is contained in:
parent
198352de4b
commit
7fc4214b1a
3 changed files with 64 additions and 4 deletions
|
@ -56,9 +56,15 @@ 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 */
|
||||||
|
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 */
|
||||||
|
void _action_joueur_humain(int *ligne, int *colonne);
|
||||||
|
|
||||||
/* Joue le tour d'un joueur humain */
|
/* Joue le tour d'un joueur humain */
|
||||||
void action_joueur_humain(Jeu *jeu, int couleur);
|
void action_joueur_humain(Jeu *jeu, int couleur);
|
||||||
|
|
||||||
|
|
57
src/jeu.c
57
src/jeu.c
|
@ -35,8 +35,8 @@ void deroulement_partie(Jeu *jeu) {
|
||||||
while (!partie_finie(jeu)) {
|
while (!partie_finie(jeu)) {
|
||||||
affiche_plateau(jeu->plateau);
|
affiche_plateau(jeu->plateau);
|
||||||
|
|
||||||
// TODO: Check if player can play
|
|
||||||
if (action_possible_joueur(jeu->plateau, tour)) {
|
if (action_possible_joueur(jeu->plateau, tour)) {
|
||||||
|
// Si le joueur peut jouer
|
||||||
action_joueur_humain(jeu, tour);
|
action_joueur_humain(jeu, tour);
|
||||||
} else {
|
} else {
|
||||||
printf("Pas de coup jouable.\n");
|
printf("Pas de coup jouable.\n");
|
||||||
|
@ -55,7 +55,17 @@ 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;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int action_possible_joueur(Jeton *plat[LONGEUR][LARGEUR], int couleur) {
|
int action_possible_joueur(Jeton *plat[LONGEUR][LARGEUR], int couleur) {
|
||||||
|
// TODO (enhancement): Instead of returning if the player can play, return a
|
||||||
|
// structure with: if the player can play, and the possible moves of the
|
||||||
|
// player
|
||||||
for (int i = 0; i < LONGEUR; i++) {
|
for (int i = 0; i < LONGEUR; i++) {
|
||||||
for (int j = 0; j < LARGEUR; j++) {
|
for (int j = 0; j < LARGEUR; j++) {
|
||||||
if (case_jouable(plat, i, j, couleur)) {
|
if (case_jouable(plat, i, j, couleur)) {
|
||||||
|
@ -67,9 +77,52 @@ int action_possible_joueur(Jeton *plat[LONGEUR][LARGEUR], int couleur) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void _action_joueur_humain(int *ligne, int *colonne) {
|
||||||
|
// Demande la colonne
|
||||||
|
int ok = 0;
|
||||||
|
char tmp;
|
||||||
|
while (!ok) {
|
||||||
|
printf("Quelle colonne voulez-vous placer votre jeton (A-H) ? ");
|
||||||
|
scanf(" %1c", &tmp);
|
||||||
|
|
||||||
|
majuscule(&tmp);
|
||||||
|
if (!(tmp >= 'A' && tmp <= 'H')) {
|
||||||
|
printf("Colonne renseignée invalide.\n");
|
||||||
|
} else {
|
||||||
|
*colonne = tmp;
|
||||||
|
ok = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Demande la ligne
|
||||||
|
ok = 0, *ligne = 0;
|
||||||
|
while (!ok) {
|
||||||
|
printf("Quelle ligne voulez-vous placer votre jeton (1-8) ? ");
|
||||||
|
scanf(" %1d", ligne);
|
||||||
|
|
||||||
|
if (*ligne < 1 || *ligne > LARGEUR) {
|
||||||
|
printf("Ligne renseignée invalide.\n");
|
||||||
|
} else {
|
||||||
|
ok = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void action_joueur_humain(Jeu *jeu, int couleur) {
|
void action_joueur_humain(Jeu *jeu, int couleur) {
|
||||||
// TODO
|
|
||||||
printf("Tour de %c !\n", couleur);
|
printf("Tour de %c !\n", couleur);
|
||||||
|
int ligne, colonne;
|
||||||
|
_action_joueur_humain(&ligne, &colonne);
|
||||||
|
|
||||||
|
int ok = 0;
|
||||||
|
while (!ok) {
|
||||||
|
printf("Vous voulez jouer en %c%d... ", colonne, ligne);
|
||||||
|
|
||||||
|
if (!jeu_joueur(jeu, ligne - 1, colonne - 'A', couleur)) {
|
||||||
|
printf("mais ce n'est pas possible, réessayez !\n");
|
||||||
|
|
||||||
|
_action_joueur_humain(&ligne, &colonne);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int partie_finie(Jeu *jeu) {
|
int partie_finie(Jeu *jeu) {
|
||||||
|
|
|
@ -29,8 +29,8 @@ void _affiche_lettres(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void affiche_plateau(Jeton *plat[LONGEUR][LARGEUR]) {
|
void affiche_plateau(Jeton *plat[LONGEUR][LARGEUR]) {
|
||||||
// TODO: Instead of print instantly, store everything in a table and print
|
// TODO (enhancement): Instead of print instantly, store everything in a
|
||||||
// the whole thing once?
|
// table and print the whole thing once?
|
||||||
_affiche_lettres();
|
_affiche_lettres();
|
||||||
|
|
||||||
for (int i = 0; i < LONGEUR * 2 + 1; ++i) {
|
for (int i = 0; i < LONGEUR * 2 + 1; ++i) {
|
||||||
|
@ -93,6 +93,7 @@ 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_jouable(Jeton *plat[LONGEUR][LARGEUR], int case_i, int case_j,
|
||||||
int couleur) {
|
int couleur) {
|
||||||
// TODO
|
// TODO
|
||||||
|
(void)plat, (void)case_i, (void)case_j, (void)couleur;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Reference in a new issue