diff options
Diffstat (limited to 'Game.hs')
-rw-r--r-- | Game.hs | 16 |
1 files changed, 15 insertions, 1 deletions
@@ -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) |