|
|
|
@@ -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 |
|
|
|
|