Deck and joker constructor

Joker constructor takes a rank for uniqueness - rank doesn't really
change anything in terms of the "power" of a joker but helps with
ensuring jokers are unique in a deck.

Deck constructor takes an optional argument for the number of decks.
A deck includes two jokers, so n decks include 2n jokers.
This commit is contained in:
2025-02-14 17:35:01 +00:00
parent c10b590420
commit 2c8b5e7110
2 changed files with 17 additions and 1 deletions

View File

@@ -118,3 +118,17 @@
(->> cardset
(mapcar #'card->str)
(format nil "~{~a~^, ~}")))
(fn make-joker (&optional (rank :ACE)) (-> (&optional rank) card)
(cons rank :Joker))
(fn make-deck (&optional (n 1)) (-> (&optional fixnum) cardset)
(append
(loop :for i :from 1 :to n
:nconc (loop :for j :from 1 :to 52
collect (int->card (1- j))))
(loop :for i :from 1 :to n
:collect (->> i
1-
int->rank
make-joker))))

View File

@@ -43,7 +43,9 @@
;; Comparators
:suit< :rank< :card<
;; Serialisers
:suit->str :rank->str :card->str :cardset->str))
:suit->str :rank->str :card->str :cardset->str
;; Constructors
:make-joker :make-deck))
(defpackage cantedraw.main
(:use :cl :cantedraw.lib.macros :cantedraw.lib.functions)