Trivial pursuit

Description

ce trivial pursuit est à la base celui de gds75, que je remerci d'ailleur, avec quelques améliorations et surtout plus de questions.

Source / Exemple :


#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>
#include "ECONIO.h"

//Définition de la valeur de chaque couleur dans le sens des aiguilles 
//d'une montre (plateau jeu)

#define VERT 1		
#define MARRON 2
#define BLEU 3
#define ORANGE 4
#define JAUNE 5
#define ROSE 6
#define PERTE_CAM 7		//Case camembert perdu
#define NUL_CAM	8		//Case camembert nul

int nbre_joueurs;			//Sert à stocker globalement le nombre de joueurs

int question_actuelle[7];	//Stocke la question actuelle pour éviter de la reposer deux fois

//Définition des deux tableaux qui constituent la table de jeu
//Ce sont des tableaux constants (qui ne peuvent pas être modifiés dans le reste du programme)
 
const int plateau_couleur[36]=		//Définition dans le tableau de la valeur de chaque couleur
{
	ORANGE, VERT, ROSE, PERTE_CAM, BLEU, MARRON, JAUNE, MARRON, VERT,
	PERTE_CAM, ORANGE, BLEU, ROSE, BLEU, MARRON, PERTE_CAM, JAUNE, 
	ORANGE, VERT, ORANGE, BLEU, PERTE_CAM, ROSE, JAUNE, MARRON, JAUNE,
	ORANGE, PERTE_CAM, VERT, ROSE, BLEU, ROSE, JAUNE, PERTE_CAM, MARRON,
	VERT
};

const int plateau_camembert[36]=	//Définition dans le tableau de la valeur de chaque couleur du camembert
									//et de la présence ou non du camembert
{
	VERT, NUL_CAM, NUL_CAM, JAUNE, NUL_CAM, NUL_CAM, MARRON, NUL_CAM, 
	NUL_CAM, ROSE, NUL_CAM, NUL_CAM, BLEU, NUL_CAM, NUL_CAM, VERT,
	NUL_CAM, NUL_CAM, ORANGE, NUL_CAM, NUL_CAM, MARRON, NUL_CAM, NUL_CAM, 
	JAUNE, NUL_CAM, NUL_CAM, BLEU, NUL_CAM, NUL_CAM, ROSE, NUL_CAM, 
	NUL_CAM, ORANGE, NUL_CAM, NUL_CAM
};

//Définition des tableaux contenant les informations des joueurs

char nom_joueur[4][50];			//Contient le nom des 4 joueurs (maximum) (50 caractères maximum)
int position_joueur[4];			//Contient la position des 4 joueurs sur le plateau
int camembert_joueur[4][7];		//Contient les camemberts (6 maximum) obtenus par les 4 joueurs
								//La deuxième dimension est 7 car l'indexage démarre à 1 (0 n'est pas utilisé)

void splash_screen()
{

	printf("\n\n");

	printf(" ******************************************************************************\n");
	printf(" ******************************************************************************\n");
	printf(" ******************************************************************************\n");
	printf(" **************************  TRIVIAL PURSUIT 2003  ****************************\n");
	printf(" *******************************  Beta 1.2  ***********************************\n");
	printf(" ******************************************************************************\n");
	printf(" ******************************************************************************\n");
	
	printf("\n OOOOOOOOOOOOOOOOOOOOOOOOO By Francois & Christophe OOOOOOOOOOOOOOOOOOOOOOOOOOO\n");
	printf("\n\n\n\n\n\n\npressez entrer pour passer au regles du jeu ");
	getchar();
	
	system("cls");

	printf("********************************* regles du jeu *******************************\n");
	printf("\n\n2 a 4 joueurs peuvent se confronter lors d'une meme partie de trivial pursuit.\n");
	printf("le but du jeu est d'obtenir les six camemberts, symboles de six disciplines \nessentielles a votre culture generale,\n");
	printf("pour ce faire il vous suffit de rentrer la lettre correspondant a la reponse \nvous semblant exacte.\n");
	printf("En cas de bonne reponse dans une des 6 disciplines, l'ordinateur vous gratifie \ndu camembert correspondant,\n");
	printf("en contrepartie, l'arret sur une case perte camembert vous prive du dernier \ncamembert acquis\n");
	printf("a la fin de la partie l'ordinateur annonce le joueur gagnant\n\n\n");
	printf("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! bonne chance !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n");
	printf("\n\n\n\n\n\n\npressez entrer pour commencer a jouer ");
	

		getchar();
	
	system("cls");
}

//Fonction permettant d'ajouter le nombre de joueurs (2 minimum, 4 maximum)

