THE HANGED

onacluv Messages postés 13 Date d'inscription samedi 15 décembre 2007 Statut Membre Dernière intervention 11 juin 2008 - 9 juin 2008 à 13:40
onacluv Messages postés 13 Date d'inscription samedi 15 décembre 2007 Statut Membre Dernière intervention 11 juin 2008 - 16 juin 2008 à 15:45
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/46920-the-hanged

onacluv Messages postés 13 Date d'inscription samedi 15 décembre 2007 Statut Membre Dernière intervention 11 juin 2008
16 juin 2008 à 15:45
Merci sincèrement pour cette note.
Je vais me mettre à une nouvelle mise à jour du code en gérant donc manuellement la mémoire à grand coups de new et delete[]...
Je sais me servir de ceci mais n'ai jamais réellement utilisé ce concept. Le résultat risque de faire un petit peu brouillon au début... En espérant pouvoir de nouveau vous faire confiance quand à vos conseils formateurs.
Merci encore
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
16 juin 2008 à 10:57
Salut

Bon voila d'autres petits commentaires:
Pourquoi declares-tu pour toutes tes boucles des "unsigned long int", des simples int ne sont t'il pas suffisant(32767 caracteres au min tout de meme!)?
Beaucoup plus important, il ne faut jamais mettre dans une boucle des vector ( truc.size() ). A chaque fois que la boucle s'incremetera, il recalculera la taille du vector ce qui est completement inutile. Il faut faire quelque chose comme ca:
int size= truc.size();
for(int i;i<size;i++)
...

Sinon, la POO est bien assimile et c'est toujours aussi bien commente.

En fait je disais de laisser tomber les string pour des char, pour que tu geres toi meme la gestion de la memoire. Les string, les vector, passent beaucoup de temps a faire des realloc alloc et free ce qui est couteux en performance.
Autre avantage, il est aussi tres formateur de le faire par toi meme, meme si au debut tu obtiendras quelque chose de moins optimise que les string ou vector.

Je te mets 8/10 pour tous les efforts concentits et pour cette source qui pourra aider les debutants.

A+
onacluv Messages postés 13 Date d'inscription samedi 15 décembre 2007 Statut Membre Dernière intervention 11 juin 2008
14 juin 2008 à 17:37
Voilà, la nouvelle source est postée.
Lachez vos critiques ! :)

Ps: "cout << "\033[2J" << endl;" ne fonctionne pas sous Vista.
J'ai laissé donc le code comme avant à ce niveau.
onacluv Messages postés 13 Date d'inscription samedi 15 décembre 2007 Statut Membre Dernière intervention 11 juin 2008
14 juin 2008 à 13:31
Tu as raison Sodams, merci du conseil.
En fait j'ai tout recodé cela fait déjà un moment en POO.
Le code est beaucoup mieux pensé et beaucoup plus digeste.
Je me retrouve avec un main et une classe Mystere qui contient toutes ses fonctions plus 3, 4 statiques pour afficher le titre ETC...
Je posterai quand j'en aurais le temps, la source étant sur un autre ordinateur que celui ayant la connexion au NET.

Sodams : oouuuuhhh double post le vilain.
----) Bienvenue au club ! :D
cs_Sodams Messages postés 57 Date d'inscription mercredi 11 juin 2008 Statut Membre Dernière intervention 18 novembre 2009
14 juin 2008 à 01:17
Encore une chose (oouuuuhhh double post le vilain)

Essaie d'optimiser au maximum ton code.
Dans ta fonction ici tu répètes 2 fois des même lignes :

afficherTitre();
et system("PAUSE");

# void finPartie(string &motTrouve, string &motMystere) {
# if(motTrouve == motMystere) {
# afficherTitre();
# cout << " VOUS AVEZ TROUVE LE MOT MYSTERE !" << endl << endl;
# cout << " Ce dernier etait bien : "<< motMystere <<"" << endl << endl << endl << " ";
# system("PAUSE");
# }
#
# else {
# afficherTitre();
# cout << " VOUS AVEZ PERDU !" << endl << endl;
# cout << " Le mot mystere etait : "<< motMystere <<"" << endl << endl << endl << " ";
# system("PAUSE");
# }
# }

