Créer un jeu de motus

[Fermé]
Signaler
-
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
-
Bonjour,
je suis entrain de créer un jeu de motus mais le problème je n'arrive pas a créer un fichier texte qui permet au début d'ajouter plusieurs mots de mon choix et et l'ordinateur va les mémoriser , pouvez vous m'aider svp

2 réponses

Messages postés
1640
Date d'inscription
dimanche 21 octobre 2012
Statut
Membre
Dernière intervention
10 décembre 2016
497
Bonjour, tu le fais en C? Car j'ai déjà fait un jeu de motus complet mais en Java. Pour le fichier, étant donné qu'il s'agit de mots à 5 lettres, on peut formater le fichier de cette façon :

00003AAAAABBBBBCCCCC

Le fichier contient 3 mots (00003). Il faut par exemple lire la première zone du fichier et ensuite via un nombre aléatoire aller piocher le mot correspondant en se positionnant dans le fichier avec la fonction fseek.

C'est une des façons de faire mais il y en a plusieurs.
Messages postés
9
Date d'inscription
vendredi 11 avril 2014
Statut
Membre
Dernière intervention
2 mai 2014

oui je le fais en C , mais le probleme c'est que l'ordinateur il doit me donner les mots de façon aleatoires sans que je les sache et je doit les deviner voila ma solutin
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<windows.h>
int main()
{
char mot1[26];
char mot2[26];
char prenom, prenom2;
int i, j, nbr_mot1, nb_ltr2, coup, k,joueur;
int ltrplac, ltrmalplac, essai, choix;
system("color 37");
/* Joueur 1 */
printf(" **********************************************\n");
printf(" **********************************************\n");
printf(" ****************** Bienvenu ******************\n");
printf(" **********************************************\n");
printf(" **********************************************\n\n");
printf("\n JEU DE MOTUS\n" );
printf(" --- -- -----\n\n" );
printf("Entrez le mot a faire decouvrir\n" );
scanf("%s", &mot1);
nbr_mot1 = strlen(mot1);
for(i=0; i<nbr_mot1; i++)
{
if(mot1[i] < 'a' || mot1[i] > 'z')
{
printf("Vous avez entrer un caractere erronne ,veuillez réeseyer: %c\n", mot1[i]);
}
}
system("cls" );
printf("Le mot contient %d caracteres\n", nbr_mot1);

/* Niveau de jeu */
printf("\nChoissisez le niveau de difficulte\n\n" );
printf("FACILE (15 essai), tapez 1\n" );
printf("MOYEN (10 essais), tapez 2\n" );
printf("DIFFICILE (5 essais), tapez 3\n" );
printf("Choix : " );
scanf("%d", &choix);
if(choix == 1)
{
essai = 15;
}
else
{
if(choix == 2)
{
essai = 10;
}
else
{
essai = 5;
}
}


/* Nombre de Joueur */
do
{

printf( "Choisissez un mode de jeu:\n");
printf( "1- 1 joueur \n" );
printf("2- 2 joueurs\n" );
scanf("%d",&joueur);

}while(joueur>2);

if (joueur==1)
{
printf("Indiquez votre prenom:\t");
scanf("%s",&prenom);

}


else if(joueur==2)
{
printf( "Veuillez rentrer le prenom du premier joueur:\t" );
scanf("%s",& prenom);
printf("Veuillez rentrer le prenom du second joueur" );
scanf("%s",&prenom2);
printf(" rentrez le nom" ,prenom);
scanf("%d",&mot1);
printf( " Essayez de trouver le nom de ",prenom2,prenom);
}


system("cls" );
k=0;
coup = essai;
while(k < essai || ltrplac < nbr_mot1)
{
do
{
printf("Vous avez %d chances\n", coup);
printf("Entrez un mot\n" );
fflush(stdin);
scanf("%s", &mot2);
nb_ltr2 = strlen(mot2);
if(nb_ltr2 != nbr_mot1 && k < essai)
{
printf("Vous devez entrer un mot de %d caractere\n", nbr_mot1);
}
}while(nb_ltr2 != nbr_mot1);
ltrplac = 0;
for(i=0; i<nbr_mot1; i++)
{
if(mot1[i] == mot2[i])
{
ltrplac = ltrplac + 1;
}
}
printf("Nombre de lettre bien place : %d\n", ltrplac);
printf("---------------------------\n" );
ltrmalplac = 0;
for(j=0; j<nbr_mot1; j++)
{
for(i=0; i<nbr_mot1; i++)
{
ltrmalplac = nbr_mot1- ltrplac;
}
}
printf("Nombre de lettre mal place : %d\n", ltrmalplac);
printf("--------------------------\n\n\n" );
k++;
coup--;
}
system("cls" );
if(ltrplac >= nbr_mot1)
{
printf("\n PERDU\n" );
printf("Vous avez depasse le nombre d essai maximum\n" );
printf("Le mot etait : %s\n", mot1);
}
else
{if (ltrplac = nbr_mot1)
printf("\n Felicitation vous avez gagne le mots est bien %s \n",nbr_mot1);

}
}

