98 lines
2.9 KiB
C
98 lines
2.9 KiB
C
/* partie.c */
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
|
|
#include "affichage.h"
|
|
#include "misc.h"
|
|
#include "partie.h"
|
|
|
|
|
|
int NB_ALLUMETTES = 30;
|
|
|
|
void partie(char *joueur1, char *joueur2) {
|
|
enum Joueur joueur_courant = J1;
|
|
int allumettes_retirees = 0;
|
|
|
|
while (NB_ALLUMETTES) {
|
|
if (joueur_courant == J1) {
|
|
afficher_tour(joueur1);
|
|
} else {
|
|
afficher_tour(joueur2);
|
|
}
|
|
|
|
afficher_allumettes(NB_ALLUMETTES);
|
|
|
|
if ((allumettes_retirees = jouer_coup(joueur_courant))) {
|
|
if (joueur_courant == J1) printf("%s a retiré %d allumette(s).\n", joueur1, allumettes_retirees);
|
|
else printf("%s a retiré %d allumette(s).\n", joueur2, allumettes_retirees);
|
|
joueur_courant = (joueur_courant + 1) % 2; // il n'y a que deux joueurs
|
|
}
|
|
}
|
|
|
|
if (joueur_courant == J1) {
|
|
// on inverse parce que le joueur courant a changé après le dernier coup du perdant
|
|
afficher_perdant(joueur2);
|
|
} else {
|
|
afficher_perdant(joueur1);
|
|
}
|
|
}
|
|
|
|
int get_nb_allumettes_a_retirer(enum Joueur joueur_courant) {
|
|
int allumettes_a_retirer;
|
|
|
|
if ((ORDINATEUR != HUMAN) && (joueur_courant == J2)) {
|
|
if (ORDINATEUR == EASY) {
|
|
// ORDI Stupide
|
|
allumettes_a_retirer = rand() % 3 + 1;
|
|
} else if(ORDINATEUR == HARD) {
|
|
// ORDI Intelligent
|
|
allumettes_a_retirer = ((NB_ALLUMETTES - 1) % 4);
|
|
if (allumettes_a_retirer == 0) {
|
|
// Si l'ordinateur ne peut pas jouer intelligemment, alors il joue aléatoirement.
|
|
// On ne s'intéresse pas à savoir si on enlève plus que le nombre d'allumettes qu'il reste car c'est géré dans jouer_coup
|
|
allumettes_a_retirer = rand() % 3 + 1 ;
|
|
}
|
|
} else {
|
|
// ERREUR
|
|
exit(EXIT_FAILURE);
|
|
}
|
|
|
|
} else {
|
|
printf("Combien d'allumettes souhaitez-vous retirer ? [1-3] : ");
|
|
allumettes_a_retirer = fgetc(stdin);
|
|
if (allumettes_a_retirer == '\n') {
|
|
// rien n'a été tapé, créons une erreur "propre" pour sortir avec false
|
|
allumettes_a_retirer = 0;
|
|
} else {
|
|
if (allumettes_a_retirer == 'q') {
|
|
// joueur déclare forfait
|
|
NB_ALLUMETTES = 0;
|
|
return 1;
|
|
}
|
|
// conversion vers int depuis la valeur ascii
|
|
allumettes_a_retirer = allumettes_a_retirer - 48;
|
|
vider_buffer();
|
|
}
|
|
}
|
|
|
|
return allumettes_a_retirer;
|
|
}
|
|
|
|
int jouer_coup(enum Joueur joueur_courant) {
|
|
int allumettes_a_retirer;
|
|
|
|
allumettes_a_retirer = get_nb_allumettes_a_retirer(joueur_courant);
|
|
|
|
if ((allumettes_a_retirer < 1) || (allumettes_a_retirer > 3)) {
|
|
printf("Coup invalide ! Veuillez recommencer...\n");
|
|
return 0;
|
|
}
|
|
|
|
NB_ALLUMETTES = NB_ALLUMETTES - allumettes_a_retirer;
|
|
if (NB_ALLUMETTES < 0) {
|
|
NB_ALLUMETTES = 0;
|
|
}
|
|
|
|
return allumettes_a_retirer;
|
|
}
|