Put Mana into its own module
This commit is contained in:
parent
10157dcade
commit
0571b86640
2 changed files with 43 additions and 36 deletions
37
Magic.hs
37
Magic.hs
|
@ -1,41 +1,6 @@
|
|||
module Magic where
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
-- Mana
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
data Color = Colorless
|
||||
| Black
|
||||
| White
|
||||
| Red
|
||||
| Blue
|
||||
| Green
|
||||
deriving (Show, Eq)
|
||||
|
||||
data Mana = Mana Int Color
|
||||
deriving (Show, Eq)
|
||||
|
||||
data Cost = Cost [Mana]
|
||||
deriving (Show, Eq)
|
||||
|
||||
class ManaCost a where
|
||||
converted :: a -> Int
|
||||
|
||||
instance ManaCost Cost where
|
||||
converted (Cost []) = 0
|
||||
converted (Cost cost) = (foldl (\t (Mana x _) -> t + x) 0) cost
|
||||
|
||||
color :: Color -> Cost -> Int
|
||||
color c (Cost cost) = converted (Cost (filter (\(Mana _ col) -> col == c) cost))
|
||||
|
||||
pretty :: Cost -> String
|
||||
pretty c = concat ( [show (color Colorless c)
|
||||
, replicate (color Black c) 'B'
|
||||
, replicate (color White c) 'W'
|
||||
, replicate (color Red c) 'R'
|
||||
, replicate (color Blue c) 'U'
|
||||
, replicate (color Green c) 'G'
|
||||
])
|
||||
import Mana
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
-- Cards
|
||||
|
|
42
Mana.hs
Normal file
42
Mana.hs
Normal file
|
@ -0,0 +1,42 @@
|
|||
module Mana where
|
||||
|
||||
data Color = Colorless
|
||||
| Black
|
||||
| White
|
||||
| Red
|
||||
| Blue
|
||||
| Green
|
||||
deriving (Show, Eq)
|
||||
|
||||
data Mana = Mana { amount :: Int
|
||||
, color :: Color
|
||||
} deriving (Show, Eq)
|
||||
|
||||
data Cost = Cost [Mana]
|
||||
deriving (Eq)
|
||||
|
||||
instance Show Cost where
|
||||
show c = pretty c
|
||||
|
||||
class ManaCost a where
|
||||
converted :: a -> Int
|
||||
|
||||
instance ManaCost Cost where
|
||||
converted (Cost []) = 0
|
||||
converted (Cost cost) = (foldl (\t (Mana x _) -> t + x) 0) cost
|
||||
|
||||
pretty :: Cost -> String
|
||||
pretty c = do
|
||||
let filtered c (Cost cost) = converted $ Cost $ filter (\x -> color x == c) cost
|
||||
let colored = concat [ replicate (filtered Black c) 'B'
|
||||
, replicate (filtered White c) 'W'
|
||||
, replicate (filtered Red c) 'R'
|
||||
, replicate (filtered Blue c) 'U'
|
||||
, replicate (filtered Green c) 'G'
|
||||
]
|
||||
let colorless = filtered Colorless c
|
||||
if length colored > 0 && colorless == 0 then
|
||||
colored
|
||||
else
|
||||
(show colorless) ++ colored
|
||||
|
Loading…
Reference in a new issue