Créer un jeu de motus

Fermé
walid - 29 avril 2014 à 23:42
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 2 mai 2014 à 17:07
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
A voir également:

2 réponses

Utilisateur anonyme
29 avril 2014 à 23:59
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.
0
walidus51 Messages postés 9 Date d'inscription vendredi 11 avril 2014 Statut Membre Dernière intervention 2 mai 2014
1 mai 2014 à 00:28
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
0
walidus51 Messages postés 9 Date d'inscription vendredi 11 avril 2014 Statut Membre Dernière intervention 2 mai 2014
1 mai 2014 à 23:43
svp quelqu'un peut me répondre j'ai besoin de ce projet pour après demain !!
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
Modifié par fiddy le 2/05/2014 à 00:11
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,
0
walidus51 Messages postés 9 Date d'inscription vendredi 11 avril 2014 Statut Membre Dernière intervention 2 mai 2014
2 mai 2014 à 16:20
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
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
2 mai 2014 à 17:07
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.
0