track every trick, return detailed match information
This commit is contained in:
+14
-7
@@ -1,5 +1,5 @@
|
||||
module Skat.Matches (
|
||||
singleVsBots, pvp, singleWithBidding
|
||||
singleVsBots, pvp, singleWithBidding, Match(..)
|
||||
) where
|
||||
|
||||
import Control.Monad.State
|
||||
@@ -18,19 +18,26 @@ import Skat.AI.Rulebased
|
||||
import Skat.AI.Online
|
||||
import Skat.AI.Stupid
|
||||
|
||||
match :: PrepEnv -> IO ()
|
||||
data Match = Match { matchPiles :: Piles
|
||||
, matchResult :: Result
|
||||
, matchTricks :: [Trick]
|
||||
, matchSingle :: Hand }
|
||||
deriving Show
|
||||
|
||||
match :: PrepEnv -> IO (Maybe Match)
|
||||
match prepEnv = do
|
||||
maySkatEnv <- runReaderT runPreperation prepEnv
|
||||
case maySkatEnv of
|
||||
Just (sglPlayer, skatEnv) -> do
|
||||
finished <- execStateT turn skatEnv
|
||||
(_, finished, tricks) <- runSkat turn skatEnv
|
||||
let res = getResults
|
||||
(game skatEnv)
|
||||
sglPlayer
|
||||
(Skat.piles skatEnv)
|
||||
(Skat.piles finished)
|
||||
publishGameResults res (bidders prepEnv)
|
||||
Nothing -> putStrLn "no one wanted to play"
|
||||
return $ Just $ Match (Skat.piles skatEnv) res tricks sglPlayer
|
||||
Nothing -> putStrLn "no one wanted to play" >> return Nothing
|
||||
|
||||
-- | predefined card distribution for testing purposes
|
||||
cardDistr :: Piles
|
||||
@@ -54,7 +61,7 @@ singleVsBots comm = do
|
||||
(PL $ Stupid Team Hand2)
|
||||
(PL $ mkAIEnv Single Hand3 10)
|
||||
env = SkatEnv (distribute cards) Nothing (Colour Spades Einfach) ps Hand1
|
||||
void $ evalStateT turn env
|
||||
void $ evalSkat turn env
|
||||
|
||||
singleWithBidding :: Communicator c => c -> IO ()
|
||||
singleWithBidding comm = do
|
||||
@@ -66,9 +73,9 @@ singleWithBidding comm = do
|
||||
(BD $ NoBidder Hand2)
|
||||
(BD $ NoBidder Hand3)
|
||||
env = PrepEnv ps bs
|
||||
match env
|
||||
void $ match env
|
||||
|
||||
pvp :: Communicator c => c -> c -> c -> IO ()
|
||||
pvp :: Communicator c => c -> c -> c -> IO (Maybe Match)
|
||||
pvp comm1 comm2 comm3 = do
|
||||
cards <- shuffleCards
|
||||
let ps = distribute cards
|
||||
|
||||
Reference in New Issue
Block a user