Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1516 connectés 

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Suivante
Auteur Sujet :

Petits calculs pour les crédits, ne fonctionne pas [noob]

n°2282258
Lt Ripley
Ils ont tout niqué
Posté le 25-05-2016 à 14:58:55  profilanswer
 

Reprise du message précédent :

gilou a écrit :

Il suffit de rajouter
#include <limits>
dans MotMysterePlus.h

Il faut que je le mette dans main.cpp pour que ça fonctionne

mood
Publicité
Posté le 25-05-2016 à 14:58:55  profilanswer
 

n°2282261
Lt Ripley
Ils ont tout niqué
Posté le 25-05-2016 à 15:09:18  profilanswer
 

Ahh je crois que j'ai compris, il faut que je rebuild pour changer de projet... ouf...
 
Et non ça ne fonctionne pas
 
C'est apparemment alt-F5 et alt-F6 pour basculer d'un projet à un autre
 
Ça à l'air de fonctionner, tout comme un double clic sur le projet mais cela réduit l'arborescence


Message édité par Lt Ripley le 25-05-2016 à 16:08:22
n°2282313
Lt Ripley
Ils ont tout niqué
Posté le 25-05-2016 à 19:58:54  profilanswer
 

Bon, j'ai réussi à ajouter le fait qu'on puisse jouer avec un niveau (je demande un nombre de lettres max).
 
Plus le nombre de lettres choisi est petit, plus le programme rame (2-3 secondes pour 5 lettres sur mon desktop véloce), car je boucle tant que le nombre de lettres est trop grand.
 
Edit : Prochaine étape : essayer en créant un tableau dynamique une bonne fois pour toute au démarrage


Message édité par Lt Ripley le 25-05-2016 à 20:18:44
n°2282318
rat de com​bat
attention rongeur méchant!
Posté le 25-05-2016 à 20:05:36  profilanswer
 

Conseil: Un seul projet ouvert sous C::B. Si tu en as plusieurs tu risques de compiler un autre projet que celui sur lequel tu travailles et ce genre de choses. Ne me demande pas comment je sais ça... :o
Edit: Et même si ça demande un effort, fais gaffe à ne pas avoir trop le bordel dans tes fichiers pour la même raison. Et garde bien les codes que tu fais, ça peut toujours servir plus tard pour vérifier/reprendre tel ou tel point.


Message édité par rat de combat le 25-05-2016 à 20:06:44
n°2282323
gilou
Modérateur
Modzilla
Posté le 25-05-2016 à 21:13:46  profilanswer
 

Tiens, une version que je t'ai pondu en C++11, pour te montrer comment j'aurais organisé les choses:

