send bidding log to every bidder
This commit is contained in:
+28
-6
@@ -32,6 +32,10 @@ class Bidder a where
|
||||
askHand :: MonadIO m => a -> Bid -> m Bool
|
||||
askSkat :: MonadIO m => a -> Bid -> [Card] -> m [Card]
|
||||
toPlayer :: a -> Team -> PL
|
||||
onBid :: MonadIO m => a -> Maybe Bid -> Hand -> Hand -> m ()
|
||||
onBid _ _ _ _ = return ()
|
||||
onResponse :: MonadIO m => a -> Bool -> Hand -> Hand -> m ()
|
||||
onResponse _ _ _ _ = return ()
|
||||
onGame :: MonadIO m => a -> Game -> Hand -> m ()
|
||||
onGame _ _ _ = return ()
|
||||
onResult :: MonadIO m => a -> Result -> m ()
|
||||
@@ -54,6 +58,8 @@ instance Bidder BD where
|
||||
onStart (BD b) = onStart b
|
||||
onGame (BD b) = onGame b
|
||||
onResult (BD b) = onResult b
|
||||
onBid (BD b) = onBid b
|
||||
onResponse (BD b) = onResponse b
|
||||
|
||||
data Bidders = Bidders BD BD BD
|
||||
deriving Show
|
||||
@@ -79,6 +85,7 @@ runPreperation = do
|
||||
(finalWinner, finalBid) <- runBidding bid (bidder bds Hand3) (bidder bds winner)
|
||||
if finalBid == 0 then do
|
||||
bid <- askBid (bidder bds finalWinner) finalWinner 0
|
||||
publishBid bid finalWinner finalWinner
|
||||
case bid of
|
||||
Just val -> (Just . (finalWinner,)) <$> initGame finalWinner val
|
||||
Nothing -> return Nothing
|
||||
@@ -90,11 +97,17 @@ runBidding startingBid reizer gereizter = do
|
||||
case first of
|
||||
Just val
|
||||
| val > startingBid -> do
|
||||
publishBid first (hand reizer) (hand gereizter)
|
||||
response <- askResponse gereizter (hand reizer) val
|
||||
publishResponse response (hand reizer) (hand gereizter)
|
||||
if response then runBidding val reizer gereizter
|
||||
else return (hand reizer, val)
|
||||
| otherwise -> return (hand gereizter, startingBid)
|
||||
Nothing -> return (hand gereizter, startingBid)
|
||||
| otherwise -> do
|
||||
publishBid Nothing (hand reizer) (hand gereizter)
|
||||
return (hand gereizter, startingBid)
|
||||
Nothing -> do
|
||||
publishBid Nothing (hand reizer) (hand gereizter)
|
||||
return (hand gereizter, startingBid)
|
||||
|
||||
initGame :: Hand -> Bid -> Preperation SkatEnv
|
||||
initGame single bid = do
|
||||
@@ -139,8 +152,17 @@ publishGameResults res bidders = do
|
||||
onResult (bidder bidders Hand3) res
|
||||
|
||||
publishGameStart :: Game -> Hand -> Preperation ()
|
||||
publishGameStart game sglPlayer = do
|
||||
publishGameStart game sglPlayer = mapBidders (\b -> onGame b game sglPlayer)
|
||||
|
||||
publishBid :: Maybe Bid -> Hand -> Hand -> Preperation ()
|
||||
publishBid bid reizer gereizter = mapBidders (\b -> onBid b bid reizer gereizter)
|
||||
|
||||
publishResponse :: Bool -> Hand -> Hand -> Preperation ()
|
||||
publishResponse response reizer gereizter = mapBidders (\b -> onResponse b response reizer gereizter)
|
||||
|
||||
mapBidders :: (BD -> Preperation ()) -> Preperation ()
|
||||
mapBidders f = do
|
||||
bds <- asks bidders
|
||||
onGame (bidder bds Hand1) game sglPlayer
|
||||
onGame (bidder bds Hand2) game sglPlayer
|
||||
onGame (bidder bds Hand3) game sglPlayer
|
||||
f (bidder bds Hand1)
|
||||
f (bidder bds Hand2)
|
||||
f (bidder bds Hand3)
|
||||
|
||||
Reference in New Issue
Block a user