diff --git a/includes/jeu.h b/includes/jeu.h index 48ea7ee..743e369 100644 --- a/includes/jeu.h +++ b/includes/jeu.h @@ -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); diff --git a/src/jeu.c b/src/jeu.c index f935683..029f893 100644 --- a/src/jeu.c +++ b/src/jeu.c @@ -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) { diff --git a/src/plateau.c b/src/plateau.c index 8e01bcf..04ac7d0 100644 --- a/src/plateau.c +++ b/src/plateau.c @@ -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; }