136 lines
3.8 KiB
C
136 lines
3.8 KiB
C
/*
|
|
* =====================================================================================
|
|
*
|
|
* Filename: main.c
|
|
*
|
|
* Description: Le jeu des 30 allumettes se joue à deux joueurs qui, à tour de rôle,
|
|
* prennent 1, 2 ou 3 allumettes d'un tas qui en contient initialement
|
|
* 30.
|
|
* Le joueur qui prend la dernière allumette perd.
|
|
* Cette application permet à deux joueurs de s'affronter. C'est l'ordi-
|
|
* nateur qui est l'arbitre de la partie. Il affiche le nombre d'allumet-
|
|
* tes restant en jeu, donne la main à tour de rôle à chaque joueur et
|
|
* vérifie que les joueurs respectent les règles du jeu.
|
|
* Si un joueur veut prendre trop ou trop peu d'allumettes, le coup est
|
|
* refusé et le joueur doit rejouer. Un joueur doit retirer entre 1 et 3
|
|
* allumettes.
|
|
* En fin de partie, l'arbitre affiche le résultat.
|
|
*
|
|
* Version: 0.1
|
|
* Created: 11/29/2021 10:14:48
|
|
*
|
|
* Author: Adam Belghith, Tunui Franken
|
|
* Organization: Efrei
|
|
*
|
|
* =====================================================================================
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <stdbool.h>
|
|
|
|
void afficher_regles();
|
|
void afficher_credits();
|
|
void afficher_allumettes();
|
|
void afficher_perdant(int);
|
|
int partie_en_cours();
|
|
int jouer_coup(); // renvoie faux si le coup n'est pas valide (il devra être rejoué)
|
|
void partie(); // retourne le joueur perdant
|
|
|
|
int NB_ALLUMETTES = 30;
|
|
enum Joueurs {J1, J2};
|
|
|
|
|
|
int main() {
|
|
int choix = 0;
|
|
|
|
// menu, avec choix à retourner dans un case
|
|
printf("\t\t**********************\n");
|
|
printf("\t\t* Jeu des allumettes *\n");
|
|
printf("\t\t**********************\n\n");
|
|
|
|
printf("Bonjour et bienvenue dans le jeu des allumettes.\n");
|
|
while (choix == 0) {
|
|
printf("Que souhaitez-vous faire ?\n");
|
|
printf("1 - Jouer\n");
|
|
printf("2 - Voir les règles du jeu\n");
|
|
printf("3 - Voir les crédits\n");
|
|
printf("4 - Quitter\n");
|
|
printf("=> ");
|
|
choix = fgetc(stdin);
|
|
|
|
switch (choix) {
|
|
case '1':
|
|
partie();
|
|
break;
|
|
case '2':
|
|
afficher_regles();
|
|
break;
|
|
case '3':
|
|
afficher_credits();
|
|
break;
|
|
case '4':
|
|
return EXIT_SUCCESS;
|
|
default:
|
|
choix = 0;
|
|
break;
|
|
}
|
|
}
|
|
|
|
return EXIT_FAILURE;
|
|
}
|
|
|
|
void afficher_regles() {
|
|
printf("TODO\n");
|
|
}
|
|
void afficher_credits() {
|
|
printf("Développeurs :\n");
|
|
printf("Adam Belghith et Tunui Franken\n");
|
|
}
|
|
|
|
void afficher_perdant(int joueur_courant) {
|
|
printf("Le perdant est %d\n", joueur_courant);
|
|
}
|
|
|
|
void afficher_allumettes() {
|
|
printf("Il reste %d allumettes :\n", NB_ALLUMETTES);
|
|
for (int i = 0; i < NB_ALLUMETTES; i++) {
|
|
printf("| ");
|
|
}
|
|
printf("\n");
|
|
}
|
|
|
|
void partie() {
|
|
int joueur_courant = J1;
|
|
|
|
while (partie_en_cours()) {
|
|
afficher_allumettes();
|
|
|
|
if (jouer_coup()) {
|
|
joueur_courant = (J1 + 1) % 2; // Il n'y a que deux joueurs
|
|
}
|
|
}
|
|
|
|
afficher_perdant(joueur_courant);
|
|
}
|
|
|
|
int partie_en_cours() {
|
|
return NB_ALLUMETTES;
|
|
}
|
|
|
|
int jouer_coup() {
|
|
int allumettes_a_retirer;
|
|
printf("Combien d'allumettes souhaitez-vous retirer ? [1-3] : ");
|
|
scanf("%d", &allumettes_a_retirer);
|
|
|
|
if ((allumettes_a_retirer < 1) || (allumettes_a_retirer > 3)) {
|
|
printf("Coup invalide ! Veuillez recommencer...\n");
|
|
return false;
|
|
}
|
|
NB_ALLUMETTES = NB_ALLUMETTES - allumettes_a_retirer;
|
|
if (NB_ALLUMETTES < 0) {
|
|
NB_ALLUMETTES = 0;
|
|
}
|
|
|
|
return true;
|
|
}
|