Karte

Die Klasse card repräsentiert eine Karte im Poker. Sie ist von keiner anderen Klasse abgeleitet.

(defclass card ())

Die Listen *suits* und *ranks* geben die möglichen Farben und Werte der Karten vor.

(setq *suits* (quote (spades hearts diamonds clubs)))

(setq *ranks* (quote (ace king queen jack ten nine eight seven six five four three two)))

Die Listen werden vom Konstruktor verwendet, um zu prüfen, ob die Argumente für Farbe und Wert erlaubt sind. Farbe und Wert werden in Instanzvariable übernommen, danach wird die Instanz eingefroren.

(defmethod initialize ((this card) suit rank)
  (and
    (member? suit *suits*)
    (member? rank *ranks*))
  (progn
    (.= this suit suit)
    (.= this rank rank)
    (freeze this)))

Die Methode has-rank? überprüft, ob eine Karte den angegebenen Wert hat.

(defmethod has-rank? ((this card) rank)
  t
  (= rank (. this rank)))

Die Methode has-suit? überprüft, ob eine Karte die angegebene Farbe hat.

(defmethod has-suit? ((this card) suit)
  t
  (= suit (. this suit)))

Die Methode to-string erzeugt eine Repräsentation der Karte als Zeichenkette.

(defmethod to-string ((this card))
  t
  (with-slots-read-only (suit rank) this
    (concatenate
      (write-to-string rank)
      " of "
      (write-to-string suit))))