int nombre_joueurs()
{
	int n;
	
	printf("\nCOMBIEN Y-A-T IL DE JOUEURS (ENTRE 2 ET 4): ");
	scanf("%d",&n);
	getchar();
	
	while (!((n<=4) && (n>=2)))		//Tant que n est inférieur a 1 ou supérieur a 4, afficher le message erreur.
	{
		printf("\nERREUR!	VEUILLEZ ENTRER UN NOMBRE ENTRE 2 ET 4: ");
		scanf("%d",&n);
		getchar();
	}
	return n;
}

//Fonction qui rentre les noms des joueurs dans le tableau nom_joueurs

void nom_joueurs()
{
	int i;
	
	printf("\n");
	
	for(i=0; i<nbre_joueurs; i++)
	{
		printf("QUEL EST LE NOM DU JOUEUR %d: ",i+1);
		gets(nom_joueur[i]);		//Le nom du joueur va être mis dans la 2ème 
									//dimension du tableau 
	}

}

//Positionne au hasard les joueurs sur le plateau

void place_joueur()
{
	int i;

	srand((unsigned)time(NULL));	//Initialisation du générateur de nombres aléatoires
									//srand ne s'initialise qu'une seule fois dans tout le programme

	for(i=0; i<nbre_joueurs; i++)
	{
		position_joueur[i]=rand()%35+1;
	}
}

//Initialise tous les camemberts des joueurs à 0

void init_joueur()
{
	int i;
	
	for(i=0; i<nbre_joueurs; i++)
	{	
		camembert_joueur[i][VERT]=0;														
		camembert_joueur[i][MARRON]=0;		
		camembert_joueur[i][BLEU]=0;
		camembert_joueur[i][ORANGE]=0;
		camembert_joueur[i][JAUNE]=0;
		camembert_joueur[i][ROSE]=0;
	}											
}

//Lance le dé et retourne une valeur entre 1 et 6

int de()
{
	return rand()%6+1;							//Génére un random entre 1 MIN et 5+1 MAX en éliminant le 0 
												//RAND_MAX + 1 pour supprimmer la possibilité du 7
}

//Vérifie si un joueur a gagné et affiche le nom du joueur qui a gagné si il y en a un

int fin_jeu()
{
	int i;
	int n;
	
	for(i=0; i<nbre_joueurs; i++)
	{
		n=0;									//Va contenir le nombre de camemberts qu'un joueur a
		if (camembert_joueur[i][VERT]==1)		//Vérifie si un des joueurs a le camembert vert
			n++;
		if (camembert_joueur[i][MARRON]==1)
			n++;		
		if (camembert_joueur[i][BLEU]==1)
			n++;
		if (camembert_joueur[i][ORANGE]==1)
			n++;
		if (camembert_joueur[i][JAUNE]==1)
			n++;
		if (camembert_joueur[i][ROSE]==1)
			n++;

		if (n==6)
		{
			printf("**********************************\n");
			printf("**********************************\n");
			printf("**    LE JOUEUR %s A GAGNE !    **",nom_joueur[i]);
			printf("**********************************\n");
			printf("**********************************\n");
			return 1;
		}
		if (n!=6)
		{
			return n;							//Retourne le nombre de camemberts acquis par le joueur
		}
	}
}

//Déplace le joueur j sur le plateau

void deplace_joueur(int d, int j)
{
	position_joueur[j]=position_joueur[j]+d;

	if (position_joueur[j]>=36)						//Si il sort du plateau, on revient dans le plateau
	{
		position_joueur[j]=position_joueur[j]-36;	
	}
}

//Va lire le nombre de questions et les réponses dans chacun des fichiers 

