|
- module Skat where
-
- import Card
- import Control.Monad.State
- import Control.Monad.Reader
- import Data.List
-
- data SkatEnv = SkatEnv { cards :: [CardS]
- , turnColour :: Maybe Colour
- , trumpColour :: Colour
- , players :: Players }
- deriving Show
-
- type Skat = StateT SkatEnv IO
-
- table :: Skat [Card]
- table = gets cards >>= return . foldr f []
- where f (CardS c Table _) cs = c : cs
- f _ cs = cs
-
- tableS :: Skat [CardS]
- tableS = gets cards >>= return . foldr f []
- where f c@(CardS _ Table _) cs = c : cs
- f _ cs = cs
-
- move :: Card -> Space -> Skat ()
- move card sp = do
- cs <- gets cards
- let cs' = moveCard card sp cs
- modify (\env -> env { cards = cs' })
-
- cardsAt :: Space -> Skat [Card]
- cardsAt sp = gets cards >>= return . findCards sp
-
- setTurnColour :: Maybe Colour -> SkatEnv -> SkatEnv
- setTurnColour col sk = sk { turnColour = col }
|