Skat Engine und AI auf Haskell Basis
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

37 lignes
977B

  1. module Skat where
  2. import Card
  3. import Control.Monad.State
  4. import Control.Monad.Reader
  5. import Data.List
  6. data SkatEnv = SkatEnv { cards :: [CardS]
  7. , turnColour :: Maybe Colour
  8. , trumpColour :: Colour
  9. , players :: Players }
  10. deriving Show
  11. type Skat = StateT SkatEnv IO
  12. table :: Skat [Card]
  13. table = gets cards >>= return . foldr f []
  14. where f (CardS c Table _) cs = c : cs
  15. f _ cs = cs
  16. tableS :: Skat [CardS]
  17. tableS = gets cards >>= return . foldr f []
  18. where f c@(CardS _ Table _) cs = c : cs
  19. f _ cs = cs
  20. move :: Card -> Space -> Skat ()
  21. move card sp = do
  22. cs <- gets cards
  23. let cs' = moveCard card sp cs
  24. modify (\env -> env { cards = cs' })
  25. cardsAt :: Space -> Skat [Card]
  26. cardsAt sp = gets cards >>= return . findCards sp
  27. setTurnColour :: Maybe Colour -> SkatEnv -> SkatEnv
  28. setTurnColour col sk = sk { turnColour = col }