Aller au menu - Aller au contenu

Icône TP : le jeu du 'Plus ou Moins'

Mise à jour : 10/11/2011
Difficulté : Facile Facile Creative Commons BY-NC-SA
3 274 visites depuis 7 jours, dont 82 sur ce chapitre classé 50/786
Qui ne connaît pas le célebre jeu du + ou - , le jeu où il faut deviner à quel nombre pense l'adversaire tandis qu'il ne vous répondra que "Plus" ou "Moins", et parfois "Bravo, tu as gagné" ?


Pas vous ? En tout cas, c'est ce jeu qu'il va vous falloir programmer.
Sommaire du chapitre :
Icône du chapitre
Chapitre précédent Sommaire Chapitre suivant

Présentation du jeu

Comme je vous l'ai expliqué précédemment, ce jeu consiste à deviner un nombre auquel pense votre adversaire (ici l'ordinateur) le plus rapidement possible. Petite anecdote, ce jeu vient d'être réintroduit dans l'émission "Le Juste Prix" pour le jeu final.
Fastoche non ? o_O

Pour ceux qui ont déjà joué à ce jeu, le coder sera assez facile grâce aux possibilités offertes par Autoit. De plus, nous allons le faire graphiquement ! Eh oui, vous avez bien entendu : pas de console !
Pour les autres, ne vous inquiétez pas, ça vous sera aussi facile. :D

Élaborer l'algorithme

Élaborons l'algorithme de notre programme...

