track every trick, return detailed match information

This commit is contained in:
2020-04-01 01:31:16 +02:00
parent be52a008df
commit a7824bebea
6 changed files with 39 additions and 14 deletions
+14 -7
View File
@@ -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