aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAryadev Chavali <aryadev@aryadevchavali.com>2025-02-14 17:35:01 +0000
committerAryadev Chavali <aryadev@aryadevchavali.com>2025-02-14 17:35:01 +0000
commit2c8b5e711035f340e94fd3bd2bd8a7d8b51cbae7 (patch)
tree0f6b5f496f299a201c47acf35284104726620542
parentc10b59042064184103695710fd8b20d80dd22e37 (diff)
downloadcantedraw-2c8b5e711035f340e94fd3bd2bd8a7d8b51cbae7.tar.gz
cantedraw-2c8b5e711035f340e94fd3bd2bd8a7d8b51cbae7.tar.bz2
cantedraw-2c8b5e711035f340e94fd3bd2bd8a7d8b51cbae7.zip
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.
-rw-r--r--model.lisp14
-rw-r--r--packages.lisp4
2 files changed, 17 insertions, 1 deletions
diff --git a/model.lisp b/model.lisp
index d17d130..ccbaa9a 100644
--- a/model.lisp
+++ b/model.lisp
@@ -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))))
diff --git a/packages.lisp b/packages.lisp
index 3ea9ba7..28fd51b 100644
--- a/packages.lisp
+++ b/packages.lisp
@@ -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)