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
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.