|
- {-# LANGUAGE ExistentialQuantification #-}
-
- module Player where
-
- import Card
- import Pile
-
- class Player p where
- team :: p -> Team
- hand :: p -> Hand
- chooseCard :: p -> Colour -> Maybe Colour -> [Card] -> Card
-
- data Stupid = Stupid { getTeam :: Team
- , getHand :: Hand }
- deriving Show
-
- instance Player Stupid where
- team = getTeam
- hand = getHand
- chooseCard p trumpCol turnCol hand = head possible
- where possible = filter (isAllowed trumpCol turnCol hand) hand
-
- data PL = forall p. (Show p, Player p) => PL p
-
- instance Show PL where
- show (PL p) = show p
-
- instance Player PL where
- team (PL p) = team p
- hand (PL p) = hand p
- chooseCard (PL p) = chooseCard p
-
- data Players = Players PL PL PL
- deriving Show
-
- player :: Players -> Hand -> PL
- player (Players p _ _) Hand1 = p
- player (Players _ p _) Hand2 = p
- player (Players _ _ p) Hand3 = p
-
- --playersFromTable :: Players -> [CardS] -> [Player]
- --playersFromTable ps = map (player ps . playerOfHand . getOwner)
|