Avis code source plus ou moins c++
Bonjour,
Je viens de finir(enfin) de codé ce mini jeu très connu: le plus ou moins.
J'ai pris quelques heures pour réaliser tout ça, sachant que j'ai commencé le C++ il y a 3 jours.
Les fonctionnalités:
Mode 1 ou 2 joueurs. Dans le mode 1 joueur, le nombre est généré aléatoirement, dans le mode 2 joueurs, le deuxième joueur rentre le nombre mystère.
3 niveaux de difficultés
Prénoms des joueurs
Compteur de coups nécessaire à la victoire
N'hésitez pas à me suggérer d'autres améliorations, m'aider à rendre mon code plus lisible etc... Merci!
Le code:
Je viens de finir(enfin) de codé ce mini jeu très connu: le plus ou moins.
J'ai pris quelques heures pour réaliser tout ça, sachant que j'ai commencé le C++ il y a 3 jours.
Les fonctionnalités:
Mode 1 ou 2 joueurs. Dans le mode 1 joueur, le nombre est généré aléatoirement, dans le mode 2 joueurs, le deuxième joueur rentre le nombre mystère.
3 niveaux de difficultés
Prénoms des joueurs
Compteur de coups nécessaire à la victoire
N'hésitez pas à me suggérer d'autres améliorations, m'aider à rendre mon code plus lisible etc... Merci!
Le code:
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
cout << "----------------------------------------"<< endl;
cout << "-" << "---------------------------------" << endl;
cout << "-" << "Bienvenue dans mon premier jeu! -" << endl;
cout << "----------------------------------------" << endl;
string prenom, prenom2;
double nombreMystere(0), nombreEssaye(0);
int max(0),min(1), difficulte(0), joueur(0), coups(0);
cout << "Le but du jeu est de trouver le nombre qui a été généré aléatoirement" << endl;
cout << "ou rentré par un second joueur. A chaque coup, l'ordinateur" << endl;
cout << "vous indique si le nombre mystère est plus grand ou plus petit" << endl;
cout << "Veuillez choisir le niveau de difficulté:" << endl;
cout << "Facile(entre 1 et 100), tapez 1" << endl;
cout << "Moyen(entre 1 et 1000, tapez 2" << endl;
cout << "Difficile (entre 1 et 2000), tapez 3" << endl;
cin >> difficulte;
if (difficulte==1)
{
max=100;
}
else if (difficulte==2)
{
max=1000;
}
else if (difficulte==3)
{
max=2000;
}
cout << "Choisissez un mode de jeu:" << endl;
cout << "1. 1 joueur" << endl;
cout <<"2. 2 joueurs" << endl;
cin >> joueur;
if (joueur==1)
{
srand(time(NULL));
nombreMystere=rand()%(max-min)+min;
cout << "Indiquez votre prénom" << endl;
cin>> prenom;
cout << prenom << " Essayez de trouver le nombre mystère!" << endl;
}
else if(joueur==2)
{
cout << "Veuillez rentrer le prénom du premier joueur" << endl;
cin >> prenom;
cout << "Veuillez rentrer le nom du second joueur" << endl;
cin >> prenom2;
cout << prenom << " rentrez un nombre" << endl;
cin >> nombreMystere;
cout << prenom2 << " Essayez de trouver le nombre de " << prenom << endl;
}
else
{
do
{
cout << "Rentrez 1 ou 2" << endl;
cin >> joueur;
}while (joueur>2);
}
do
{
cin >> nombreEssaye;
if (nombreEssaye < nombreMystere)
{
cout << "Le nombre mystere est plus grand!" << endl;
++coups;
}
else if (nombreEssaye > nombreMystere)
{
cout << "Le nombre mystere est plus petit!" << endl;
++coups;
}
else if (nombreEssaye==nombreMystere && joueur==1)
{
++coups;
cout << "Bravo " << prenom << "!" << "Vous avez gagnez en" << endl;
cout << coups << "coups!" << endl;
}
else if (nombreEssaye==nombreMystere && joueur==2)
{
++coups;
cout << "Bravo " << prenom2 << "!" << endl;
cout << "Vous avez gagnez en " << coups << " coups!" << endl;
cout << "Au tour de " << prenom << endl;
cout << "de trouver le nombre mystere!" << endl;
}
} while (nombreEssaye!=nombreMystere);
return 0;
}
A voir également:
- Avis code source plus ou moins c++
- Code ascii - Guide
- Code puk bloqué - Guide
- Comment déverrouiller un téléphone quand on a oublié le code - Guide
- Code activation windows 10 - Guide
- Scanner qr code pc - Guide
5 réponses
Voici comment tu pourrais l'écrire.
En résumé voici ce qu'il faut retenir :
- quelques fonctions pour mieux structurer le code
- utiliser des switchs quand c'est possible
- factoriser le code quand c'est possible
- chaîner les <<
- les valeurs numériques s'initialisent généralement en utilisant la syntaxe x = valeur plutôt que x(valeur). Disons que ça marche en C++ parce que les types de bases peuvent être vus comme des instances de classes mais que ce n'est pas ce qu'on écrit habituellement
Pour bien faire il faudrait que :
- le code utilise des noms de variables/fonctions en anglais
- le texte affiché soit défini au travers de constantes (éventuellement #define) qu'on peut facilement modifier à la compilation pour prévoir une application dans différentes langues.
Mais pour un premier programme c'était déjà un très bon premier jet ;-)
Bonne continuation !
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
#define MIN 1
#define MAX_FACILE 100
#define MAX_MOYEN 1000
#define MAX_DIFFICILE 2000
void bienvenue() {
cout << "----------------------------------------" << endl
<< "----------------------------------------" << endl
<< "- Bienvenue dans mon premier jeu! -" << endl
<< "----------------------------------------" << endl
<< endl
<< "Le but du jeu est de trouver le nombre" << endl
<< "qui a été généré aléatoirement ou rentré" << endl
<< "par un second joueur. A chaque coup," << endl
<< "l'ordinateur vous indique si le nombre" << endl
<< "mystère est plus grand ou plus petit" << endl
<< endl;
}
unsigned menu_max() {
unsigned difficulte, max;
bool invalide;
do {
invalide = false;
cout << "Veuillez choisir le niveau de difficulté :" << endl
<< " 1) Facile (entre 1 et " << MAX_FACILE << ')' << endl
<< " 2) Moyen (entre 1 et " << MAX_MOYEN << ')' << endl
<< " 3) Difficile (entre 1 et " << MAX_DIFFICILE << ')' << endl;
cin >> difficulte;
switch (difficulte) {
case 1: max = MAX_FACILE; break;
case 2: max = MAX_MOYEN; break;
case 3: max = MAX_DIFFICILE; break;
default: invalide = true; break;
}
} while (invalide);
return max;
}
unsigned menu_joueur() {
unsigned joueur;
do {
cout << "Choisissez un mode de jeu:" << endl
<< " 1) 1 joueur" << endl;
<< " 2) 2 joueurs" << endl;
cin >> joueur;
} while (joueur != 1 && joueur != 2);
return joueur;
}
void demander_prenom(unsigned no_joueur, string & prenom) {
cout << "Veuillez rentrer le prénom du joueur " << no_joueur << endl;
cin >> prenom;
}
int main()
{
string prenom1, prenom;
double nombre_mystere, nombre_essaye;
unsigned max, min = MIN, joueur, coups = 0;
bienvenue();
max = menu_max();
joueur = menu_joueur();
switch (joueur) {
case 1:
srand(time(NULL));
nombre_mystere = rand() % (max - min) + min;
demander_prenom(1, prenom);
cout << prenom << ", essayez de trouver le nombre mystère!" << endl;
break;
case 2:
demander_prenom(1, prenom1);
demander_prenom(2, prenom);
cout << prenom1 << ", veuillez rentrez un nombre" << endl;
cin >> nombre_mystere;
cout << prenom << ", essayez de trouver le nombre de " << prenom1 << endl;
break;
}
while (true) {
cin >> nombre_essaye;
++coups;
if (nombre_essaye < nombre_mystere) {
cout << "Le nombre mystere est plus grand!" << endl;
} else if (nombre_essaye > nombre_mystere) {
cout << "Le nombre mystere est plus petit!" << endl;
} else {
cout << "Bravo " << prenom << ", vous avez gagnez en "
<< coups << " coups!" << endl;
if (joueur == 2) {
cout << "Au tour de " << prenom1 << endl
<< "de trouver le nombre mystere!" << endl;
}
break;
}
}
return 0;
}
En résumé voici ce qu'il faut retenir :
- quelques fonctions pour mieux structurer le code
- utiliser des switchs quand c'est possible
- factoriser le code quand c'est possible
- chaîner les <<
- les valeurs numériques s'initialisent généralement en utilisant la syntaxe x = valeur plutôt que x(valeur). Disons que ça marche en C++ parce que les types de bases peuvent être vus comme des instances de classes mais que ce n'est pas ce qu'on écrit habituellement
Pour bien faire il faudrait que :
- le code utilise des noms de variables/fonctions en anglais
- le texte affiché soit défini au travers de constantes (éventuellement #define) qu'on peut facilement modifier à la compilation pour prévoir une application dans différentes langues.
Mais pour un premier programme c'était déjà un très bon premier jet ;-)
Bonne continuation !
Merci pour ta réponse!
Je vais lire attentivement ce code pour bien comprendre comment tu as fait.
Je vais tenter de le recoder en utilisant des fonctions, mais je suis actuellement en vacance et j'ai utilisé l'ordi pro de mon père pour coder ça... sur bloc note(car pas de droits admin) et c'est pour ça que je n'ai pas chaîner les <<.
Merci
Je vais lire attentivement ce code pour bien comprendre comment tu as fait.
Je vais tenter de le recoder en utilisant des fonctions, mais je suis actuellement en vacance et j'ai utilisé l'ordi pro de mon père pour coder ça... sur bloc note(car pas de droits admin) et c'est pour ça que je n'ai pas chaîner les <<.
Merci
D'ailleurs ça me fait penser qu'on pourrait remplacer la boucle while(true) par une boucle du genre for(coup = 1; coup <= max_coup; coup++) pour limiter le nombre d'essais.
Autre chose d'un point de vue mathématique, chercher un nombre compris entre deux bornes se résout en log(n) par dichotomie. L'idée d'une dichotomie c'est de proposer le nombre au mileu entre
- le plus grand nombre proposé et inférieur au nombre mystère
- le plus petit nombre proposé et supérieur au nombre mystère
Cela signifie qu'à chaque essai on peut diviser par 2 l'espace de recherche du nombre mystère. Ainsi le niveau "difficile" tel qu'il est défini n'engendre qu'un seul essai supplémentaire comparé au niveau "moyen" (il suffit de proposer 1000). Bref tu pourrais augmenter MAX_DIFFICILE à une valeur sensiblement plus élevée.
Autre chose d'un point de vue mathématique, chercher un nombre compris entre deux bornes se résout en log(n) par dichotomie. L'idée d'une dichotomie c'est de proposer le nombre au mileu entre
- le plus grand nombre proposé et inférieur au nombre mystère
- le plus petit nombre proposé et supérieur au nombre mystère
Cela signifie qu'à chaque essai on peut diviser par 2 l'espace de recherche du nombre mystère. Ainsi le niveau "difficile" tel qu'il est défini n'engendre qu'un seul essai supplémentaire comparé au niveau "moyen" (il suffit de proposer 1000). Bref tu pourrais augmenter MAX_DIFFICILE à une valeur sensiblement plus élevée.
j'essaierai de limiter le nombre de coups possible.
Et pour le max difficile, j'avais mit 10 000 à la base mais ça me paraissait vraiment difficile pour le coup...
Et pour le max difficile, j'avais mit 10 000 à la base mais ça me paraissait vraiment difficile pour le coup...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question