int lecture_question(int type)
{
	int i;
	char line[100];							//Le buffer* pour la lecture du fichier
	int nombre_questions;					//Va contenir le nombre de questions inclues dans le fichier
	char reponse[50];						//Va contenir la réponse saisie par l'utilisateur

	FILE* fp;								//Le pointeur vers le fichier

	
	//Ouverture des fichiers en mode read

	if (type==VERT)							//Si le type demandé est vert, alors ouvre le fichier vert.txt
		fp=fopen("VERT.txt","r");
	if (type==MARRON)
		fp=fopen("MARRON.txt","r");
	if (type==BLEU)
		fp=fopen("BLEU.txt","r");
	if (type==ORANGE)
		fp=fopen("ORANGE.txt","r");
	if (type==JAUNE)
		fp=fopen("JAUNE.txt","r");
	if (type==ROSE)
		fp=fopen("ROSE.txt","r");

	fgets(line,50,fp);						//Lit la première ligne du fichier
	nombre_questions=atoi(line);			//Convertit le texte de la première ligne du fichier en nombre

	for(i=0; i<question_actuelle[type]; i++)	//Passe les questions qui ont déja été posées et passe à la suivante
	{
		fgets(line,100,fp);				//lit la discipline
		fgets(line,100,fp);				//Lit la question
		fgets(line,50,fp);				//Lit la réponse A
		fgets(line,50,fp);				//Lit la réponse B
		fgets(line,50,fp);				//Lit la réponse C
		fgets(line,50,fp);				//Lit la réponse D
		fgets(line,50,fp);				//Lit la solution
	}

	
	//Lit la question et l'affiche a l'écran

	fgets(line,100,fp);					//Lit la discipline de la question
	printf("%s",line);	
	fgets(line,100,fp);					//Lit la question
	printf("%s",line);
	fgets(line,50,fp);					//Lit la proposition A
	printf("%s",line);
	fgets(line,50,fp);					//Lit la proposition B
	printf("%s",line);
	fgets(line,50,fp);					//Lit la proposition C
	printf("%s",line);
	fgets(line,50,fp);					//Lit la proposition D
	printf("%s",line);
	fgets(line,50,fp);					//Lit la solution mais ne l affiche pas
	//printf("%s",line);				//retirez le mode commentaire pour avoir la solution à chaque fois

	fclose(fp);

	printf("\nEntrez la reponse: ");
	gets(reponse);

	question_actuelle[type]=question_actuelle[type]+1;		//Passe à la question suivante (non au type suivant)

	if (question_actuelle[type]==nombre_questions)			//Si question_actuelle est égale à nombre_questions, alors 
		question_actuelle[type]=0;							// toutes les questions du fichier ont été posées

	if (strupr(reponse)[0]==strupr(line)[0])			//strupr convertit en majuscules une chaîne de caractères
	{														//On compare le 1er caractère du buffer* avec la réponse de l'utilisateur
		printf("\n***Bonne reponse !***\n");
		return 1;
	}
	else 
		printf("\n***Mauvaise reponse***\n");

	return 0;
}

//Initialise à 0 toutes les cases du tableau question_actuelle

void init_question_actuelle()
{
	question_actuelle[VERT]=0;		//Met à 0 la case 1 du tableau
	question_actuelle[MARRON]=0;
	question_actuelle[BLEU]=0;
	question_actuelle[ORANGE]=0;
	question_actuelle[JAUNE]=0;
	question_actuelle[ROSE]=0;
}

//Permet de faire gagner un camembert au joueur s'il réponds correctement et si il est sur une case gagne camembert

void gagne_camembert(int reponse, int joueur)
{
	//Vérifie si le joueur est sur une case ou il est impossible de gagner un  camembert
	if(plateau_camembert[position_joueur[joueur]] == NUL_CAM)
		return;									//return sans paramètre quitte la fonction 

	//Fait gagner un camembert au joueur s'il a bien répondu
	if (reponse==1)
		camembert_joueur[joueur][plateau_camembert[position_joueur[joueur]]]=1;	
}

void main()
{

	int joueur=0;		//Numéro du joueur avec lequel on joue actuellement
	int valeur_de;		//Valeur du dé
	int reponse;		//Réponse bonne ou fausse

	splash_screen();
	printf("\n\t\t**********  DEBUT DU JEU  ***********\n\n");
	
	//Initialisation des joueurs et des variables
	
	nbre_joueurs=nombre_joueurs();
	nom_joueurs();						
	place_joueur();
	init_joueur();
	init_question_actuelle();
	
	//Tant que le jeu n'est pas fini
	while (fin_jeu()!=6)		
	{
		valeur_de=de();		//Fait tourner le de et le stocke dans la variable valeur

		//On ajoute +1 à joueur pour démarrer à 1
		printf("\n\n\nLe joueur n:%d %s lance le de et avance de %d cases\n\n",joueur+1,nom_joueur[joueur],valeur_de);	
		deplace_joueur(valeur_de, joueur);	//Déplace le joueur selon la valeur du de

		//Si le joueur est sur une case perte camembert
		if (plateau_couleur[position_joueur[joueur]]==PERTE_CAM)	
		{
			printf("**************************************************\n");
			printf("***VOUS ETES TOMBE SUR UNE CASE PERTE CAMEMBERT***\n");
			printf("**************************************************\n");

			//Si il a le camembert à perdre
			if (camembert_joueur[joueur][plateau_couleur[position_joueur[joueur]]]==1)
			{
				printf("Vous avez perdu un camembert !");
				camembert_joueur[joueur][plateau_couleur[position_joueur[joueur]]]=0;
			}
		}
		else
		{			
			reponse=lecture_question(plateau_couleur[position_joueur[joueur]]);		//Pose une question en fonction de la couleur du plateau
			gagne_camembert(reponse,joueur);
			printf("\nvous avez maintenant %i camambert(s)",fin_jeu());
		}

		//On passe au joueur suivant

		if (joueur>=(nbre_joueurs-1))
			joueur=0;	//Si on dépasse le nombre de joueurs, on retourne au joueur 1
		else
			joueur=joueur+1;	

}

}

Conclusion :


cette source est un fichier zip il contient les fichiers texte des question et le workspace de visual6.0

Codes Sources

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.