|
- module Operations where
-
- import Control.Monad.State
- import System.Random (newStdGen, randoms)
- import Data.List
- import Data.Ord
-
- import Card
- import Skat
- import Pile
- import Player
- import Utils (shuffle)
-
- compareRender :: Card -> Card -> Ordering
- compareRender (Card t1 c1) (Card t2 c2) = case compare c1 c2 of
- EQ -> compare t1 t2
- v -> v
-
- sortRender :: [Card] -> [Card]
- sortRender = sortBy compareRender
-
- turn :: Hand -> Skat (Int, Int)
- turn n = do
- table <- getp tableCards
- ps <- gets players
- let p = player ps n
- hand <- getp $ handCards n
- case length table of
- 0 -> play p >> turn (next n)
- 1 -> do
- modify $ setTurnColour (Just $ getColour $ head table)
- play p
- turn (next n)
- 2 -> play p >> turn (next n)
- 3 -> do
- w <- evaluateTable
- if length hand == 0 then countGame else turn w
-
- evaluateTable :: Skat Hand
- evaluateTable = do
- trumpCol <- gets trumpColour
- turnCol <- gets turnColour
- table <- getp tableCards
- ps <- gets players
- let winningCard = head $ sortCards trumpCol turnCol table
- Just winnerHand <- getp $ originOfCard winningCard
- let winner = player ps winnerHand
- modifyp $ cleanTable (team winner)
- modify $ setTurnColour Nothing
- return $ hand winner
-
- countGame :: Skat (Int, Int)
- countGame = getp count
-
- play :: Player p => p -> Skat Card
- play p = do
- table <- getp tableCards
- turnCol <- gets turnColour
- trump <- gets trumpColour
- hand <- getp $ handCards (hand p)
- let card = chooseCard p trump turnCol hand
- modifyp $ playCard card
- return card
-
- ---- TESTING VARS
-
- env :: SkatEnv
- env = SkatEnv piles Nothing Spades playersExamp
- where piles = distribute allCards
-
- playersExamp :: Players
- playersExamp = Players
- (PL $ Stupid Team Hand1)
- (PL $ Stupid Team Hand2)
- (PL $ Stupid Single Hand3)
-
- shuffledEnv :: IO SkatEnv
- shuffledEnv = do
- cards <- shuffleCards
- return $ SkatEnv (distribute cards) Nothing Spades playersExamp
|