diff options
Diffstat (limited to 'Game.hs')
-rw-r--r-- | Game.hs | 27 |
1 files changed, 14 insertions, 13 deletions
@@ -17,18 +17,18 @@ data Game = Game { players :: [Player] , discardPile :: [Card] } --- | Begin new round of game. -beginRounds :: Int -> Game -> IO Game -beginRounds n game = do - if n == 0 +-- | Begin `r` rounds of game. +beginRounds :: Int -> Bool -> Game -> IO Game +beginRounds r auto game = do + if r == 0 then return game else do - game' <- beginTurn game - beginRounds (n - 1) game' + game' <- beginTurn auto game + beginRounds (r - 1) auto game' -- | Let current player take their turn. -beginTurn :: Game -> IO Game -beginTurn game@(Game plyrs pidx att dir prev stock disc) = do +beginTurn :: Bool -> Game -> IO Game +beginTurn auto game@(Game plyrs pidx att dir prev stock disc) = do let player = plyrs !! pidx putStrLn $ replicate 80 '-' @@ -39,15 +39,16 @@ beginTurn game@(Game plyrs pidx att dir prev stock disc) = do putStrLn $ "Current attack: " ++ show att putStrLn $ "Prev card: " ++ C.showCard prev - -- decision <- prompt game - let decision = auto game + decision <- if auto + then return $ automate game + else prompt game game' <- case decision of Nothing -> drawAndSkip game Just card -> shedAndContinue card game if playerIdx game' == pidx -- shedAndContinue does this when player wins then return game' - else beginTurn game' + else beginTurn auto game' -- | Game state after player draws card(s) and skips turn. drawAndSkip :: Game -> IO Game @@ -120,8 +121,8 @@ prompt game@(Game plyrs pidx att _ prev _ _) = do prompt game -- | Make an automated decision to draw/shed card. -auto :: Game -> Maybe Card -auto game@(Game plyrs pidx att _ prev _ _) = +automate :: Game -> Maybe Card +automate game@(Game plyrs pidx att _ prev _ _) = if null validCards then Nothing else Just (head validCards) |