Avant de foncer tête baissée et de coder (ce qui est voué à l'échec), il faut d'abord définir précisément ce que va faire notre programme.
Par quelles étapes va passer notre programme ? Comment fera-t-il ? Que de questions ! :D

  • Premièrement, notre programme devra tirer un nombre au hasard.
  • On va répéter ces actions tant que l'utilisateur n'a pas deviné ce nombre :
    - on demande à l'utilisateur un nombre ;
    - si le nombre entré est supérieur au nombre caché, on l'indique à l'utilisateur ;
    - si le nombre entré est inférieur au nombre caché, on l'indique à l'utilisateur.
  • Si l'utilisateur a trouvé le nombre, on sort de la boucle.


Compliqué dites-vous ? :p

Ce dont vous aurez besoin

Voici la liste des outils de programmation dont vous aurez besoin pour cette fois :

  • les boucles, révisez-les un peu plus haut avant de vous lancer, à vous de choisir la plus appropriée pour ce script ;
  • les variables, bien sûr, à réviser également ;
  • les commandes informatives (InputBox et MsgBox) ;
  • la commande Random (je vous l'explique un peu plus bas) ;
  • les opérateurs.


Sauf erreur, avec tous ces outils en main, vous n'avez aucune chance de vous louper !

La commande Random.


La commande Random s'utilise comme cela :

Code : Autre
1
Random (valeur_minimale_possible , valeur_maximale_possible)


Par exemple, si je veux afficher un nombre au hasard allant de 1 à 10 dans un MsgBox, voici le code adéquat :

Code : Autre
1
2
3
4
$chiffre_hasard=Random (1, 10, 1)
;~(flag) j'ai ajouté le numéro "1" pour préciser que le nombre à tirer au hasard doit être entier.

MsgBox (0,"Tutoriel","Salut ! Le nombre est " & $chiffre_hasard & ".")


Vous savez tout ce qu'il faut savoir, vous savez ce que va faire le programme, il est temps de passer au codage ! :zorro:

Correction

Correction !
Vous n'y arrivez pas ? Recommencez encore une fois ! :)
Vous n'y arrivez toujours pas ? Prenez un bout de papier et marquez l'algorithme du programme avec vos mots à vous. Et recommencez. ;)
Vous n'y arrivez encore pas ? Je vois déjà vos yeux bouffis à minuit en train d'essayer de coder ce jeu. :p Essayez demain, la tête froide, et tout sera plus clair (généralement, inutile de vous énerver devant un programme : ça ne fait pas avancer le schmilblick ; allez prendre l'air !).

J'espère que vous avez au moins réfléchi à ce petit programme, que vous avez essayé de coder quelque chose, ou que vous y êtes arrivé.
Parce que, quoi qu'il en soit, il est temps de passer à la correction !

Vous voulez voir le script ?


Secret (cliquez pour afficher)
Vous êtes vraiment certain ?

Secret (cliquez pour afficher)

Code : Autre
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
;/////////////////////////////////////////////////////////
; Script écrit pour le siteduzero.com
; LE JEU DU PLUS OU MOINS
;/////////////////////////////////////////////////////////

Const $chiffreH = Random(0, 100, 1)

$msg = MsgBox(4, "Tutoriel Zero", "Bonjour ! Bienvenue au jeu du Plus ou du Moins."& @CRLF &"Le but du jeu est le suivant :" & @CRLF & _
                "Je tire un nombre au hasard que vous devrez deviner, puis je vous donne les indications 'plus' ou 'moins' pour vous aider. Vous êtes prêt ?")
                ;Ici Le Flag 4 Affiche OUI ou NON. Il va falloir traiter la réponse. Vous savez à quoi correspond @CRLF et @ _
If $msg = 7 Then _fermer() ; Si L'utilisateur répond Non, on quitte le programme.


;On peut maintenant passer à la boucle. On a choisit un Do... Until car on veut demander au moins une fois le nombre à l'utilisateur.
Do
        $reponse = InputBox("Tutoriel Autoit siteduzero.com", "Rentrez un nombre de 0 à 100")
        ;$reponse contient la valeur retournée par l'utilisateur. Vous voyez qu'on n'a pas eu besoin de la déclarer précédemment.

        If @error Then _fermer() ; Si l'utilisateur appuie sur Cancel on quitte le programme.

        ;On va maintenant prévoir une erreur utilisateur, en effet celui ci a pu entrer une chaine de caractères, on va donc utiliser la fonction Nombre()
        $reponse = Number($reponse) ; Si $reponse était une chaine de caractères, il devient 0. Plus d'aide dans la doc (F1).

        If ($reponse > $chiffreH) Then
                MsgBox(0, "Tutoriel Autoit siteduzero.com", "Pas mal... mais c'est un peu moins !" & @CRLF & "Nombre tenté : "&$reponse)
        ElseIf ($reponse < $chiffreH) Then
                MsgBox(0, "Tutoriel Autoit siteduzero.com", "Pas mal... mais c'est un peu plus !" & @CRLF & "Nombre tenté : "&$reponse)
        EndIf

Until ($reponse = $chiffreH)
MsgBox(1, " WoOoW!", " Vous avez réussi ! Extraordinaire ! Bravo ! Bip Bip Bip Fin du programme.")

Func _fermer()
        MsgBox(0,"Tutoriel Zero","Quel Dommage de vouloir quitter ! La communauté Autoitscript vous souhaite une bonne journée.")
        Exit
EndFunc



Je pense que le code se passe de tout commentaire, mais sachez que j'ai essayé d'introduire les notions vues précédemment même si elles ne sont pas obligatoires. ;)

De plus, si vous avez fait autre chose et que ça marche, c'est encore mieux !

Idées d'améliorations

Vous voilà avec un jeu de Plus ou Moins tout à fait respectable.
Mais vous pouvez certainement l'améliorer ! :)

  • Demandez à l'utilisateur s'il veut rejouer.
  • Proposez un mode 2 joueurs.
  • Ajoutez donc à votre jeu un compteur.

Code : Autre
1
Vous avez trouvé le nombre caché en 8 coups !



Voire même pour les compliqués perfectionnistes, ajouter un niveau de difficulté englobant :
  • la valeur maximale que peut prendre le nombre mystère, cela pourra augmenter (ou bien diminuer) la difficulté ;
  • le nombre maximal d'essais pour trouver le nombre.

Ça en fait des choses à faire, hein ? Au boulot ! :-°
Fort bien, si vous avez réussi tout seul, vous venez de terminer le chapitre et maitrisez tout ce qu'il faut pour commencer à coder des applications plus complètes. N'hesitez pas à revenir sur vos pas en particulier le chapitre sur la communauté française d'Autoit pour accéder au forum où nous répondrons à vos questions.
Chapitre précédent Sommaire Chapitre suivant

Partager

9 commentaires pour "TP : le jeu du 'Plus ou Moins'"
Note moyenne : 3.56 / 4 (100 votes)
Pseudo Commentaire
Hors ligne timmalos # Posté le 20/02/2012 à 01:29:08
Avatar

Avis : Très bon

Études : INSA Lyon

Il vous manque un & entre '$vie' et '"vie(s) "'

Image utilisateur
 
Hors ligne Little Nooby # Posté le 21/03/2012 à 19:22:27
Je cause trop...
Avatar

Avis : Très bon

Ville : Namur
Pays : Belgique

Je pensais pouvoir balayer ça en 5 minutes mais j'ai fais mille erreurs de syntaxes, sinon la logique n'est pas bien compliqué. Ca m'as servi à m'obliger de réviser la syntaxe des boucles, if then, ...

Allez, au chapitre suivant!

P.S.: Le Exit, ça quitte une boucle ou ça finit le programme? J'ai remarqué que tu n'as pas mis de EndIf pour une de tes boucles, il n'est pas obligatoire donc, mais il sert à quoi?

Je ne me trompe jamais, je trouve des façons de ne pas faire ce que je voulais.
 
Hors ligne timmalos # Posté le 21/03/2012 à 20:37:09
Avatar

Avis : Très bon

Études : INSA Lyon

Bon courage ;)
Exit quitte le programme.
Tu peux utiliser ExitLoop pour quitter une boucle, mais ce n'est guère recommander de l'utiliser car cela signifie que ta conception du programme était mauvaise au début.

