Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <ctime>
- #include <cstdlib>
- #include <fstream>
- using namespace std;
- void penduMenu(); //Menu pendu
- int playPendu(); //Jeu du pendu
- int playPendu2(); //jeu du pendu a 2
- void penduRule(); //Regle du jeu du pendu
- void dichotomieMenu();//Menu de la recherche dichotomique
- void playDichotomie();//Jeu de la recherche dichotomique
- void dichotomieRule();//Regle du jeu de la recherche dichotomique
- int lettersCounting(char[255]);
- void asciiArtPendu(int);
- void asciiArtMenu(int);//Interface ascii du menu de chaque jeu
- void about(); //Nos sources
- int main()
- {
- system("cls");
- srand(time(NULL));
- int game_choice;
- asciiArtMenu(5);
- cout <<" Votre choix : ";
- cin >>game_choice;
- while (game_choice>3 or game_choice<1)
- {
- system("cls");
- asciiArtMenu(5);
- cout<<endl<<" Erreur dans le choix du jeu!"<<endl<<" Veuillez recommencer : ";
- cin >>game_choice;
- }
- if (game_choice==1) penduMenu();
- if (game_choice==2) dichotomieMenu();
- if (game_choice==3) about();
- }
- void penduMenu()
- {
- int penduMenuChoice;
- asciiArtMenu(2);
- asciiArtMenu(3);
- cout <<" Votre choix : ";
- cin >>penduMenuChoice;
- while (penduMenuChoice >4)
- {
- asciiArtMenu(2);
- asciiArtMenu(3);
- cout << endl << " Erreur dans le choix, veuillez recommencer: ";
- cin >> penduMenuChoice;
- system("cls");
- }
- if (penduMenuChoice==1) penduRule();
- if (penduMenuChoice==2) playPendu();
- if (penduMenuChoice==3) playPendu2();
- if (penduMenuChoice==4) main();
- }
- void penduRule()
- {
- system("cls");
- int penduMenuChoice;
- asciiArtMenu(2);
- cout <<"* Les regles : *"<<endl;
- cout << "1) Le but du jeu est de trouver le mot choisi par l'ordinateur en proposant des lettres." << endl << "2) Si la lettre proposee se trouve dans le mot, celle-ci s'affiche."<< endl;
- cout << "3) Si la lettre proposee ne se trouve pas dans le mot, une partie du pendu apparaitra." << endl << "4) Si vous avez trouve le mot avant que le pendu soit entierement reconstitue: vous avez gagne." << endl;
- cout << "5) Si le pendu est entièrement reconstitue alors que le mot n'est pas decouvert: vous avez perdu" << endl << "6) ATTENTION!!! Toutes les lettres proposees devront etre ecrites en majuscule!" << endl << endl;
- asciiArtMenu(4);
- cout <<" Votre choix : ";
- cin >>penduMenuChoice;
- while (penduMenuChoice<1 or penduMenuChoice>2)
- {
- system("cls");
- asciiArtMenu(2);
- cout <<"* Les regles : *"<<endl;
- cout << "1) Le but du jeu est de trouver le mot choisi par l'ordinateur en proposant des lettres." << endl << "2) Si la lettre proposee se trouve dans le mot, celle-ci s'affiche."<< endl;
- cout << "3) Si la lettre proposee ne se trouve pas dans le mot, une partie du pendu apparaitra." << endl << "4) Si vous avez trouve le mot avant que le pendu soit entierement reconstitue: vous avez gagne." << endl;
- cout << "5) Si le pendu est entièrement reconstitue alors que le mot n'est pas decouvert: vous avez perdu" << endl << "6) ATTENTION!!! Toutes les lettres proposees devront etre ecrites en majuscule!" << endl << endl;
- asciiArtMenu(4);
- cout << endl << " Erreur dans le choix, veuillez recommencer: ";
- cin >>penduMenuChoice;
- }
- if (penduMenuChoice==1) playPendu();
- if (penduMenuChoice==2) main();
- }
- int playPendu()
- {
- system("cls");
- asciiArtMenu(2);
- char Letter;
- char chaine[255];
- int random,lettersNumber,numberTrue(0), numberError(0);
- ifstream entree("dico.txt"); //ouvre le fichier test.txt en lecture ce fichier se trouve dans le meme dossier que le programme
- random = ((rand()*rand())%361076); // un nombre entre 0 et 361076. 361076 est le nombre de mot dans le .txt
- entree >> chaine;
- for(int i(0); i!=random ; i++) //tant que le fichier n'est pas terminé ou que nombre est différent de random
- {
- entree >> chaine; //copie une portion dans le vecteur chaine (chaque portion est séparé par un espace ,une tabulation ou un retour à la ligne)
- }
- entree.close(); //ferme le fichier
- cout <<chaine<<endl<<endl;
- lettersNumber = lettersCounting(chaine);
- char mot [lettersNumber];
- cout << "Le mot que vous devez trouver contient " << lettersNumber << " lettres." << endl;
- for ( int i(0); i< lettersNumber; i++) // créé mot qui devra etre egal a chaine
- {
- mot[i]= '_';
- cout << mot[i] << " ";
- }
- for ( int i(0); i< lettersNumber; i++)
- {
- while ( mot[i] != chaine[i])
- {
- cout << endl << endl << "Proposez une lettre: ";
- cin >> Letter;
- for (int i(0); i<lettersNumber; i++)
- {
- chaine[i];
- if(Letter == chaine [i])
- {
- numberTrue++; // ajoute 1 si la lettre proposee est dans le chaine
- mot[i] = Letter; // remplace le _ par la lettre dans le mot
- }
- }
- system("cls");
- asciiArtMenu(2);
- if (numberTrue == 0)
- {
- cout << endl << "Desole, cette lettre ne figure pas dans le mot" << endl << endl;
- numberError++; //compte le nombre d'erreur
- }
- else
- {
- cout << endl << "Bravo, votre lettre est dans le mot!" << endl << endl;
- }
- asciiArtPendu(numberError);
- cout << endl;
- if (numberError==9)
- {
- cout <<"Le mot etait " << chaine << endl;
- return 0;
- }
- for(int i(0);i<lettersNumber;i++)
- {
- cout << mot[i] << " ";
- }
- cout << endl;
- numberTrue = 0; // remet le compteur du nombre de lettres bonnes à 0
- }
- }
- cout << endl << "Felicitation! Vous avez reussi a trouver le mot avant que le pendu soit totalement reconstitue. Vous avez gagne!" << endl;
- }
- int playPendu2()
- {
- system("cls");
- asciiArtMenu(2);
- char Letter;
- char chaine[255];
- int random,lettersNumber,numberTrue(0), numberError(0), player1, player2, player3;
- ifstream entree("dico.txt"); //ouvre le fichier test.txt en lecture ce fichier se trouve dans le meme dossier que le programme
- player1 = 1;
- player2 = 2;
- random = ((rand()*rand())%361076); // un nombre entre 0 et 361076. 361076 est le nombre de mot dans le .txt
- entree >> chaine;
- for(int i(0); i!=random ; i++) //tant que le fichier n'est pas terminé ou que nombre est différent de random
- {
- entree >> chaine; //copie une portion dans le vecteur chaine (chaque portion est séparé par un espace ,une tabulation ou un retour à la ligne)
- }
- entree.close(); //ferme le fichier
- cout <<chaine<<endl<<endl;
- lettersNumber = lettersCounting(chaine);
- char mot [lettersNumber];
- cout << "Le mot que vous devez trouver contient " << lettersNumber << " lettres." << endl;
- for ( int i(0); i< lettersNumber; i++) // créé mot qui devra etre egal a chaine
- {
- mot[i]= '_';
- cout << mot[i] << " ";
- }
- for ( int i(0); i< lettersNumber; i++)
- {
- while ( mot[i] != chaine[i])
- {
- cout << endl << endl << "joueur "<< player1<<", Proposez une lettre: ";
- cin >> Letter;
- for (int i(0); i<lettersNumber; i++)
- {
- chaine[i];
- if(Letter == chaine [i])
- {
- numberTrue++; // ajoute 1 si la lettre proposee est dans le chaine
- mot[i] = Letter; // remplace le _ par la lettre dans le mot
- }
- }
- system("cls");
- asciiArtMenu(2);
- if (numberTrue == 0)
- {
- cout << endl << "Desole, cette lettre ne figure pas dans le mot" << endl << endl;
- numberError++; //compte le nombre d'erreur
- player3 = player1;
- player1 = player2;
- player2 = player3;//donne la valeur 2 a player1 et la valeur 1 a player2 pour changer le joueur.
- }
- else
- {
- cout << endl << "Bravo, votre lettre est dans le mot!" << endl << endl;
- }
- asciiArtPendu(numberError);
- cout << endl;
- if (numberError==9)
- {
- cout <<"Le mot etait " << chaine << endl;
- return 0;
- }
- for(int i(0);i<lettersNumber;i++)
- {
- cout << mot[i] << " ";
- }
- cout << endl;
- numberTrue = 0; // remet le compteur du nombre de lettres bonnes à 0
- }
- }
- cout << endl << "Felicitation! Vous avez reussi a trouver le mot avant que le pendu soit totalement reconstitue. Joueur " << player1 << " ,vous avez gagne!" << endl;
- }
- void dichotomieMenu()
- {
- int dichotomieMenuChoice;
- asciiArtMenu(1);
- asciiArtMenu(3);
- cout <<" Votre choix : ";
- cin >>dichotomieMenuChoice;
- if (dichotomieMenuChoice==1) dichotomieRule();
- if (dichotomieMenuChoice==2) playDichotomie();
- if (dichotomieMenuChoice==4) main();
- }
- void dichotomieRule()
- {
- int dichotomieRuleChoice;
- system("cls");
- asciiArtMenu(1);
- cout <<" * Les regles : *"<<endl;
- cout <<" * Le principe du jeu est simple ,un mot est genere aleatoirement. *"<<endl;
- cout <<" * Votre but est de le retrouver, mais comment faire ? *"<<endl;
- cout <<" * Ecrivez un mot , l'ordinateur vous dira si votre mot *"<<endl;
- cout <<" * est plus bas ou plus haut selon l'ordre alphabetique *"<<endl;
- cout <<" * Par la methode de dichotomie , vous trouverez le bon mot *"<<endl;
- cout <<" * Bon jeu! *"<<endl;
- asciiArtMenu(4);
- cout <<" Votre choix : ";
- cin >>dichotomieRuleChoice;
- if (dichotomieRuleChoice==1) playDichotomie();
- if (dichotomieRuleChoice==2) main();
- }
- void playDichotomie()
- {
- asciiArtMenu(1);
- char chaine[255] ,playerWord[255];
- int random,lettersNumber,goodLetter,tryNumber(1);
- bool win(false);
- ifstream entree("dico.txt"); //ouvre le fichier test.txt en lecture ce fichier se trouve dans le meme dossier que le programme
- random=((rand()*rand())%361076); // un chiffre entre 0 1 2 3 4
- entree >> chaine;
- for(int i(0); i!=random ; i++) //tant que le fichier n'est pas terminé ou que nombre est différent de random
- {
- entree >> chaine; //copie une portion dans le vecteur chaine (chaque portion est séparé par un espace ,une tabulation ou un retour à la ligne)
- }
- entree.close(); //ferme le fichier
- lettersNumber=lettersCounting(chaine);
- cout <<" Le mot aleatoire a correctement ete genere!"<<endl;
- cout <<chaine;
- while(win!=true)
- {
- int i(0);
- cout <<endl<<"Proposez un mot : ";
- cin >>playerWord;
- for(i;i!=lettersNumber; i++)
- {
- if(playerWord[i]==chaine[i]) goodLetter=i+1;
- if(playerWord[i]>chaine[i])
- {
- cout <<"Le mot mystere se trouve en dessous de votre mot !"<<endl;
- tryNumber++;
- break;
- }
- if(playerWord[i]<chaine[i])
- {
- cout <<"Le mot mystere se trouve au dessus de votre mot !"<<endl;
- tryNumber++;
- break;
- }
- if(goodLetter==lettersNumber)
- {
- win=true;
- cout <<"Bravo , tu as reussi a trouver le mot ! et cela en "<<tryNumber<<" essais";
- }
- }
- }
- }
- int lettersCounting(char chaine[])
- {
- int lettersNumber(-1);
- for (int i(0);i<255;i++)
- {
- lettersNumber++;
- if (chaine[i]!='A'&&chaine[i]!='B'&&chaine[i]!='C'&&chaine[i]!='D'&&chaine[i]!='E'&&chaine[i]!='F'&&chaine[i]!='G'&&chaine[i]!='H'&&chaine[i]!='I'&&chaine[i]!='J'&&chaine[i]!='K'&&chaine[i]!='L'&&chaine[i]!='M'&&chaine[i]!='N'&&chaine[i]!='O'&&chaine[i]!='P'&&chaine[i]!='Q'&&chaine[i]!='R'&&chaine[i]!='S'&&chaine[i]!='T'&&chaine[i]!='U'&&chaine[i]!='V'&&chaine[i]!='W'&&chaine[i]!='X'&&chaine[i]!='Y'&&chaine[i]!='Z')
- {
- i=255;
- }
- }
- return lettersNumber;
- }
- void asciiArtPendu(int numberError)
- {
- if (numberError == 0)
- {
- }
- if (numberError == 1)
- {
- cout<<" "<<endl;
- cout<<" || / "<<endl;
- cout<<" || / "<<endl;
- cout<<" ||/ "<<endl;
- cout<<" || "<<endl;
- cout<<" || "<<endl;
- cout<<" || "<<endl;
- cout<<" /|| "<<endl;
- cout<<" //|| "<<endl;
- cout<<"============ "<<endl;
- }
- if (numberError == 2)
- {
- cout<<" ,==========Y=== "<<endl;
- cout<<" || / "<<endl;
- cout<<" || / "<<endl;
- cout<<" ||/ "<<endl;
- cout<<" || "<<endl;
- cout<<" || "<<endl;
- cout<<" || "<<endl;
- cout<<" /|| "<<endl;
- cout<<" //|| "<<endl;
- cout<<"============ "<<endl;
- }
- if (numberError == 3)
- {
- cout<<" ,==========Y=== "<<endl;
- cout<<" || / | "<<endl;
- cout<<" || / | "<<endl;
- cout<<" ||/ "<<endl;
- cout<<" || "<<endl;
- cout<<" || "<<endl;
- cout<<" || "<<endl;
- cout<<" /|| "<<endl;
- cout<<" //|| "<<endl;
- cout<<"============ "<<endl;
- }
- if (numberError == 4)
- {
- cout<<" ,==========Y=== "<<endl;
- cout<<" || / | "<<endl;
- cout<<" || / | "<<endl;
- cout<<" ||/ O "<<endl;
- cout<<" || "<<endl;
- cout<<" || "<<endl;
- cout<<" || "<<endl;
- cout<<" /|| "<<endl;
- cout<<" //|| "<<endl;
- cout<<"============ "<<endl;
- }
- if (numberError == 5)
- {
- cout<<" ,==========Y=== "<<endl;
- cout<<" || / | "<<endl;
- cout<<" || / | "<<endl;
- cout<<" ||/ O "<<endl;
- cout<<" || | "<<endl;
- cout<<" || "<<endl;
- cout<<" || "<<endl;
- cout<<" /|| "<<endl;
- cout<<" //|| "<<endl;
- cout<<"============ "<<endl;
- }
- if (numberError == 6)
- {
- cout<<" ,==========Y=== "<<endl;
- cout<<" || / | "<<endl;
- cout<<" || / | "<<endl;
- cout<<" ||/ O "<<endl;
- cout<<" || /| "<<endl;
- cout<<" || "<<endl;
- cout<<" || "<<endl;
- cout<<" /|| "<<endl;
- cout<<" //|| "<<endl;
- cout<<"============ "<<endl;
- }
- if (numberError == 7)
- {
- cout<<" ,==========Y=== "<<endl;
- cout<<" || / | "<<endl;
- cout<<" || / | "<<endl;
- cout<<" ||/ O "<<endl;
- cout<<" || /|\\ "<<endl;
- cout<<" || "<<endl;
- cout<<" || "<<endl;
- cout<<" /|| "<<endl;
- cout<<" //|| "<<endl;
- cout<<"============ "<<endl;
- }
- if (numberError == 8)
- {
- cout<<" ,==========Y=== "<<endl;
- cout<<" || / | "<<endl;
- cout<<" || / | "<<endl;
- cout<<" ||/ O "<<endl;
- cout<<" || /|\\ Attention! Vous n'avez plus le droit a l'erreur."<<endl;
- cout<<" || / "<<endl;
- cout<<" || "<<endl;
- cout<<" /|| "<<endl;
- cout<<" //|| "<<endl;
- cout<<"============ "<<endl;
- }
- if (numberError == 9)
- {
- cout<<" ,==========Y=== "<<endl;
- cout<<" || / | "<<endl;
- cout<<" || / | "<<endl;
- cout<<" ||/ O "<<endl;
- cout<<" || /|\\ Le jeu est fini, vous avez perdu"<<endl;
- cout<<" || / \\ "<<endl;
- cout<<" || "<<endl;
- cout<<" /|| "<<endl;
- cout<<" //|| "<<endl;
- cout<<"============ "<<endl;
- }
- }
- void asciiArtMenu(int game)
- {
- if (game<=2)
- {
- system("cls");
- cout <<"*******************************************************************************"<<endl;
- cout <<"* *"<<endl;
- cout <<"* ";
- if (game==1)cout <<"Jeu de la recherche dichotomique";
- if (game==2)cout <<" Jeu du pendu ";
- cout <<" *"<<endl;
- cout <<"* *"<<endl;
- cout <<"*-----------------------------------------------------------------------------*"<<endl;
- }
- if (game==3)
- {
- cout <<" * Consulter les regles : tappez 1 *"<<endl;
- cout <<" * Commencer a jouer en mode solo : tappez 2 *"<<endl;
- cout <<" * Commencer a jouer en mode 2 joueur : tappez 3 *"<<endl;
- cout <<" * Retour au menu : tappez 4 *"<<endl;
- cout <<" ***********************************************************************"<<endl<<endl;
- }
- if(game==4)
- {
- cout <<" *---------------------------------------------------------------------*"<<endl;
- cout <<" * Commencer a jouer : tappez 1 *"<<endl;
- cout <<" * Retour au menu : tappez 2 *"<<endl;
- cout <<" ***********************************************************************"<<endl;
- }
- if(game==5)
- {
- cout <<" .-------------------------------------------------------------------------."<<endl;
- cout <<" / .-. .-. "<< "\\" <<""<<endl;
- cout <<"| / "<< "\\" <<" Bienvenue cher joueur, fais un choix! / "<< "\\" <<" |"<<endl;
- cout <<"| |"<< "\\" <<"_. | | _/| |"<<endl;
- cout <<"|"<< "\\" <<"| | /| Le jeu du pendu : tappe 1 |"<< "\\" <<" | |/|"<<endl;
- cout <<"| `---' | La recherche dichotomique : tappe 2 | `---' |"<<endl;
- cout <<"| | Tableau des scores : tappez (4?) | |"<<endl;
- cout <<"| | A propos... : tappez 3 | |"<<endl;
- cout <<""<< "\\" <<" | | /"<<endl;
- cout <<" "<< "\\" <<" /---------------------------------------------------------------"<< "\\" <<" /"<<endl;
- cout <<" `---' `---'"<<endl;
- }
- if(game==6)
- {
- cout<<" ____________________________________________________"<<endl; //Nous privilégions la lisibilité
- cout<<" / "<<"\\"<<endl; //du code , c'est pour cela
- cout<<" | _____________________________________________ |"<<endl; //que l'art ascii y est repris
- cout<<" | | | |"<<endl; //ligne par ligne et non dans une seule
- cout<<" | | Programme developpe par : | |"<<endl; //instruction cout
- cout<<" | | Kevin Rolland & Laurent Tobaly | |"<<endl;
- cout<<" | | | |"<<endl;
- cout<<" | | | |"<<endl;
- cout<<" | | L'art ascii provient du site chris.com | |"<<endl;
- cout<<" | | ainsi que de ascii-fr.com | |"<<endl;
- cout<<" | | | |"<<endl;
- cout<<" | | Les regles : Wikipedia.org | |"<<endl;
- cout<<" | | | |"<<endl;
- cout<<" | | Pour retourner au menu tappez : 0 | |"<<endl;
- cout<<" | | | |"<<endl;
- cout<<" | |_____________________________________________| |"<<endl;
- cout<<" | |"<<endl;
- cout<<" "<< "\\"<<"_____________________________________________________/"<<endl;
- cout<<" ___________________________________________________________"<<endl;
- cout<<" _-'.-.-.-. .---.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-`__`. .-.-.-.`-_"<<endl;
- cout<<" _-'.-.-.-.-. .-----.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-----. .-.-.-.-.`-_"<<endl;
- cout<<" _-'.-.-.-.-.-. .---.-. .-----------------------------. .-.---. .---.-.-.-.`-_"<<endl;
- cout<<":-----------------------------------------------------------------------------:"<<endl;
- cout<<"`---._.-----------------------------------------------------------------._.---'"<<endl;
- }
- }
- void about()
- {
- system("cls");
- int comeBack;
- asciiArtMenu(6);
- cout <<" Votre choix : ";
- cin>>comeBack;
- while (comeBack !=0)
- {
- system("cls");
- asciiArtMenu(6);
- cout << endl << " Erreur dans le choix, veuillez recommencer: ";
- cin>>comeBack;
- }
- main();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement