commit f7b3f21a831c73afbe5f7860a04b5ededc97b23a Author: Sasha Date: Mon Jan 22 22:49:34 2018 +0100 Start with a Card module and a stub of Game diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1422057 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +*.hi +*.o diff --git a/Card.hs b/Card.hs new file mode 100644 index 0000000..6773f4f --- /dev/null +++ b/Card.hs @@ -0,0 +1,118 @@ +module Card where + +data Flower = + Pine + | Plum + | Cherry + | Wisteria + | Iris + | Peony + | BushClover + | SusukiGrass + | Chrysanthemum + | Maple + | Willow + | Paulownia + deriving (Eq) + +data Ribbon = + Red + | Blue + | Poetry + +data Animal = + BushWarbler + | Cuckoo + | EightPlankBridge + | Butterflies + | Boar + | Geese + | SakeCup + | Deer + | Swallow + +data Light = + Crane + | CampCurtain + | FullMoon + | RainMan + | ChinesePhoenix + +data Value = + Plain + | Sand + | Lightning + | Ribbon Ribbon + | Animal Animal + | Light Light + +data Card = Card { + flower::Flower + , value::Value + } + +deck :: [ Card ] +deck = [ + Card Pine Plain + , Card Pine Plain + , Card Pine (Ribbon Poetry) + , Card Pine (Light Crane) + + , Card Plum Plain + , Card Plum Plain + , Card Plum (Ribbon Poetry) + , Card Plum (Animal BushWarbler) + + , Card Cherry Plain + , Card Cherry Plain + , Card Cherry (Ribbon Poetry) + , Card Cherry (Light CampCurtain) + + , Card Wisteria Plain + , Card Wisteria Plain + , Card Wisteria (Ribbon Red) + , Card Wisteria (Animal Cuckoo) + + , Card Iris Plain + , Card Iris Plain + , Card Iris (Ribbon Red) + , Card Iris (Animal EightPlankBridge) + + , Card Peony Plain + , Card Peony Plain + , Card Peony (Ribbon Blue) + , Card Peony (Animal Butterflies) + + , Card BushClover Plain + , Card BushClover Plain + , Card BushClover (Ribbon Red) + , Card BushClover (Animal Boar) + + , Card SusukiGrass Plain + , Card SusukiGrass Plain + , Card SusukiGrass (Animal Geese) + , Card SusukiGrass (Light FullMoon) + + , Card Chrysanthemum Plain + , Card Chrysanthemum Plain + , Card Chrysanthemum (Ribbon Blue) + , Card Chrysanthemum (Animal SakeCup) + + , Card Maple Plain + , Card Maple Plain + , Card Maple (Ribbon Blue) + , Card Maple (Animal Deer) + + , Card Willow Lightning + , Card Willow (Ribbon Red) + , Card Willow (Animal Swallow) + , Card Willow (Light RainMan) + + , Card Paulownia Plain + , Card Paulownia Plain + , Card Paulownia Sand + , Card Paulownia (Light ChinesePhoenix) + ] + +pair :: Card -> Card -> Bool +pair card1 card2 = flower card1 == flower card2 diff --git a/Game.hs b/Game.hs new file mode 100644 index 0000000..b0fedfc --- /dev/null +++ b/Game.hs @@ -0,0 +1,38 @@ +module Game where + +import Card + +data Yaku = + Junk Int + | Ribbons Int + | SpecialRibbons Int + | Animals Int + | InoShikaCho + | Sake Int + | Lights Int + +data Taken = Taken { + junk :: [ Flower ] + , animals :: [ Animal ] + , ribbons :: [ Ribbon ] + , lights :: [ Light ] + } + +data Player = Player { + hand :: [ Card ] + , taken :: Taken + } + +score :: Yaku -> Int +score (Junk n) = 1 + n +score (Ribbons n) = 1 + n +score (SpecialRibbons 0) = 3 +score (SpecialRibbons _) = 9 +score (Animals n) = 1 + n +score InoShikaCho = 5 +score (Sake 0) = 5 +score (Sake _) = 15 +score (Lights 0) = 5 +score (Lights 1) = 8 +score (Lights 2) = 10 +score (Lights 3) = 15