Pour EndIf, tu n'es pas obligé de le mettre si tu n'as qu'une seule ligne apres le If.
Au lieu de faire
Code : Autre
1
2
3
If ... Then
   _Ma_fonction()
EndIf

Tu peux faire bcp plus simplement
Code : Autre
1
If ... Then _Ma_fonction()


Mais attention a ne pas en abuser.
Dans ce code par exemple la fonction 2 sera appelée à chaque fois car elle n'est pas dans le IF .
Code : Autre
1
2
If ... Then _Ma_fonction()
_Ma_fonction2()

Image utilisateur
 
Hors ligne Little Nooby # Posté le 21/03/2012 à 21:19:49
Je cause trop...
Avatar

Avis : Très bon

Ville : Namur
Pays : Belgique

Waaaah, réactif dis-donc, je ne pensais pas avoir une réponse avant perpète. En fait, sur le siteduzero.com, on a son coach personnel, c'est ça? :waw:

Ok merci pour les précisions, si tu veux mon avis, c'est le genre de truc que tu peux rajouter dans le tutoriel (et puis si tu ne le veux pas, c'est pareil).

Je ne me trompe jamais, je trouve des façons de ne pas faire ce que je voulais.
 
Hors ligne Binary-file # Posté le 15/05/2012 à 17:36:51
Avatar

Ville : Montferrand le château
Pays : France métropolitaine

Très amusant et un grand classique :)

Voici mon code (je l'ai compiler et distribuer :D )

Code : Autre
1
2
3
4
5
6
7
8
9
10
11
12
13
14
MsgBox(64,"","Jeu du plus ou moins" & @CRLF & @CRLF & "Deviner le nombre mystère (entre 1 et 100)" & @CRLF & @CRLF & "By Binary")
Global $nombre_mystere = Random(1, 100, 1)
Global $nombre_entrer = 0
While $nombre_entrer <> $nombre_mystere
$nombre_entrer = InputBox("Jeu du plus ou moins", "Quel est le nombre ?")
if $nombre_entrer > $nombre_mystere Then
MsgBox(64,"Infos","C'est moins !")
elseif $nombre_entrer < $nombre_mystere Then
MsgBox(64,"Infos","C'est plus")
ElseIf $nombre_entrer == $nombre_mystere Then
MsgBox(64,"Bravo !","Félicitation, tu a trouver le nombre mystère")
exit
EndIf
WEnd

j'ai dû déclarer ma variable $nombre_entrer en avant sinon = variable utilisée sans être déclarée :)

Je suis toujours le tuto (avec espacement, pour garder la tête froide ^^ )

Voir tous les commentaires
Ce tutoriel a été corrigé par les zCorrecteurs.