implement grand and null mechanics, fix some online player issues
This commit is contained in:
+20
-23
@@ -1,5 +1,5 @@
|
||||
module Skat.Matches (
|
||||
singleVsBots, pvp, pvpWithBidding, singleWithBidding
|
||||
singleVsBots, pvp, singleWithBidding
|
||||
) where
|
||||
|
||||
import Control.Monad.State
|
||||
@@ -12,11 +12,26 @@ import Skat.Player
|
||||
import Skat.Pile
|
||||
import Skat.Card
|
||||
import Skat.Preperation
|
||||
import Skat.Bidding
|
||||
|
||||
import Skat.AI.Rulebased
|
||||
import Skat.AI.Online
|
||||
import Skat.AI.Stupid
|
||||
|
||||
match :: PrepEnv -> IO ()
|
||||
match prepEnv = do
|
||||
maySkatEnv <- runReaderT runPreperation prepEnv
|
||||
case maySkatEnv of
|
||||
Just (sglPlayer, skatEnv) -> do
|
||||
finished <- execStateT 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"
|
||||
|
||||
-- | predefined card distribution for testing purposes
|
||||
cardDistr :: Piles
|
||||
cardDistr = emptyPiles hand1 hand2 hand3 skt
|
||||
@@ -38,8 +53,8 @@ singleVsBots comm = do
|
||||
(PL $ OnlineEnv Team Hand1 comm)
|
||||
(PL $ Stupid Team Hand2)
|
||||
(PL $ mkAIEnv Single Hand3 10)
|
||||
env = SkatEnv (distribute cards) Nothing Spades ps Hand1
|
||||
liftIO $ evalStateT (publishGameStart >> turn >>= publishGameResults) env
|
||||
env = SkatEnv (distribute cards) Nothing (Colour Spades Einfach) ps Hand1
|
||||
void $ evalStateT turn env
|
||||
|
||||
singleWithBidding :: Communicator c => c -> IO ()
|
||||
singleWithBidding comm = do
|
||||
@@ -51,24 +66,10 @@ singleWithBidding comm = do
|
||||
(BD $ NoBidder Hand2)
|
||||
(BD $ NoBidder Hand3)
|
||||
env = PrepEnv ps bs
|
||||
maySkatEnv <- liftIO $ runReaderT runPreperation env
|
||||
case maySkatEnv of
|
||||
Just skatEnv ->
|
||||
liftIO $ evalStateT (publishGameStart >> turn >>= publishGameResults) skatEnv
|
||||
Nothing -> putStrLn "No one wanted to play."
|
||||
match env
|
||||
|
||||
pvp :: Communicator c => c -> c -> c -> IO ()
|
||||
pvp comm1 comm2 comm3 = do
|
||||
cards <- shuffleCards
|
||||
let ps = Players
|
||||
(PL $ OnlineEnv Team Hand1 comm1)
|
||||
(PL $ OnlineEnv Team Hand2 comm2)
|
||||
(PL $ OnlineEnv Team Hand3 comm3)
|
||||
env = SkatEnv (distribute cards) Nothing Spades ps Hand1
|
||||
liftIO $ evalStateT (publishGameStart >> turn >>= publishGameResults) env
|
||||
|
||||
pvpWithBidding :: Communicator c => c -> c -> c -> IO ()
|
||||
pvpWithBidding comm1 comm2 comm3 = do
|
||||
cards <- shuffleCards
|
||||
let ps = distribute cards
|
||||
h1 = map toCard $ handCards Hand1 ps
|
||||
@@ -79,8 +80,4 @@ pvpWithBidding comm1 comm2 comm3 = do
|
||||
(BD $ PrepOnline Hand2 comm2 $ h2)
|
||||
(BD $ PrepOnline Hand3 comm3 $ h3)
|
||||
env = PrepEnv ps bs
|
||||
maySkatEnv <- liftIO $ runReaderT runPreperation env
|
||||
case maySkatEnv of
|
||||
Just skatEnv ->
|
||||
liftIO $ evalStateT (publishGameStart >> turn >>= publishGameResults) skatEnv
|
||||
Nothing -> putStrLn "No one wanted to play."
|
||||
match env
|
||||
|
||||
Reference in New Issue
Block a user