* 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 */
|
||||
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);
|
||||
|
||||
|
|
57
src/jeu.c
57
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) {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Reference in a new issue