Code :
  1. #include <algorithm>
  2. #include <iostream>
  3. #include <iterator>
  4. #include <fstream>
  5. #include <vector>
  6. #include <random>
  7. #include <chrono>
  8. // fonction utilitaire pour virer les blancs autour d'une réponse
  9. std::string trim(const std::string& str, const std::string& whitespace = " \t" ) {
  10.     const auto strBegin = str.find_first_not_of(whitespace);
  11.     if (strBegin == std::string::npos) {
  12.         return "";    // no content
  13.     }
  14.     const auto strEnd = str.find_last_not_of(whitespace);
  15.     const auto strRange = strEnd - strBegin + 1;
  16.     return str.substr(strBegin, strRange);
  17. }
  18. bool read_dict(std::vector<std::string>& dict, std::string const& fname) {
  19.     std::ifstream dictfile(fname);
  20.     if (dictfile.is_open()) {
  21.         // on récupère le nombre de mots et on ajuste la taille du vecteur
  22.         dict.reserve(std::distance(std::istream_iterator<std::string>(dictfile),
  23.                                    std::istream_iterator<std::string>()));
  24.         // on nettoie les flags de fin de fichier et on rembobine
  25.         dictfile.clear();
  26.         dictfile.seekg(0);
  27.         // on remplit le vecteur
  28.         dict.assign(std::istream_iterator<std::string>(dictfile),
  29.                     std::istream_iterator<std::string>());
  30.         return true;
  31.     }
  32.     else {
  33.         std::cerr << "Erreur à l'ouverture de " << fname << " !" << std::endl;
  34.     }
  35.     return false;
  36. }
  37. bool user_play_duo() {
  38.     while (true) {
  39.         std::string answer;
  40.         std::cout << "Voulez-vous jouer en Solo ou en Duo ? (S/D)" << std::endl;
  41.         std::getline(std::cin, answer);
  42.         answer = trim(answer);
  43.         transform(answer.begin(), answer.end(), answer.begin(), ::toupper);
  44.         if ((!answer.compare("D" )) || (!answer.compare("DUO" ))) {
  45.             return true;
  46.         }
  47.         else if ((!answer.compare("S" )) || (!answer.compare("SOLO" ))) {
  48.             return false;
  49.         }
  50.         else {
  51.             std::cout << "'" << answer << "' n'est pas une valeur correct : (S/D)" << std::endl;
  52.         }
  53.     }
  54. }
  55. bool user_play_again() {
  56.     while (true) {
  57.         std::string answer;
  58.         std::cout << "voulez-vous faire une autre partie ? (O/N)" << std::endl;
  59.         std::getline(std::cin, answer);
  60.         answer = trim(answer);
  61.         transform(answer.begin(), answer.end(), answer.begin(), ::toupper);
  62.         if ((!answer.compare("O" )) || (!answer.compare("OUI" ))) {
  63.             return true;
  64.         }
  65.         else if ((!answer.compare("N" )) || (!answer.compare("NON" ))) {
  66.             return false;
  67.         }
  68.         else {
  69.             std::cout << "'" << answer << "' n'est pas une valeur correct : (O/N)" << std::endl;
  70.         }
  71.     }
  72. }
  73. void solo_game(std::string const& mystery_word, std::string const& displayed_word, int const max_essais) {
  74.     int essai(0);
  75.     std::string answer;
  76.     do {
  77.         std::cout << "Quel est ce mot ? " << displayed_word << std::endl;
  78.         std::cout << "Il vous reste " << max_essais - essai << " coup(s)." << std::endl;
  79.         std::getline(std::cin, answer);
  80.         ++essai;
  81.         answer = trim(answer);
  82.         transform(answer.begin(), answer.end(), answer.begin(), ::toupper);
  83.         if (!answer.compare(mystery_word)) {
  84.             std::cout << "\nBRAVO !" << std::endl;
  85.             std::cout << "Vous avez trouve en " << essai << " essai(s)" << std::endl;
  86.             return;
  87.         }
  88.         else {
  89.             std::cout << "Ce n'est pas le bon mot !\n" << std::endl;
  90.         }
  91.     } while (max_essais - essai);
  92.     std::cout << "PERDU ! le mot mystere etait : " << mystery_word << std::endl;
  93. }
  94. void duo_game(std::string const& mystery_word, std::string const& displayed_word, int const max_essais) {
  95.     std::cout << "A implementer..." << std::endl;
  96.     // avoir un input sans echo a l'ecran n'est pas portable
  97. }
  98. int main() {
  99.     // Initialisations
  100.     std::cout << "Veuillez patienter, nous initialisons le jeu ..." << std::endl;
  101.     // On remplit le dico
  102.     std::vector<std::string> dict;
  103.     if (!read_dict(dict, "dico.txt" )) {
  104.         return -1;
  105.     }
  106.     if (!dict.size()) {
  107.         std::cerr << "Erreur: dictionnaire vide!" << std::endl;
  108.         return -1;
  109.     }
  110.     // On initialise les generateurs aléatoires
  111.     unsigned seed = std::chrono::system_clock::now().time_since_epoch().count();
  112.     std::mt19937 urng(seed);
  113.     std::uniform_int_distribution<int> distribution(0, dict.size() - 1);
  114.     // Jeu
  115.     std::cout << "****\n BIENVENUE au jeu du Mot Mystere ****\n" << std::endl;
  116.     do {
  117.         // calcul des données pour une partie
  118.         int max_essais = 5;
  119.         std::string mystery_word = dict.at(distribution(urng));
  120.         // utile pour débugger
  121.         // std::cout << "(DEBUG) Mot à trouver: " << mystery_word << std::endl;
  122.         std::string displayed_word(mystery_word);
  123.         std::shuffle(displayed_word.begin(), displayed_word.end(), urng);
  124.         // et on joue une partie
  125.         if (user_play_duo()) {
  126.             duo_game(mystery_word, displayed_word, max_essais);
  127.         }
  128.         else {
  129.             solo_game(mystery_word, displayed_word, max_essais);
  130.         }
  131.     } while (user_play_again());
  132.     std::cout << "\n**** A Bientot! ****" << std::endl;
  133.     return 0;
  134. }


 
