• 10 hours
  • Easy

Free online content available in this course.

You can get support and mentoring from a private teacher via videoconference on this course.

Got it!

Last updated on 1/7/13

TP : le jeu du 'Plus ou Moins'

Log in or subscribe for free to enjoy all this course has to offer!

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.

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 s'utilise comme cela :

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 :

$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 ?

Vous êtes vraiment certain ?

;/////////////////////////////////////////////////////////
; 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.

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.

Nous voici arrivé au point de non-retour, vous aimez Autoit et vous ne voulez plus vous arrêter, mais halte moussaillon, n'allez pas trop vite... Faites une pause et sortez dans la rue fêter la fin de votre apprentissage !

En effet, maintenant que vous maitrisez les bases, on va pouvoir passer à des choses plus intéressantes, et nous allons commencer par apprendre comment créer des interfaces graphiques. Dans un cours de C il serait question de GTK, en C++ il faudrait installer Qt, mais avec Autoit aucun supplément n'est requis : vous pouvez concevoir des interfaces graphiques très facilement, et c'est ce que nous allons vous montrer, avant d'aborder les fonctions GDI+ qui sont utilisées afin de tracer des cercles, des lignes et des beaux dessins. :-°

Example of certificate of achievement
Example of certificate of achievement