summaryrefslogtreecommitdiff
path: root/Game.hs
diff options
context:
space:
mode:
Diffstat (limited to 'Game.hs')
-rw-r--r--Game.hs16
1 files changed, 15 insertions, 1 deletions
diff --git a/Game.hs b/Game.hs
index ad3d8bc..203b66f 100644
--- a/Game.hs
+++ b/Game.hs
@@ -17,6 +17,15 @@ data Game = Game { players :: [Player]
, discardPile :: [Card]
}
+-- | Begin new round of game.
+nextRound :: Int -> Game -> IO Game
+nextRound n game = do
+ if n == 0
+ then return game
+ else do
+ game' <- nextTurn game
+ nextRound (n - 1) game'
+
-- | Let current player take their turn.
nextTurn :: Game -> IO Game
nextTurn game@(Game plyrs pidx att dir stock disc) = do
@@ -34,12 +43,17 @@ nextTurn game@(Game plyrs pidx att dir stock disc) = do
let (left, right) = splitAt pidx plyrs
let plyrs' = left ++ [player'] ++ (tail right)
let pidx' = (pidx + 1) `mod` (length plyrs)
+ let game' = Game plyrs' pidx' att dir stock' disc'
+
case decision of
Nothing -> do
putStrLn $ (P.name player) ++ " draws " ++ (C.showCard $ head stock)
Just card -> do
putStrLn $ (P.name player) ++ " plays " ++ (C.showCard card)
- nextTurn (Game plyrs' pidx' att dir stock' disc')
+
+ if null $ P.cards player'
+ then return game'
+ else nextTurn game'
-- | Prompt player to play a card (or draw card and skip turn).
prompt :: Game -> IO (Maybe Card)