diff options
author | Aryadev Chavali <aryadev@aryadevchavali.com> | 2025-02-14 17:35:01 +0000 |
---|---|---|
committer | Aryadev Chavali <aryadev@aryadevchavali.com> | 2025-02-14 17:35:01 +0000 |
commit | 2c8b5e711035f340e94fd3bd2bd8a7d8b51cbae7 (patch) | |
tree | 0f6b5f496f299a201c47acf35284104726620542 | |
parent | c10b59042064184103695710fd8b20d80dd22e37 (diff) | |
download | cantedraw-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.lisp | 14 | ||||
-rw-r--r-- | packages.lisp | 4 |
2 files changed, 17 insertions, 1 deletions
@@ -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) |