gilou Modérateur Modzilla | Tiens, une version que je t'ai pondu en C++11, pour te montrer comment j'aurais organisé les choses:
Code :
- #include <algorithm>
- #include <iostream>
- #include <iterator>
- #include <fstream>
- #include <vector>
- #include <random>
- #include <chrono>
- // fonction utilitaire pour virer les blancs autour d'une réponse
- std::string trim(const std::string& str, const std::string& whitespace = " \t" ) {
- const auto strBegin = str.find_first_not_of(whitespace);
- if (strBegin == std::string::npos) {
- return ""; // no content
- }
- const auto strEnd = str.find_last_not_of(whitespace);
- const auto strRange = strEnd - strBegin + 1;
- return str.substr(strBegin, strRange);
- }
- bool read_dict(std::vector<std::string>& dict, std::string const& fname) {
- std::ifstream dictfile(fname);
- if (dictfile.is_open()) {
- // on récupère le nombre de mots et on ajuste la taille du vecteur
- dict.reserve(std::distance(std::istream_iterator<std::string>(dictfile),
- std::istream_iterator<std::string>()));
- // on nettoie les flags de fin de fichier et on rembobine
- dictfile.clear();
- dictfile.seekg(0);
- // on remplit le vecteur
- dict.assign(std::istream_iterator<std::string>(dictfile),
- std::istream_iterator<std::string>());
- return true;
- }
- else {
- std::cerr << "Erreur à l'ouverture de " << fname << " !" << std::endl;
- }
- return false;
- }
- bool user_play_duo() {
- while (true) {
- std::string answer;
- std::cout << "Voulez-vous jouer en Solo ou en Duo ? (S/D)" << std::endl;
- std::getline(std::cin, answer);
- answer = trim(answer);
- transform(answer.begin(), answer.end(), answer.begin(), ::toupper);
- if ((!answer.compare("D" )) || (!answer.compare("DUO" ))) {
- return true;
- }
- else if ((!answer.compare("S" )) || (!answer.compare("SOLO" ))) {
- return false;
- }
- else {
- std::cout << "'" << answer << "' n'est pas une valeur correct : (S/D)" << std::endl;
- }
- }
- }
- bool user_play_again() {
- while (true) {
- std::string answer;
- std::cout << "voulez-vous faire une autre partie ? (O/N)" << std::endl;
- std::getline(std::cin, answer);
- answer = trim(answer);
- transform(answer.begin(), answer.end(), answer.begin(), ::toupper);
- if ((!answer.compare("O" )) || (!answer.compare("OUI" ))) {
- return true;
- }
- else if ((!answer.compare("N" )) || (!answer.compare("NON" ))) {
- return false;
- }
- else {
- std::cout << "'" << answer << "' n'est pas une valeur correct : (O/N)" << std::endl;
- }
- }
- }
- void solo_game(std::string const& mystery_word, std::string const& displayed_word, int const max_essais) {
- int essai(0);
- std::string answer;
- do {
- std::cout << "Quel est ce mot ? " << displayed_word << std::endl;
- std::cout << "Il vous reste " << max_essais - essai << " coup(s)." << std::endl;
- std::getline(std::cin, answer);
- ++essai;
- answer = trim(answer);
- transform(answer.begin(), answer.end(), answer.begin(), ::toupper);
- if (!answer.compare(mystery_word)) {
- std::cout << "\nBRAVO !" << std::endl;
- std::cout << "Vous avez trouve en " << essai << " essai(s)" << std::endl;
- return;
- }
- else {
- std::cout << "Ce n'est pas le bon mot !\n" << std::endl;
- }
- } while (max_essais - essai);
- std::cout << "PERDU ! le mot mystere etait : " << mystery_word << std::endl;
- }
- void duo_game(std::string const& mystery_word, std::string const& displayed_word, int const max_essais) {
- std::cout << "A implementer..." << std::endl;
- // avoir un input sans echo a l'ecran n'est pas portable
- }
- int main() {
- // Initialisations
- std::cout << "Veuillez patienter, nous initialisons le jeu ..." << std::endl;
- // On remplit le dico
- std::vector<std::string> dict;
- if (!read_dict(dict, "dico.txt" )) {
- return -1;
- }
- if (!dict.size()) {
- std::cerr << "Erreur: dictionnaire vide!" << std::endl;
- return -1;
- }
- // On initialise les generateurs aléatoires
- unsigned seed = std::chrono::system_clock::now().time_since_epoch().count();
- std::mt19937 urng(seed);
- std::uniform_int_distribution<int> distribution(0, dict.size() - 1);
- // Jeu
- std::cout << "****\n BIENVENUE au jeu du Mot Mystere ****\n" << std::endl;
- do {
- // calcul des données pour une partie
- int max_essais = 5;
- std::string mystery_word = dict.at(distribution(urng));
- // utile pour débugger
- // std::cout << "(DEBUG) Mot à trouver: " << mystery_word << std::endl;
- std::string displayed_word(mystery_word);
- std::shuffle(displayed_word.begin(), displayed_word.end(), urng);
- // et on joue une partie
- if (user_play_duo()) {
- duo_game(mystery_word, displayed_word, max_essais);
- }
- else {
- solo_game(mystery_word, displayed_word, max_essais);
- }
- } while (user_play_again());
- std::cout << "\n**** A Bientot! ****" << std::endl;
- return 0;
- }
|
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é! --
|