diff --git a/CCard.hs b/CCard.hs new file mode 100644 index 0000000..ec94333 --- /dev/null +++ b/CCard.hs @@ -0,0 +1,51 @@ +module CCard where + +import Data.Word (Word64) +import Data.Bits (setBit, (.|.)) + +newtype Card = Card Int +type Pack = Word64 + +data Flower = + Pine + | Plum + | Cherry + | Wisteria + | Iris + | Peony + | BushClover + | SusukiGrass + | Chrysanthemum + | Maple + | Willow + | Paulownia + deriving (Eq, Ord, Enum, Show) + +flower :: Card -> Flower +flower (Card n) = toEnum $ n `div` 4 + +set :: [Int] -> Pack +set = foldl setBit 0 + +inoshikacho :: Pack +inoshikacho = set [23, 27, 39] + +animals :: Pack +animals = set [7, 15, 19, 30, 35, 42] .|. inoshikacho + +blue :: Pack +blue = set [22, 37, 41] + +poetry :: Pack +poetry = set [2, 6, 10] + +ribbons = set [14, 18, 26, 41] .|. blue .|. poetry + +lights :: Pack +lights = set [3, 11, 31, 43, 47] + +pair :: Card -> Card -> Bool +pair card1 card2 = flower card1 == flower card2 + +cards :: [Card] +cards = map Card [0..47] diff --git a/KoiKoi.hs b/KoiKoi.hs new file mode 100644 index 0000000..248b08c --- /dev/null +++ b/KoiKoi.hs @@ -0,0 +1,15 @@ +module KoiKoi where + +import CCard + +data Player = Player { + hand :: Pack + , captured :: Pack + } + +data State = State { + players :: (Player, Player) + , river :: Pack + , deck :: [ Card ] + , turn :: Bool + }