Forum Clubic

Le Pendu C / C++

Salut !

question précise :

est-il possible de générer aléatoirement un mot à chaque ouverture du jeu du pendu en C? mot correct bien sûr, à générer à partir d’un fichier (format?) qui contiendrait une base de données des mots que le programme peut utiliser…

Le code source en lui-même du programme n’est pas bien compliqué, nombre d’essais, affichage des lettres trouvées, etc… le seul point sur lequel on bute c’est la génération de mots… C’est possible de créer une librairie, mais comment faire pour créer une fonction qui irait chercher un mot au hasard dans cette librairie…? (“mots.h” :smiley: )

Merci :ane:

Le format du fichier dépend que de toi : Un mot par ligne ? Chaque mot est séparé du suivant par un espace ? Tu fais un peu ce que tu veux.

Si tu veux faire un “mots.h” avec une liste de mots, tu pourrais faire un tableau (c’est très bourrin) et faire un random sur l’index dans ce tableau.

Pour le fichier, tu pourrais avoir une petite structure ou meme un simple nombre au début de ton fichier qui va t’indiquer combien de mots il y a dans ton fichier. A partir de là, tu fais un random de 1 à ce nombre, ca te donne le mot pour la partie en cours. Il te suffit ensuite d’aller le lire dans le fichier (en comptant les espaces ou les ‘\n’).

C’est des examples comme ca, y a 10000 facons de faire ce que tu demande.

mmmhh…
peux-tu me donner un exemple concret?

style une feuille avec l’énoncé, ensuite :

mot1;mot2;mot3;etc…

enfin… peux-tu me montrer, tout simplement :neutre:

disons un truc comme ca en pseudo code :

Fichier :
5 mot1;mot2;mot3;mot4;mot5

Nombre_de_mots = Lire début du fichier avant l’espace (je te laisse chercher comment convertir un nombre en ASCII en un entier).
nouveauMot = Random(Nombre_de_mots);

Tant que le nombre de ‘;’ est inférieur à nouveauMot continuer à lire le fichier.

Lis ton mot jusqu’au prochain ‘;’ ou jusqu’au ‘\0’ de fin de fichier.

Fonctions intéressantes : read (ou fread), random / srandom, malloc (pour allouer un char* afin de stocker ton mot).

Sais-tu ouvrir / lire / un fichier ? Sais tu allouer un char * en utilisant malloc ? Je ne connais pas ton niveau, alors je sais pas si je dois être super précis…

euh… niveau bas… très bas… débutant on va dire pour faire simple!! :ane:

en bref je suis capable de faire le code source principal :

entrée des lettres, nombre de chances, etc… la seule chose dont je suis incapable c’est la génération du mot au début du programme…

maintenant si tu me donnes une solution type que je peux introduire dans le code pour générer le mot je vais devoir adapter mon code pour que le nombre de lettres s’adapte, ainsi que le nombre de chances pour les mots très longs par exemple mais bon, ce genre de trucs ne me pose pas de problème c’est juste que je ne trouve pas le moyen de générer un mot au lancement… d’où ma question :wink:

euh… c’est qui malloc? :paf:
et j’ai pas encore vraiment vu les pointeurs (char*), je vois un peu comment ca fonctionne mais je sais qu’il est possible de faire sans… :wink:
par contre pour l’ouverture, lecture de fichiers, ca je n’ai encore jamais essayé, pour l’instant je me contente de faire ce programme dans un seul fichier car il ne nécessite pas de fichiers additionnels (main() ou pendu() ), mais si j’ajoute un fichier joint pour la génération il va falloir que je me penche sur le sujet :wink:

Thx

Pour tirer ton mot au hasard, en fait il faut d’abord avoir mis les mots de ton fichier “dictionnaire” dans un tableau (ou une liste). Par exemple si tu as un tableau qui s’appelle Dico, de taille TailleDico, pour générer un mot au hasard, tu peux simplement tirer un nombre entier X entre 0 et TailleDico - 1, et faire appel au mot Dico[X].

Il faut d’abord avoir mis les mots de ton dictionnaire dans le tableau Dico, d’où la question de Zulnov: sais-tu ouvrir un fichier texte dans un programme C/C++ ? Avec la fonction read par exemple ?
Il ne te faut pas un fichier additionnel à ton programme (le programme peut très bien tenir dans ton main() ), mais il te faut un fichier texte, au format .txt par exemple, qui contienne les mots. C’est plus propre d’avoir d’un côté un fichier “dico.txt” et d’autre côté ton programme “pendu.c” que d’avoir tout dans le même fichier.

Pour faire simple tu peux faire un “mots.h” qui va ressembler à ca :


#define MAX_WORDS 6

char *Dico[MAX_WORDS] =
{"mot1", 
 "mot2", 
 "mot3", 
 "mot4", 
 "mot5",
 0};

§Evidemment si tu rajoutes des mots il faut que tu augmente MAX_WORDS d’autant.

Ensuite dans ton pendu.c tu ajoutes ton : #include “mots.h”

Tu initialize ton random au début de ta boucle principale : srandom(time(NULL));

et l’index dans ton tableau du nouveau mot à deviner est : (random() % MAX_WORDS);

Tu peux ensuite comparer ce qui est saisi par l’utiliser avec le mot dans le tableau Dico qui se trouve à l’index retourné par la petite formule précédante.

Par exemple :


#include <stdlib.h>
#include <time.h>
#include "mots.h"

int main()
{
  int index;

  while(42)    //boucle infinie principale du pendu
  {
     srandom(time(NULL));
     index = random()  % MAX_WORDS;
     Comparer la saisie avec Dico[index];
  }
}

Edité le 14/12/2007 à 21:12