le probleme dans mon jeu c'est que c'est a moi de donner le nom secret alors que je veut que sa soit l'ordi qui me le donne , pourrais vous m'aider svp , je suis coincé et j'ai besoin de ce projet pour ce samedi
Messages postés
9
Date d'inscription
vendredi 11 avril 2014
Statut
Membre
Dernière intervention
2 mai 2014

svp quelqu'un peut me répondre j'ai besoin de ce projet pour après demain !!
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 784
Bonjour,

#include<windows.h>
Non standard. A ne pas mettre.

int main()
Le bon prototype est : int main(void)

char prenom, prenom2;
Un prénom ne peut pas tenir dans un char. Il faut un tableau de char. Par exemple : char prenom[26], prenom2[26]; Ou alors, il faut passer par un pointeur et l'allouer dynamiquement avec malloc().

printf(" ****************** Bienvenu ******************\n");
Tout ce bloc serait mieux dans une fonction de présentation dédiée. Ca serait beaucoup plus lisible.

scanf("%s", &mot1);
Pas de & devant mot1. De même pour tous les autres scanf("%s", &...);

system("cls" );
Non portable. D'une manière générale, il vaut mieux éviter la fonction system(). De plus, l'effacement d'écran a plus tendance à agacer le joueur qu'autre chose. Donc autant ne pas le mettre, comme ça tu restes standard en plus.

fflush(stdin);
Fonctionnement indéterminé. Que souhaites-tu faire ? Vider le buffer clavier ? Si oui, il faut utiliser une boucle while getchar() jusqu'à trouver un '\n' ou EOF. Il vaut mieux mettre cette boucle dans une fonction dédiée pour pouvoir l'appeler dès que tu lis des données utilisateurs.

printf(" rentrez le nom" ,prenom);
Pourquoi mettre un argument ?
Soit tu souhaites afficher le prénom : printf("le prénom est %s", prenom);
Soit tu souhaites demander le prénom : printf("rentrez le prénom : "); puis fgets() ou scanf() pour lire le prénom.

if (ltrplac = nbr_mot1)
C'est == l'opérateur de comparaison en C.

N'oublie pas de mettre un return 0; en fin du main().

Je te conseille également de créer des fonctions. Pleins de blocs seraient tellement mieux dans des fonctions.

J'ai juste regardé les erreurs facilement visibles. Pour le reste, ça manque d'indentation.
Merci donc de corriger ton code, et de le poster indenté entre les balises "code c". Par exemple : <"code c">ici tu mets ton code<"/code"> (sans les guillemets).

Cdlt,
Messages postés
9
Date d'inscription
vendredi 11 avril 2014
Statut
Membre
Dernière intervention
2 mai 2014

merci beaucoup mais le problème c'est que , si le mot est juste il va me dire vous avez 14 chance alors qu'il est censé s'arrêté et de me dire bravo vous avez gagné j'ai pas su comment la corriger
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 784
Avant de parler algorithme, il vaut mieux nettoyer ton code comme je te l'ai dit et le reposter correctement indenté. Ca sera beaucoup plus lisible et efficace.