* 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:
Mylloon 2022-11-17 23:25:09 +01:00
parent 198352de4b
commit 7fc4214b1a
Signed by: Anri
GPG key ID: A82D63DFF8D1317F
3 changed files with 64 additions and 4 deletions

View file

@ -56,9 +56,15 @@ 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 */
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 */
void _action_joueur_humain(int *ligne, int *colonne);
/* Joue le tour d'un joueur humain */
void action_joueur_humain(Jeu *jeu, int couleur);

View file

@ -35,8 +35,8 @@ void deroulement_partie(Jeu *jeu) {
while (!partie_finie(jeu)) {
affiche_plateau(jeu->plateau);
// TODO: Check if player can play
if (action_possible_joueur(jeu->plateau, tour)) {
// Si le joueur peut jouer
action_joueur_humain(jeu, tour);
} else {
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) {
// 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 j = 0; j < LARGEUR; j++) {
if (case_jouable(plat, i, j, couleur)) {
@ -67,9 +77,52 @@ int action_possible_joueur(Jeton *plat[LONGEUR][LARGEUR], int couleur) {
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) {
// TODO
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) {

View file

@ -29,8 +29,8 @@ void _affiche_lettres(void) {
}
void affiche_plateau(Jeton *plat[LONGEUR][LARGEUR]) {
// TODO: Instead of print instantly, store everything in a table and print
// the whole thing once?
// TODO (enhancement): Instead of print instantly, store everything in a
// table and print the whole thing once?
_affiche_lettres();
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 couleur) {
// TODO
(void)plat, (void)case_i, (void)case_j, (void)couleur;
return 1;
}