Qui deviendrait donc :-)

# void finPartie(string &motTrouve, string &motMystere) {
# afficherTitre();
# if(motTrouve == motMystere) {
# cout << " VOUS AVEZ TROUVE LE MOT MYSTERE !" << endl << endl;
# cout << " Ce dernier etait bien : "<< motMystere <<"" << endl << endl << endl << " ";
# }
# else {
# cout << " VOUS AVEZ PERDU !" << endl << endl;
# cout << " Le mot mystere etait : "<< motMystere <<"" << endl << endl << endl << " ";
#
# }
# system("PAUSE");
# }
cs_Sodams Messages postés 57 Date d'inscription mercredi 11 juin 2008 Statut Membre Dernière intervention 18 novembre 2009
14 juin 2008 à 01:12
Je n'aime pas les longs main();

J'opterais plus tôt pour une fonction menu supplémentaire.

L'avantage de la POO, est de pouvoir réutiliser tes classes plus tard.
Si un jour tu veux faire un pendu avec une belle interface, tu n'auras plus qu'a reprendre ta classe.
Cela te permet également d'avoir beaucoup moins de variables à passer en paramètre (et donc, de moins se prendre la tête avec les références).
onacluv Messages postés 13 Date d'inscription samedi 15 décembre 2007 Statut Membre Dernière intervention 11 juin 2008
11 juin 2008 à 17:24
Pffffffffffiouuuuuuuuuuu...........
Enfin, ça compile !
J'ai passé un bon bout de temps à améliorer le code, sa lisibilité... et surtout à l'adapter à la POO !
J'ai suivi vos conseils, reste deux trois trucs à régler au niveau de deux fonctions statiques...
J'ai fait en sorte de ne pas utiliser un seul string pour faire hommage à pistol_Pete. ;)
J'ai ainsi tout remplacer par des vecteurs< char >...
Ca m'a pas mal compliqué la vie mais maintenant ça fonctionne !
Je règle les deux trois détails et j'édite !
onacluv Messages postés 13 Date d'inscription samedi 15 décembre 2007 Statut Membre Dernière intervention 11 juin 2008
11 juin 2008 à 08:08
Ok génial ! :D
Je vais retaper mon code cet après-midi en l'adaptant à vos conseils et en intégrant la notion de POO ( genre une structure/classe MotMystere...).
Je verrai bien. :)
Merci pour le "\033[2J", je ne connaissais pas du tout ce genre de chaine bizarre... :)
Je vous remercie tous, JOJO930, Spoolega et Pistol_Pete, en espérant pouvoir de nouveau compter sur vos conseils et astuces après la mise à jour du code.
Bye, bonne journée. :]
jojo930 Messages postés 9 Date d'inscription dimanche 17 septembre 2006 Statut Membre Dernière intervention 20 août 2008
11 juin 2008 à 05:45
Arf c'est sûr qu'il n'y a pas grand chose à mettre en POO ...
Pour effacer la console (Testé sous Linux) : cout << "\033[2J" << endl; ou encore system("clear");
Dans tout les cas, je pense qu'il est préférable d'éviter les system("cls/clear"), je trouve ça brouillon...
Je me demande pourquoi il n'y a pas de fonctions POSIX pour cela, d'ailleurs.

Bye.
onacluv Messages postés 13 Date d'inscription samedi 15 décembre 2007 Statut Membre Dernière intervention 11 juin 2008
10 juin 2008 à 19:55
Salut Pistol_Pete ! :]
Bien vu pour le vector.h ! ;) Je m'en étais servi pour stocker les lettres déjà entrées dans un vector< char > à grand coup de push_back()...
Finalement j'ai décidé de tout stocker dans une chaine string pour éviter d'avoir à inclure cette bibli... ce que j'ai oublié de retirer ! :D
Merci également pour le srand(), tu as raison c'est une grosse gourde de ma part ! :)
Un point que je ne comprends pas cependant... Pourquoi me conseilles-tu d'abandonner les string ? Je dois employer de simples tableaux de char C ???
Quel est le défaut de cet emploi ?
Merci en tout cas pour ton aide et en espérant avoir à refaire à tes précieux conseils, je te dis à la prochaine ! :)
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
10 juin 2008 à 11:15
Salut

