TP n°1 : Jeu du Plus ou Moins
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...
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 :
set /a max=100
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)
@echo off
set /a max=100
set /a nombreMystere=(%random% %% %max%)+1
:main
rem on crée notre fonction principale
set /p nombre=Entrez un nombre entre 1 et 100 inclus :
if /i %nombre% lss nombreMystere ( goto moins ) else if %nombre% gtr %nombreMystere% ( goto plus ) else ( goto fin )
:moins
echo Le nombre que vous cherchez est plus grand...
goto main

lus
echo Le nombre que vous cherchez est plus petit...
goto main
:fin
echo Vous avez reussi !
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)@echo off
title Plus ou Moins
set /a min=1
::La variable %min% servira pour l'interface d'aide
set /a compteur=0
::La variable %compteur% servira pour le compteur de tentatives
set /a aide=0
::La variable %aide% servira pour l'interface d'aide : 1 pour l'activer et 0 pour ne pas l'activer

layer
rem Cette fonction permet de choisir le nombre de joueurs
cls
echo 1 : 1 joueur
echo 2 : 2 joueurs
set /p joueur=Nombre de joueurs :
if /i %joueur% equ 2 ( goto 2j ) else if /i %joueur% lss 1 ( goto player ) else if /i %joueur% gtr 2 ( goto player )
rem Si l'utilisateur sélectionne 2 joueurs, on l'envoie sur l'interface du mode multijoueur.
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
rem à la suite (ici, la fonction level)
:level
rem Cette fonction sert à demander au joueur de choisir entre trois niveaux
cls
echo 1 : facile (entre 1 et 100 inclus)
echo 2 : moyen (entre 1 et 500 inclus)
echo 3 : difficile (entre 1 et 1000 inclus)
set /p niveau=Votre choix :
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 )
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.
set /a nombreMystere=%random% %% %max%+1
:help
rem Cette fonction sert à activer l'aide.
cls
if %joueur% equ 2 ( echo Joueur 1, passez le clavier au joueur 2... )
echo 0 : Desactiver l'aide
echo 1 : Activer l'aide
set /p aide=Voulez-vous beneficier de l'aide ?
if /i %aide% lss 0 ( goto help ) else if /i %aide% gtr 1 ( goto help )
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...
:main
rem Cette fonction est la fonction principale
cls
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 : )
set /a compteur +=1
if /i %nombre% equ %nombreMystere% ( goto quitter ) else if /i %nombre% gtr %nombreMystere% ( goto plus )
:moins
if %aide% equ 0 ( echo Le nombre que vous cherchez est plus grand... ) else ( set /a min=%nombre%+1 )
pause
goto main

lus
if %aide% equ 0 ( echo Le nombre que vous cherchez est plus petit... ) else ( set /a max=%nombre%-1 )
pause
goto main
:2j
rem Cette fonction sert à demander au joueur 1 d'entrer un nombre entre 1 et 100 inclus, pour le faire deviner à joueur 2.
cls
set /p nombreMystere=Joueur 1 entrez un nombre entre 1 et 100 inclus :
if /i %nombreMystere% lss 1 ( goto 2j ) else if /i %nombreMystere% gtr 100 ( goto 2j )
goto help
:quitter
echo Vous avez gagne au bout de %compteur% tentatives !
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 :
:: plusoumoins.bat, programme principal
@echo off
title PLUS ou MOINS
set /a min=1
set /a compteur=0
set /a aide=0
player.bat
main.bat :::main.bat
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 : )
set /a compteur +=1
if /I %nombre% lss %nombreMystere% ( moins.bat ) else if %nombre% gtr %nombreMystere% ( plus.bat )
echo Vous avez gagne au bout de %compteur% coups !
pause
exit
player.bat:: player.bat
cls
echo 1: 1 joueur
echo 2: 2 joueurs
set /p joueur=Nombre de joueurs :
if /I %joueur% equ 1 ( level.bat )
if /I %joueur% equ 2 ( 2j.bat )
if /I %joueur% lss 1 ( player.bat ) else if %joueur% gtr 2 ( player.bat )
level.bat :::level.bat
cls
echo 1: Facile (entre 1 et 100)
echo 2: Moyen (entre 1 et 500)
echo 3: Difficile (entre 1 et 1000)
set /p niveau=Votre selection :
if /I %niveau% lss 1 ( level.bat ) else if %niveau% gtr 3 ( level.bat )
if /I %niveau% equ 1 ( set /a max=100 ) else if %niveau% equ 2 ( set /a max=500 ) else ( set /a max=1000 )
set /a nombreMystere=%random% %% %max%+1
help.bat
help.bat :::help.bat
cls
if %joueur% equ 2 ( echo Joueur 1, passez au joueur 2... )
echo 0: Desactiver l'aide
echo 1: Activer l'aide
set /p aide=Voulez vous beneficier de l'aide ?
if /I %aide% lss 0 ( help.bat ) else if %aide% gtr 1 ( help.bat ) else ( main.bat )
cls
moins.bat::moins.bat
if %aide% equ 0 ( echo Le nombre que vous cherchez est plus grand... ) else ( set /a min=%nombre%+1 )
main.bat
plus.bat ::: plus.bat
if %aide% equ 0 ( echo Le nombre que vous cherchez est plus petit... ) else ( set /a max=%nombre%-1 )
main.bat
2j.bat :::2j.bat
cls
set /p nombreMystere=Joueur 1, entrez un nombre entre 1 et 100 :
if /I %nombreMystere% lss 1 ( 2j.bat ) else if %nombreMystere% gtr 100 ( 2j.bat )
cls
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