8

Une partie de poker

Téléchargez le code du jeu de poker dans le dossier nodejs :

  1. nodejs
    1. node_modules
    2. So-o.js
    3. OL.js
    4. Root.js
    5. ...
    6. Makefile
    7. ...
    8. poker
      1. poker.js
      2. Card.js
      3. Hand.js
      4. Deck.js
      5. ...

Créez le dossier nodejs avec le sous-dossier node_modules :

$ mkdir -p ~/nodejs/node_modules

Extrayez les fichiers ZIP dans le dossier nodejs :

$ unzip so-o-js.zip poker-js.zip

Liez tous les fichiers du code de So-o et du jeu de poker dans le dossier node_modules en remplaçant l'extension .js par .mjs :

$ make setup
mkdir node_modules
for f in So-o.js Root.js OL.js Once.js Application.js Responder.js; do \
	ln -f $f node_modules/`basename $f .js`.mjs; \
done
if [ -d poker ]; then \
	ln -f poker/poker.js `basename poker.js .js`.mjs; \
	for f in Deck.js Hand.js Card.js; do \
		ln -f poker/$f node_modules/`basename $f .js`.mjs; \
	done \
fi

Le script a aussi créé un lien du fichier poker/poker.js vers le fichier poker.mjs dans le répertoire courant.

Exécutez le programme poker.mjs :

$ nodejs --experimental-modules poker
3h,4h,4s,Jd,6c -> ONEPAIR
Keep (1-5...)? 23

Vous avez une paire. Le programme demande quelles cartes vous voulez garder. Entrez 23 pour garder la deuxième et la troisième carte et tirer 3 nouvelles cartes. Le programme affiche le résultat du second tirage :

Js,4h,4s,Ks,4c -> THREEOFKIND
Play or (q)uit? 

Vous avez un brelan. Appuyez sur Entrée pour rejouer :

3c,Ah,2s,7d,3d -> ONEPAIR
Keep (1-5...)? 15
3c,5h,3s,5d,3d -> FULLHOUSE
Play or (q)uit? q

Entrez q pour quitter le programme.

CODE
  1. import * as os from 'os';
  2. import * as readline from 'readline';

Donne accès aux modules os et readline de Node.js.

  1. import { sendmsg } from 'So-o';

Importe la fonction sendmsg de So-o. Le fichier So-o.js inclut automatiquement la classe Root.

  1. import 'Deck';

Importe la classe Deck.

  1. (async () => {
  1. })();

Le programme s'exécute dans une fonction de fermeture asynchrone.

  1.     const deck = sendmsg(sendmsg(Deck, 'new', true), 'shuffle');

Crée un jeu de cartes et le mélange.

  1.     const terminal = readline.createInterface({ input: process.stdin, output: process.stdout });

Crée l'interface avec le terminal.

  1.     const ask = (q) => new Promise((resolve) => terminal.question(`${q}? `, (r) => resolve(r.trim())));

Crée la promesse utilisée pour afficher un message d'invite à l'utilisateur et retourner la réponse.

  1.     let play = true;
  2.  
  3.     while (play) {
  1.     }

Joue tant que l'utilisateur n'a pas quitté le programme.

  1.         let hand = sendmsg(deck, 'hand');
  2.  
  3.         terminal.write(sendmsg(hand, 'toString'));
  4.         terminal.write(os.EOL);

Crée une main et l'affiche à l'utilisateur.

  1.         await ask('Keep (1-5...)').then((s) => {
  2.             let m = s.match(/[1-5]/g);
  3.            
  4.             let keep = m ? m.map((s) => Number.parseInt(s)) : [];
  5.            
  6.             for (let i = 1; i <= 5; i++) {
  7.                 if (keep.indexOf(i) == -1)
  8.                     sendmsg(hand, 'setCard', i, sendmsg(deck, 'deal'));
  9.             }
  10.         });

Demande à l'utilisateur de choisir les cartes qui doivent être conservées. Attend la réponse. Tire une nouvelle carte du paquet pour chaque carte qui doit être remplacée.

  1.         terminal.write(sendmsg(hand, 'toString'));
  2.         terminal.write(os.EOL);

Affiche la main finale à l'utilisateur.

  1.         await ask('Play or (q)uit').then((s) => {
  2.             if (s.charAt(0) == 'q' || s.charAt(0) == 'Q')
  3.                 play = false;
  4.         });

Demande à l'utilisateur si la partie doit continuer. Sort de la boucle si la réponse commence par un q ou un Q. Sinon, repart pour un tour.

  1.     terminal.close();

Ferme le terminal et quitte le programme.

VOIR AUSSI

Le manuel JavaScript, Une carte à jouer

Commentaires

Votre commentaire :
[p] [b] [i] [u] [s] [quote] [pre] [br] [code] [url] [email] strip aide 2000

Entrez un maximum de 2000 caractères.
Améliorez la présentation de votre texte avec les balises de formatage suivantes :
[p]paragraphe[/p], [b]gras[/b], [i]italique[/i], [u]souligné[/u], [s]barré[/s], [quote]citation[/quote], [pre]tel quel[/pre], [br]à la ligne,
[url]http://www.izend.org[/url], [url=http://www.izend.org]site[/url], [email]izend@izend.org[/email], [email=izend@izend.org]izend[/email],
[code]commande[/code], [code=langage]code source en c, java, php, html, javascript, xml, css, sql, bash, dos, make, etc.[/code].