Voila j'apporte aussi quelques remarques:
-Pourquoi inclure vector.h alors que tu ne t'en sert pas?
-Dans ta fonction nombreAleatoire, il est inutile d'appeler srand() a chaque fois que tu appeles cette fonction. srand sert a initialiser le random. Il doit donc etre executer UNE SEULE fois au debut du programme.

Voila pour les remarques. J'ajouterai que c'est bien commenté et que l'organisation du programme est bonne. Il reste maintenant a abandonner les string et a pourquoi pas faire une petite interface graphique.

Bonne continuation
A+
onacluv Messages postés 13 Date d'inscription samedi 15 décembre 2007 Statut Membre Dernière intervention 11 juin 2008
10 juin 2008 à 08:28
Euuh... Je ferai ça après avoir obtenu des réponses... Là je suis au CDI du lycée donc... ce sera pour ce soir...
onacluv Messages postés 13 Date d'inscription samedi 15 décembre 2007 Statut Membre Dernière intervention 11 juin 2008
10 juin 2008 à 08:25
Bonjour messieurs ! :)

Tout d'abord, merci d'avoir répondu et de m'apporter vos conseils...

Spoolega: Je vais initialiser ça, tu as raison. Pas de warning cependant...
Merci.

JOJO930: C'est vrai, aucune utilisation de la POO... Je me dois de te poser une question... Faut-il utiliser la POO dans le cas où un seul objet sera instancié ?
Simplement pour "ranger les fonctions" ?
Dans un cas tel que ce petit jeu, quelles classes devrai-je créer ? Mot, Joueur, AI ? Merci de m'éclairer un peu sur ce point qui me semble obscur...

Quant à la portabilité de mon code, je suis d'accord et me suis toujours rendu compte de ce défaut. J'utilise en permanence les deux fonctions systemes DOS "CLS" et "PAUSE", car je ne connais pas d'alternative... Si tu as un lien à ce sujet, ou tout simplement la réponse, je suis preneur !
En attendant, je vais modifier mon code pour l'adapter à la POO et je remettrai plus tard en ligne... Merci ! :)
jojo930 Messages postés 9 Date d'inscription dimanche 17 septembre 2006 Statut Membre Dernière intervention 20 août 2008
10 juin 2008 à 06:02
Salut,

Quel est l'interêt de dire "je l'ai écris en C++" si ton code est pas orienté objet ?
Utilisation de system("CLS") <-- Pas portable.
Bon code pour débuter, mais après...

Essai encore :) !
Spoolega Messages postés 65 Date d'inscription dimanche 8 janvier 2006 Statut Membre Dernière intervention 27 février 2011 1
9 juin 2008 à 23:57
absolument pas*
Spoolega Messages postés 65 Date d'inscription dimanche 8 janvier 2006 Statut Membre Dernière intervention 27 février 2011 1
9 juin 2008 à 18:58
Bonjour,
Dans ton main, tu viens tester tout de suite ta variable 'choixMenu' dans le while... elle est bien déclarée mais absolument initialisée, ca me "gène" un peu.
Ca ne provoque pas un warning ? O_O

je n'ai pas regardé le reste.

++
onacluv Messages postés 13 Date d'inscription samedi 15 décembre 2007 Statut Membre Dernière intervention 11 juin 2008
9 juin 2008 à 14:58
Svp, j'aimerai vraiment avoir le conseil de personnes expérimentées pour m'améliorer...
onacluv Messages postés 13 Date d'inscription samedi 15 décembre 2007 Statut Membre Dernière intervention 11 juin 2008
9 juin 2008 à 13:40
Aucun conseil à apporter ?
Rejoignez-nous