Exercice langage C: Jeux de cailloux

Exercice langage C

[tab name=’Exercice langage C’]

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)

[/tab][tab name=’Correction’]

/* 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 <= 0) || (cailloux_pris >= 4) ||
		(cailloux_pris > *nbCa));
	*nbCa = *nbCa - cailloux_pris;
}

void changer_joueur (int *jo)
{
	if (*jo == 2)
	{
		*jo = 1;
	}
	else
	{
		*jo = 2;
	}
}

Exercice langage C

Exercice informatique, Correction exercice, exercices corrigés, Solution exercice, Exercice langage C

[/tab][end_tabset skin= »lightness » ]

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *