Exercice langage C : Jeux de cailloux

Le jeu des cailloux : un tas de N cailloux se trouve entre deux joueurs ; à tour de rôle chacun prend 1, 2 ou 3 cailloux. Celui qui est obligé de prendre le dernier caillou a perdu.

Ce jeu possède une stratégie gagnante :  le joueur qui réussit, à laisser un nombre de cailloux égal à un multiple de 4 plus 1, à chaque fois qu’il doit jouer, gagne à coup sûr.

Le but est d’écrire un programme qui simule le jeu des cailloux (entre vous et la machine) :

Ecrire une fonction initialiser qui demande le nombre de cailloux et quel joueur commence le premier.

Ecrire une fonction utilisateur_joue qui demande à l’utilisateur le nombre de cailloux à prendre et qui met à jour le nombre de cailloux restants.

Ecrire une fonction machine_joue qui permet à la machine de prendre un nombre de cailloux et qui met à jour le nombre de cailloux restants.

Ecrire le programme principal.

Les prototypes :

void initialiser(int *nbCa, int *jo) ;

void utilisateur_joue(int *nbCa) ;

void machine_joue(int *nbCa) ;

nbCa : le nombre de cailloux

jo : joueur (1 : l’utilisateur et 2 : la machine)

/* jeu des cailloux */
#include
/* initialisation de la partie, avec la saisie du nombre total de cailloux et
* du joueur qui demarre la partie */
void initialiser(int *nbCa, int *jo);
/* le jeu proprement dit pour un des deux joueurs : choix du nombre de
* cailloux */
void jeu(int jo, int *nbCa);
/* la machine joue */
void machine_joue(int *nbCa);
/* l'utilisateur joue, et saisit le nombre de cailloux */
void utilisateur_joue(int *nbCa);
/* changement de joueur dans *jo */
void changer_joueur (int *jo);
int main()
{
int finJeu = 0;
int nbCailloux , joueur, perdant;
initialiser(&nbCailloux, &joueur);
while ( !finJeu )
{
printf("\nil reste %d cailloux\n", nbCailloux);
jeu (joueur, &nbCailloux);
if (nbCailloux == 0)
{
perdant = joueur;
finJeu = 1;
}
else
{
changer_joueur (&joueur);
}
}
if (perdant == 1)
{
printf("dommage: tu as perdu\n");
}
else
{
printf("bravo: tu as gagne\n");
}
return 0;
}
void initialiser(int *nbCa, int *jo)
{
int rep;
printf("donnez le nombre de cailloux : "); scanf("%d", nbCa);
printf("\nchoix du premier joueur :\n");
printf("\tutilisateur.: 1\n");
printf("\tmachine.....: 2\n");
printf("qui ? ");
scanf("%d", &rep);
switch (rep)
{
case 1: *jo = 1;
break;
case 2: *jo = 2;
break;
}
}
void jeu(int jo, int *nbCa)
{
if (jo == 2)
{
machine_joue(nbCa);
}
else
{
utilisateur_joue(nbCa);
}
}
void machine_joue(int *nbCa)
{
int cailloux_pris, modu;
modu = *nbCa % 4;
switch (modu)
{
case 0: cailloux_pris = 3;
break;
case 1: cailloux_pris = 1;
break;
case 2: cailloux_pris = 1;
break;
case 3: cailloux_pris = 2;
break;
}
printf("j\'ai pris %d cailloux \n",cailloux_pris);
*nbCa = *nbCa - cailloux_pris;
}
void utilisateur_joue(int *nbCa)
{
int cailloux_pris;
do
{
printf("combien de cailloux: ");
scanf("%d", &cailloux_pris);
}
while ((cailloux_pris = 4) ||
(cailloux_pris > *nbCa));
*nbCa = *nbCa - cailloux_pris;
}
void changer_joueur (int *jo)
{
if (*jo == 2)
{
*jo = 1;
}
else
{
*jo = 2;
}
}

Article publié le 23 Février 2012 Mise à jour le Lundi, 07 Novembre 2022 15:22 par BENKIRANE Fatima Ezzahra