Une partie de poker
Téléchargez le code du jeu de poker dans le dossier So-o :
- So-o
- So-o.php
- OL.php
- Object.php
- ...
- poker
- poker.php
- Card.php
- Hand.php
- Deck.php
- ...
Dans le dossier poker, exécutez le programme poker.php :
$ php -f poker.php
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
- set_include_path(dirname(getcwd()) . PATH_SEPARATOR . getcwd());
Met le paramètre de configuration include_path
de PHP au répertoire courant et au répertoire qui contient le code de So-o.
- require_once 'So-o.php';
- require_once 'Deck.php';
Charge So-o et la classe Deck.
- $deck=sendmsg($Deck, 'new', true);
- sendmsg($deck, 'shuffle');
Crée un jeu de cartes qui est automatiquement mélangé quand toutes les cartes ont été tirées. Mélange le jeu.
- $stdin = fopen('php://stdin', 'r');
Ouvre le clavier pour interagir avec l'utilisateur.
- do {
Joue un tour indéfiniment tant que l'utilisateur ne sort pas du jeu.
- }
- while (true);
- fclose($stdin);
Ferme le clavier avant de quitter le programme.
- $hand=sendmsg($deck, 'hand');
- sendmsg($hand, 'print', true);
Tire une main de cinq cartes et l'affiche.
- echo 'Keep (1-5...)? ';
- $line = fgets($stdin);
- if ($line === false) {
- break;
- }
- trim($line);
Demande à l'utilisateur quelles cartes il veut garder. Lit la réponse au clavier. Quitte si l'entrée est fermée.
- $keep=array_fill(1, 5, false);
- preg_match_all('/\d/', $line, $r);
- foreach ($r[0] as $n) {
- if ($n >=1 and $n <= 5) {
- $keep[$n]=true;
- }
- }
Remplit le tableau de cinq booléens $keep
, un pour chaque carte, avec false
puis avec true
pour chaque carte qui doit être gardée.
Retire une carte pour chaque carte qui n'est pas gardée. Affiche la main.
- echo 'Play or (q)uit? ';
- $line = fgets($stdin);
- if ($line === false) {
- break;
- }
- trim($line);
- if ($line[0] == 'q' or $line[0] == 'Q') {
- break;
- }
Demande à l'utilisateur s'il veut continuer à jouer ou quitter la partie. Quitte le programme si la réponse commence par q or Q ou si l'entrée est fermée.
Commentaires