TP n°1 : Jeu du Plus ou Moins

Avatar de Monsieur X
Description du chapitre et des ses objectifs :

Premier TP (le plus facile et le plus courant) : le jeu du Plus ou Moins. Eh oui, le Batch ne sert pas qu'à travailler...

Image de Partie

Accéder directement à une des parties du cours :

Préparations

Le jeu du plus ou moins est un jeu qui génère un nombre aléatoire et qui demande à l'utilisateur de le trouver. Evidemment, on va imposer des limites à ce tirage au sort (au départ, il est compris entre 0 et 32 767).
Voyons comment préparer le jeu.

Je vous ai parlé de tirer au sort. Pour cela, une variable existe : %random%. Ensuite, il faut écrire :

Code BATCH - Numéro de ligne
  1. set /a max=100
  2. set /a nombreMystere=(%random% %% %max%)+1

Explications : on crée une variable max égale à 100 (pour un tirage entre 1 et 100).
Ensuite on crée une variable contenant le reste de la division euclidienne de %random% par %max% et on rajoute 1 (sinon l'ordinateur tire un nombre entre 0 et 99).

Méthode (la mienne ) : On veut que l'ordinateur nous demande un nombre jusqu'à qu'on trouve le bon (utilisez les boucles).
Après la saisie d'un nombre, il faut le vérifier :
Si le nombre entré est plus petit que le nombre cherché, il faut afficher "Le nombre que vous cherchez est plus grand.". Si le nombre entré est plus grand que le nombre cherché, il faut afficher "Le nombre que vous cherchez est plus petit.". Sinon, il faut afficher "Vous avez reussi !".
Attention : N'allez pas plus loin : c'est la correction. D'abord essayez de faire le code, puis corrigez-vous...

Correction

Secret (cliquez pour afficher)

Code BATCH - Numéro de ligne
  1. @echo off
  2. set /a max=100
  3. set /a nombreMystere=(%random% %% %max%)+1
  4. :main
  5. rem on crée notre fonction principale
  6. set /p nombre=Entrez un nombre entre 1 et 100 inclus :
  7. if /i %nombre% lss nombreMystere ( goto moins ) else if %nombre% gtr %nombreMystere% ( goto plus ) else ( goto fin )
  8. :moins
  9. echo Le nombre que vous cherchez est plus grand...
  10. goto main
  11. lus
  12. echo Le nombre que vous cherchez est plus petit...
  13. goto main
  14. :fin
  15. echo Vous avez reussi !
  16. pause

Amélioration du projet

On a créé un jeu, mais il est temps de l'améliorer :

  • Changer le titre
  • Faire un compteur de tentatives
  • Créer plusieurs niveaux de jeu
  • Créer un interface d'aide
  • Faire un mode multijoueurs
  • Etc, etc...
Voici mon amélioration (vous n'êtes pas obligé de la suivre) :
Secret (cliquez pour afficher)
Code BATCH - Numéro de ligne
  1. @echo off
  2. title Plus ou Moins
  3. set /a min=1
  4. ::La variable %min% servira pour l'interface d'aide
  5. set /a compteur=0
  6. ::La variable %compteur% servira pour le compteur de tentatives
  7. set /a aide=0
  8. ::La variable %aide% servira pour l'interface d'aide : 1 pour l'activer et 0 pour ne pas l'activer
  9. layer
  10. rem Cette fonction permet de choisir le nombre de joueurs
  11. cls
  12. echo 1 : 1 joueur
  13. echo 2 : 2 joueurs
  14. set /p joueur=Nombre de joueurs :
  15. if /i %joueur% equ 2 ( goto 2j ) else if /i %joueur% lss 1 ( goto player ) else if /i %joueur% gtr 2 ( goto player )
  16. rem Si l'utilisateur sélectionne 2 joueurs, on l'envoie sur l'interface du mode multijoueur.
  17. rem Et si l'utilisateur ne valide ni 1 ni 2, on remonte au début de la fonction player. Si aucune de ces conditions n'est remplie (si l'utilisateur a rentré 1) on passe
  18. rem à la suite (ici, la fonction level)
  19. :level
  20. rem Cette fonction sert à demander au joueur de choisir entre trois niveaux
  21. cls
  22. echo 1 : facile (entre 1 et 100 inclus)
  23. echo 2 : moyen (entre 1 et 500 inclus)
  24. echo 3 : difficile (entre 1 et 1000 inclus)
  25. set /p niveau=Votre choix :
  26. if /i %niveau% equ 1 ( set /a max=100 ) else if /i %niveau% equ 2 ( set /a max=500 ) else if /i %niveau% equ 3 ( set /a max=1000 ) else ( goto level )
  27. rem On donne une valeur à la variable %niveau% en fonction de la réponse de l'utilisteur. Si la réponse n'est ni 1 ni 2 ni 3 on retourne au début de la fonction level.
  28. set /a nombreMystere=%random% %% %max%+1
  29. :help
  30. rem Cette fonction sert à activer l'aide.
  31. cls
  32. if %joueur% equ 2 ( echo Joueur 1, passez le clavier au joueur 2... )
  33. echo 0 : Desactiver l'aide
  34. echo 1 : Activer l'aide
  35. set /p aide=Voulez-vous beneficier de l'aide ?
  36. if /i %aide% lss 0 ( goto help ) else if /i %aide% gtr 1 ( goto help )
  37. rem Si l'utilisateur ne rentre ni 0 ni 1 on retourne au début de la fonction help. Nous utiliserons la variable %aide% plus tard...
  38. :main
  39. rem Cette fonction est la fonction principale
  40. cls
  41. if %joueur% equ 1 ( set /p nombre=Entrez un nombre entre %min% et %max% inclus : ) else ( set /p nombre=Joueur 2 entrez un nombre entre 1 et 100 inclus : )
  42. set /a compteur +=1
  43. if /i %nombre% equ %nombreMystere% ( goto quitter ) else if /i %nombre% gtr %nombreMystere% ( goto plus )
  44. :moins
  45. if %aide% equ 0 ( echo Le nombre que vous cherchez est plus grand... ) else ( set /a min=%nombre%+1 )
  46. pause
  47. goto main
  48. lus
  49. if %aide% equ 0 ( echo Le nombre que vous cherchez est plus petit... ) else ( set /a max=%nombre%-1 )
  50. pause
  51. goto main
  52. :2j
  53. rem Cette fonction sert à demander au joueur 1 d'entrer un nombre entre 1 et 100 inclus, pour le faire deviner à joueur 2.
  54. cls
  55. set /p nombreMystere=Joueur 1 entrez un nombre entre 1 et 100 inclus :
  56. if /i %nombreMystere% lss 1 ( goto 2j ) else if /i %nombreMystere% gtr 100 ( goto 2j )
  57. goto help
  58. :quitter
  59. echo Vous avez gagne au bout de %compteur% tentatives !
  60. pause

Aération du projet

Nous avons vu comment aérer un programme, et ici nous avons du code à en perdre la vue.
Nous allons donc l'aérer (1 fichier .bat pour chaque fonction) :
plusoumoins.bat, programme principal :

Code batch - Numéro de ligne
  1. :: plusoumoins.bat, programme principal
  2. @echo off
  3. title PLUS ou MOINS
  4. set /a min=1
  5. set /a compteur=0
  6. set /a aide=0
  7. player.bat

main.bat :
Code batch - Numéro de ligne
  1. ::main.bat
  2. if %joueur% equ 1 ( set /p nombre=Entrez un nombre entre %min% et %max% inclus : ) else ( set /p nombre=Joueur 2, entrez un nombre entre 1 et 100 inclus : )
  3. set /a compteur +=1
  4. if /I %nombre% lss %nombreMystere% ( moins.bat ) else if %nombre% gtr %nombreMystere% ( plus.bat )
  5. echo Vous avez gagne au bout de %compteur% coups !
  6. pause
  7. exit

player.bat
Code batch - Numéro de ligne
  1. :: player.bat
  2. cls
  3. echo 1: 1 joueur
  4. echo 2: 2 joueurs
  5. set /p joueur=Nombre de joueurs :
  6. if /I %joueur% equ 1 ( level.bat )
  7. if /I %joueur% equ 2 ( 2j.bat )
  8. if /I %joueur% lss 1 ( player.bat ) else if %joueur% gtr 2 ( player.bat )

level.bat :
Code batch - Numéro de ligne
  1. ::level.bat
  2. cls
  3. echo 1: Facile (entre 1 et 100)
  4. echo 2: Moyen (entre 1 et 500)
  5. echo 3: Difficile (entre 1 et 1000)
  6. set /p niveau=Votre selection :
  7. if /I %niveau% lss 1 ( level.bat ) else if %niveau% gtr 3 ( level.bat )
  8. if /I %niveau% equ 1 ( set /a max=100 ) else if %niveau% equ 2 ( set /a max=500 ) else ( set /a max=1000 )
  9. set /a nombreMystere=%random% %% %max%+1
  10. help.bat

help.bat :
Code batch - Numéro de ligne
  1. ::help.bat
  2. cls
  3. if %joueur% equ 2 ( echo Joueur 1, passez au joueur 2... )
  4. echo 0: Desactiver l'aide
  5. echo 1: Activer l'aide
  6. set /p aide=Voulez vous beneficier de l'aide ?  
  7. if /I %aide% lss 0 ( help.bat ) else if %aide% gtr 1 ( help.bat ) else ( main.bat )
  8. cls

moins.bat
Code batch - Numéro de ligne
  1. ::moins.bat
  2. if %aide% equ 0 ( echo Le nombre que vous cherchez est plus grand... ) else ( set /a min=%nombre%+1 )
  3. main.bat

plus.bat :
Code batch - Numéro de ligne
  1. :: plus.bat
  2. if %aide% equ 0 ( echo Le nombre que vous cherchez est plus petit... ) else ( set /a max=%nombre%-1 )
  3. main.bat

2j.bat :
Code batch - Numéro de ligne
  1. ::2j.bat
  2. cls
  3. set /p nombreMystere=Joueur 1, entrez un nombre entre 1 et 100 :
  4. if /I %nombreMystere% lss 1 ( 2j.bat ) else if %nombreMystere% gtr 100 ( 2j.bat )
  5. cls
  6. level.bat

Téléchargement du projet

Voici le projet avancé :
Zip du Plus ou moins


Nous allons attaquer le second TP : le jeu des Allumettes.

Sommaire - Chapitre suivant

Nos rédacteurs et membres sont pour la plupart ouverts à des remarques constructives et servir à alerter le rédacteur du cours, des fautes éventuelles ou de propositions et nouvelles perspectives de cours etc ...
Pour ce faire cliquez ici

Postez vous aussi un commentaire à cette partie via le lien que voici