Si tu veux implémenter duo_game il te faudra aller voir du côté de http://stackoverflow.com/questions [...] rom-stdcin
 
A+,


Message édité par gilou le 26-05-2016 à 14:03:29

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2282369
Lt Ripley
Ils ont tout niqué
Posté le 26-05-2016 à 13:16:30  profilanswer
 

J'ai rangé bien propre tous mes fichiers et dossiers, j'en pouvais plus, mais maintenant que je sais un peu comment fonctionner avec c::b à ce niveau ça va mieux.
 
Oui j'ai bien l'intention de garder tous mes codes (c'est même double backupé au même titre que le reste de mes données qui m'importent).
 
Bonne idée de taper le mot comme un mot de passe.  (ce que j'ai fais moi c'est écrire plein de lignes vides pour faire monter le mot tapé hors de la fenêtre)
 
Ce que j'ai bien envie de faire aussi c'est mettre tous les mots dans un tableau dynamique en classant par nombre de lettres pour pouvoir aller chercher un mot instantanément
 
Merci pour ton code gilou, là je suis dessus et c'est pas la première fois que je vois passer ça par exemple "if (!answer.compare(mystery_word))" : Que signifie le ! devant answer... ? C'est comme  !=   ?
 
Bon, ya plein d'autres trucs que je ne comprends pas encore... Mais j'aime bien parceque ça semble bien propre, ya des bool et tu as séparé en fonctions, pas comme moi qui ai recopié pas mal de code comme par exemple pour demander une nouvelle partie

n°2282371
rat de com​bat
attention rongeur méchant!
Posté le 26-05-2016 à 13:38:35  profilanswer
 

(rien)


Message édité par rat de combat le 26-05-2016 à 13:39:41
n°2282374
gilou
Modérateur
Modzilla
Posté le 26-05-2016 à 13:55:21  profilanswer
 

Oui, c'était surtout pour que tu voies une écriture  
main  
 - initialisations
 - boucle sur les parties
et les parties dans des fonctions ad-hoc, pas dans le corps de la fonction.
Donc un main réduit à l'essentiel.
 
"if (!answer.compare(mystery_word))"
le ! signifie ici la négation.
 
if (toto) équivaut à if (toto != 0)  
donc if (!toto) équivaut à if (toto == 0)  
 
donc "if (!answer.compare(mystery_word))" équivaut à "if (answer.compare(mystery_word) == 0)" c'est à dire que answer et mystery_word sont identiques.
 
 
 
Il y a des trucs qui semblent compliqués, mais qu'il faut apprendre:
unsigned seed = std::chrono::system_clock::now().time_since_epoch().count();
c'est l'équivalent C++ de srand(time(0)) en C  
 
std::mt19937 urng(seed);
urng est un générateur de nombres (pseudo)-aléatoires
Donc c'est équivalent à rand
 
