Une carte à jouer
- namespace Card;
- require_once 'So-o.php';
- define(__NAMESPACE__ . '\TWO', 0);
- define(__NAMESPACE__ . '\THREE', 1);
- define(__NAMESPACE__ . '\FOUR', 2);
- define(__NAMESPACE__ . '\FIVE', 3);
- define(__NAMESPACE__ . '\SIX', 4);
- define(__NAMESPACE__ . '\SEVEN', 5);
- define(__NAMESPACE__ . '\EIGHT', 6);
- define(__NAMESPACE__ . '\NINE', 7);
- define(__NAMESPACE__ . '\TEN', 8);
- define(__NAMESPACE__ . '\JACK', 9);
- define(__NAMESPACE__ . '\QUEEN', 10);
- define(__NAMESPACE__ . '\KING', 11);
- define(__NAMESPACE__ . '\ACE', 12);
- define(__NAMESPACE__ . '\CLUBS', 0);
- define(__NAMESPACE__ . '\DIAMONDS', 1);
- define(__NAMESPACE__ . '\HEARTS', 2);
- define(__NAMESPACE__ . '\SPADES', 3);
Place le code de la classe dans son espace de nommage. Charge So-o. Définit une constante pour chaque valeur et chaque couleur d'une carte.
- defclass('Card', null, 1, null, array('rank', 'suit'), null, array('init', 'rank', 'suit', 'compare', 'toString'));
La classe Card hérite de la classe Object. Une instance a 2 propriétés : rank, sa valeur, et suit, sa couleur. Une instance redéfinit les messages init et toString. Elle implémente les messages rank, suit et compare.
- function i_init($self, $rank, $suit) {
- supersend('init', func_get_args());
- sendmsg($self, 'set', 'rank', $rank);
- sendmsg($self, 'set', 'suit', $suit);
- return $self;
- }
init
prend 2 arguments : $rank
et $suit
, la valeur et la couleur d'une carte.
Elle initialise les propriétés rank et suit de $self
avec $rank
et $suit
.
- function i_rank($self) {
- return sendmsg($self, 'get', 'rank');
- }
rank
retourne la propriété rank de $self
.
- function i_suit($self) {
- return sendmsg($self, 'get', 'suit');
- }
suit
retourne la propriété suit de $self
.
- function i_compare($self, $aCard) {
- $rank1=sendmsg($self, 'get', 'rank');
- $rank2=sendmsg($aCard, 'get', 'rank');
- return $rank1 == $rank2 ? 0 : $rank1 > $rank2 ? 1 : -1;
- }
compare
compare $self
avec $aCard
, une autre instance de Card.
Elle retourne 0 si la valeur de $self
est égale à la valeur de $aCard
, -1 si elle plus faible, 1 si elle est plus forte.
compare
sert à trier une instance de Hand.
- function i_toString($self) {
- static $srank=array(TWO => '2', THREE => '3', FOUR => '4', FIVE => '5', SIX => '6', SEVEN => '7', EIGHT => '8', NINE => '9', TEN => '10', JACK => 'J', QUEEN => 'Q', KING => 'K', ACE => 'A');
- static $ssuit=array(CLUBS => 'c', DIAMONDS => 'd', HEARTS => 'h', SPADES => 's');
- $rank=sendmsg($self, 'get', 'rank');
- $suit=sendmsg($self, 'get', 'suit');
- return $srank[$rank] . $ssuit[$suit];
- }
toString
retourne une chaîne de caractères contenant la valeur et la couleur de $self
.
- set_include_path(getcwd() . PATH_SEPARATOR . dirname(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 'Card.php';
Charge So-o et la classe Card.
- $card_2C=sendmsg($Card, 'new', \Card\TWO, \Card\CLUBS);
- echo '2c (two of clubs) -> ';
- sendmsg($card_2C, 'print', true);
Crée une carte, le 2 de trèfle, et l'affiche.
- $card_Kh=sendmsg($Card, 'new', \Card\KING, \Card\HEARTS);
- echo 'Kh (king of hearts) -> ';
- sendmsg($card_Kh, 'print', true);
Crée une autre carte, le roi de cœur, et l'affiche.
$ php -f testCard.php
2c (two of clubs) -> 2c
Kh (king of hearts) -> Kh
Commentaires