Start with a Card module and a stub of Game

This commit is contained in:
Sasha 2018-01-22 22:49:34 +01:00
commit f7b3f21a83
3 changed files with 158 additions and 0 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
*.hi
*.o

118
Card.hs Normal file
View File

@ -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

38
Game.hs Normal file
View File

@ -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