std::uniform_int_distribution<int> distribution(0, dict.size() - 1);
distribution(urng) va générer aléatoirement des entiers entre 0 et dict.size() - 1 et ceci de manière uniforme (ie chaque entier a même proba d'apparaitre).
 
std::shuffle(displayed_word.begin(), displayed_word.end(), urng);
c'est tout bête: on échange les lettres du mot de manière aléatoire déterminée par urng modulo la taille du mot.
 
A+,
 
 
 


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2283051
Lt Ripley
Ils ont tout niqué
Posté le 05-06-2016 à 18:54:45  profilanswer
 

Merci pour ces nouvelles infos, mais là les nombres aléatoires je ne capte pas bien, je suis resté avec rand pour le moment même si je bosse dessus ayant conscience de la nécessité d'y passer.
 
Pour le ! qui signifie la négation je pense avoir bien compris (ça me demande un peu de gymnastique d'esprit).
 
Après une semaine de pause j'ai réattaqué, j'ai réussi a dispatcher les mots dans des vectors, en fonction de leur nombre de lettres.  Le jeu fonctionne, avec un niveau (= nombre de lettres), plus de latence.
 
Mais : j'ai 30 lignes de code pour déclarer les vectors, 30x3 lignes pour dispatcher les mots(avec un switch), et encore 30x3 lignes (encore un switch) pour définir le mot mystere en fonction du niveau choisi.
 
(je déclare 30 vectors (lettres1, lettres2... lettres30) donc pour des mots de 30 lettres maxi, je ne pense pas qu'il existe plus grand)
 
Je peux optimiser cela ?  Comment je dois faire ?  Parceque si je crée (de toutes pièces, genre "lettres" + to_string(niveau) ) un string contenant le nom du vector (par exemple lettres5) et bien la fonction "mélange" me mélange "lettres5" et en sort une seule lettre bien sur  [:dents] et pas un mot du vector qui s'appelle lettres5...
 
Thanks for your help  ;)

n°2283061
gilou
Modérateur
Modzilla
Posté le 05-06-2016 à 21:06:29  profilanswer
 

Et si tu faisais un tableau de 30 vecteurs, tableau[i-1] contenant le vecteur des mots de taille i?
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
mood
Publicité
Posté le 05-06-2016 à 21:06:29  profilanswer
 

n°2290791
Lt Ripley
Ils ont tout niqué
Posté le 27-10-2016 à 18:18:36  profilanswer
 

Me revoilou !   :)  
 
Je suis arrivé à simplifier grandement (200 lignes de code en moins) en faisant un vector de vector, je ne suis pas arrivé à faire un tableau de vector comme tu me conseilles gilou.
 

Code :
  1. vector<vector<string> > tableau;  // Ça marche
  2. vector tableau[30]  // ne fonctionne pas, vector étant autre chose qu'un type j'imagine bien
  3. string tableau [30][vector<string>(1)];  // ne fonctionne pas non plus
  4. for (int i(1); i<30; i++)  //Ensuite j'ajoute 30 lignes, pour 30 lettres au max
  5.     {
  6.        tableau.push_back(vector<string>(1));
  7.     }
  8. tableau[nbLett].push_back(ligne);  // je remplis les lignes de mon vector
  9. motExtrait = tableau[niveau][positionAleatoire];  // plus qu'à aller chercher le mot


Je suis vrai content
 
Merci les gars  ;)

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Suivante

Aller à :
Ajouter une réponse
 

Sujets relatifs
découpage d'un char (C++)[C#] Capture d'écran en jeu
Petits programmes C++Point de syntaxe C++ pour un noob siouplait
raw socket - CPYTHON MYSQL C'est pourtant simple mais...
C Racine communeC : Envoi et retour d'un tableau dans des fonctions.
Plus de sujets relatifs à : Petits calculs pour les crédits, ne fonctionne pas [noob]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR