TP n°2 : Jeu des Allumettes

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

Nous allons créer un jeu des allumettes : au départ il y en a 21. Puis les deux joueurs en retirent 1 ; 2 ou 3 par tour. Celui ou celle qui enlève la dernière allumette a perdu.
J'ai choisi ce jeu car il présente un bon intérêt, pour moi...

Image de Partie

Accéder directement à une des parties du cours :

Description du jeu

Comme dit plus tôt, le jeu des allumettes se joue à deux. A tour de rôle, ils doivent enlever 1 ; 2 ou 3 allumettes. Le/la gagnant(e) est la personne qui ne laisse à l'adversaire qu'une alumette. Autrement dit, la personne qui enlève la dernière allumette perd.

Préparatifs

Tout d'abord, créez une variable nb_allumettes qui stockera les allumettes, puis une variable retire qui sera utilisée par l'ordinateur, afin d'enlever les allumettes et enfin un choice pour l'utilisateur.
Souvenez-vous du tirage au sort du premier TP. Il faudra l'utiliser pour le nombre d'allumettes retirées (par l'ordinateur bien sûr).
Faites en sorte que le nombre d'allumettes ne soit jamais négatif.
Créez le système pour savoir si vous l'utilisateur a gagné ou perdu...

Attention : N'allez pas plus loin : c'est la correction. Essayez d'abord de faire le TP puis regardez la correction

Correction

Voici ma correction :
Secret (cliquez pour afficher)

Code BATCH - Numéro de ligne
  1. @echo off
  2. set /a nb_allumettes=21
  3. :main
  4. cls
  5. echo Il y a %nb_allumettes% allumettes.
  6. choice /c 123 /n /m "Combien d'allumettes voulez-vous enlever ?"
  7. set /a nb_allumettes-=%errorlevel%
  8. if %nb_allumettes% lss 0 ( goto ajuster ) else if %nb_allumettes% equ 0 ( goto perdre ) else ( goto ordi )
  9. :ajuster
  10. set /a nb_allumettes+=%retire%
  11. goto main
  12. :ajuster_ordi
  13. set /a nb_allumettes+=%retire%
  14. goto ordi
  15. rdi
  16. set /a retire=%random% %% 3+1
  17. set /a nb_allumettes-=%retire%
  18. if %nb_allumettes% lss 0 ( goto ajuster_ordi ) else if %nb_allumettes% equ 0 ( goto gagner )
  19. pause
  20. cls
  21. if %retire% neq 1 ( echo L'ordinateur a enleve %retire% allumettes... ) else ( echo L'ordinateur a enleve 1 allumette... )
  22. pause
  23. goto main
  24. :gagner
  25. cls
  26. if %retire% neq 1 ( echo L'ordinateur a enleve %retire% allumettes... ) else ( echo L'ordinateur a enleve 1 allumette... )
  27. pause
  28. cls
  29. echo Vous avez GAGNE !
  30. goto pause
  31. : perdre
  32. cls
  33. echo Vous avez perdu...
  34. goto pause
  35. : pause
  36. pause

Astuce pour gagner

Vous pouvez gagner assez facilement à ce jeu :
Supposons qu'il ne reste que 6 allumettes et que ce soit à votre tour : il faut enlever une seule allumette comme ça l'ordinateur n'aura qu'un choix possible : celui de perdre !
Explications :

  • Il enlève 1 allumette -> il reste 4 allumettes et vous en enlevez 3 -> il reste 1 allumette et l'ordi est obligé de la prendre -> VICTOIRE
  • Il enlève 2 allumettes -> il reste 3 allumettes et vous en enlevez 2 -> il reste 1 allumette et l'ordi est obligé de la prendre -> VICTOIRE
  • Il enlève 3 allumettes -> Il reste 2 allumettes et vous en enlevez 1 -> Il reste 1 allumette et l'ordi est contraint de la prendre -> VICTOIRE

Rendre l'IA plus intelligente grâce à l'astuce

Vous voulez que l'ordinateur soit plus fort ?
Alors adoptez cette solution pour qu'il respecte l'astuce des 6 allumettes :
Changez dans la fonction ordi :

Code batch - Numéro de ligne
  1. set /a retire=%random% %% 3+1

Avec ceci :
Code batch - Numéro de ligne
  1. if %nb_allumettes% equ 6 ( set /a retire=1 ) else if %nb_allumettes% equ 5 ( set /a retire=3 ) else if %nb_allumettes% equ 4 ( set /a retire=3 ) else if %nb_allumettes% equ 3 ( set /a retire=2 ) else if %nb_allumettes% equ 2 ( set /a retire=1 ) else ( set /a retire=%random% %% 3+1 )

C'est le code de ce que je vous ai expliqué dans la partie astuce.

Téléchargement du projet

Voici le projet. Bien entendu, vous pouvez l'améliorer (aération, demander à l'utilisteur de choisir le joueur qui commence...) :
Zip du jeu des Allumettes.


J'espère que les 2 TP ont eu une grande influence sur vous (idées, méthodes, façons de coder...)

Chapitre précédent - Sommaire

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