Jeunes gens, il est temps de mettre en pratique ce que vous avez appris jusqu’à présent !
Ce TP est récurrent dans de nombreux tutoriels, mais c’est un bon exercice qui vous fait travailler les bases. Nous allons faire le jeu du "plus ou moins". Certes ce n’est certainement pas une application commune du langage COBOL, mais c’est plus amusant que de vous demander une application de comptabilité et de calculer je-ne-sais-quoi.
Préparation
Pré-requis
Certaines notions sont indispensables pour réussir ce TP, si vous n’êtes pas sûrs de vous, n’hésitez pas à revenir quelques chapitres en arrière !
Nous allons donc avoir besoin :
- de connaitre la syntaxe de base ;
- d’avoir bien compris les conditions ;
- et de savoir utiliser les boucles !
Consignes
Pour ceux qui ne connaissent pas déjà le principe, voilà ce que vous devez faire.
On demande à notre joueur d’entrer un chiffre entre 1 et 100, et l’objectif est que le joueur trouve le chiffre fixé de manière aléatoire par l’ordinateur. Pour l’aider, on va lui indiquer si les chiffres qu’il tape au fur et à mesure sont inférieurs ou supérieurs au nombre à trouver.
Si le chiffre n’est pas le bon, on lui redemande jusqu’à qu’il le trouve. Et quand il l’aura trouvé, on lui affichera un message de félicitations pour lui dire qu’il a gagné la partie.
Dernières astuces
Il vous manque encore un petit quelque chose pour arriver à faire le TP, on va voir comment générer un nombre aléatoire. Dans cet exemple, on génère un nombre entre 1 et 100 :
* Ce code se place dans PROCEDURE DIVISION.
* seed est une variable au format suivant : 9(8)
MOVE FUNCTION CURRENT-DATE(9:8) TO seed.
COMPUTE nbAleatoire = FUNCTION RANDOM (seed) * 100 + 1.
La fonction RANDOM
génère un nombre entre 0 et 1 exclu. On a également besoin d’un paramètre pour avoir un nombre vraiment aléatoire. Ensuite on multiplie ce nombre par 100, ce qui donne un chiffre entre 0 et 99, alors on ajoute 1 pour avoir un chiffre entre 1 et 100.
Aide supplémentaire
Si jamais vous pensez avoir bien compris ce qui vous est demandé, vous pouvez ne pas lire cette partie et vous lancer dans le code !
Sinon je vais vous aider à définir ce qu’il est nécessaire d’avoir dans votre code tout en restant assez bref, mais encore une fois, essayez de faire sans !
Vous avez craqué ? Bon je vais essayer de vous guider :
- Deux variables entières, une qui stock le nombre aléatoire et l’autre le nombre entré par l’utilisateur
- Au minimum 4 plages dont une de saisie pour récupérer l’entrée de l’utilisateur
- Une fois le nombre entré, on le compare à celui de l’ordinateur et selon le cas on informe l’utilisateur
- Il faut aussi une boucle pour redemander plusieurs fois à l’utilisateur de taper un nombre s’il se trompe
Il n’y a vraiment rien d’exceptionnel mais si vous n’avez toujours aucune idée de ce qu’il faut faire, je vous conseille de relire les parties qui vous posent problème.
Correction
Vous avez fini ? Vous êtes sûrs ? Attention ne trichez pas, ce n’est pas dans votre intérêt.
Je vais vous proposer une des solutions possibles afin de réaliser notre mini-jeu.
IDENTIFICATION DIVISION.
PROGRAM-ID. PlusOuMoins.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 seed PIC 9(8) VALUE 0.
77 nbAleatoire PIC 999.
77 nbEntree PIC 999.
SCREEN SECTION.
1 pla-titre.
2 BLANK SCREEN.
2 LINE 2 COL 15 VALUE 'Jeu du plus et du moins !'.
1 pla-plus.
2 LINE 4 COL 5 VALUE 'C''est plus !'.
1 pla-moins.
2 LINE 4 COL 5 VALUE 'C''est moins'.
1 pla-trouve.
2 LINE 4 COL 5 VALUE 'Bravo ! Vous avez trouve !'.
1 pls-nb.
2 LINE 6 COL 5 VALUE 'Veuillez entrer un nombre : '.
2 PIC zzz TO nbEntree REQUIRED.
PROCEDURE DIVISION.
INITIALIZE nbEntree.
MOVE FUNCTION CURRENT-DATE(9:8) TO seed.
DISPLAY pla-titre.
COMPUTE nbAleatoire = FUNCTION RANDOM (seed) * 100 + 1.
PERFORM UNTIL nbEntree = nbAleatoire
DISPLAY pls-nb
ACCEPT pls-nb
IF nbEntree > nbAleatoire THEN
DISPLAY pla-moins
ELSE
DISPLAY pla-plus
END-IF
END-PERFORM.
DISPLAY pla-trouve.
STOP RUN.
Améliorations possibles
Voici une petite liste d’idées pour améliorer votre petit jeu, encore une fois c’est un TP récurrent donc les idées restent plus ou moins les mêmes :
- Proposer différents intervalles de valeurs possibles
- Afficher le nombre d’essais à l’utilisateur, une fois le nombre trouvé
- Demander à refaire une partie quand la partie est finie
- …
Bonus : un peu de couleur
Jeunes gens, laissez-moi vous donner une petite astuce en guise de récompense après une séance de dur labeur ! Je vais vous apprendre à mettre un peu de couleur dans votre console.
Voilà le secret :
01 pla-erreur.
02 LINE 5 COL 10
" C'est plus grand ! "
FOREGROUND-COLOR 15
BACKGROUND-COLOR 4.
Vous l’aurez compris, ceci est un message d’erreur écrit en blanc sur fond rouge, comme un message d’erreur plus ou moins traditionnel.
On a donc la propriété FOREGROUND-COLOR
qui correspond à la couleur du texte, et BACKGROUND-COLOR
qui correspond au fond du texte.
Attention à la disposition des points, il n’y a pas de point après le texte cette fois, mais après la dernière instruction de couleur !
Bien sûr, vous n’êtes pas obligés d’utiliser les 2 propriétés à chaque fois, une suffit.
Les couleurs sont au nombre de 16, entre 0 et 15. Et comme je vous aime bien, je vous ai préparé un tableau récapitulatif des couleurs :
Code | Couleur |
---|---|
0 | Noir |
1 | Bleu |
2 | Vert |
3 | Bleu clair |
4 | Marron |
5 | Violet |
6 | Kaki |
7 | Gris clair |
8 | Gris |
9 | Bleu clair |
10 | Vert clair |
11 | Cyan |
12 | Rouge |
13 | Rose |
14 | Jaune |
15 | Blanc |
Voilà ! Maintenant il ne vous reste plus qu’à donner de la couleur à notre mini-jeu !
Voilà pour les notions essentielles ! Même avec de bonnes bases dans d’autres langages, il faut avouer que COBOL ne ressemble vraiment pas à la majorité (syntaxiquement parlant).
Sur ce, si vous êtes encore d’attaque, vous pouvez déjà entamer la prochaine partie !