diff options
-rw-r--r-- | Game.hs | 18 |
1 files changed, 13 insertions, 5 deletions
@@ -2,7 +2,7 @@ module Game where import Data.Char (isDigit) import Control.Monad (when) -import System.Random (RandomGen) +import System.Random (RandomGen, newStdGen) import Player (Player, shed, draw) import qualified Player as P import Card (Card(..)) @@ -49,13 +49,21 @@ beginTurn game@(Game plyrs pidx att dir prev stock disc) = do -- | Game state after player draws card(s) and skips turn. drawAndSkip :: Game -> IO Game drawAndSkip game@(Game plyrs pidx att dir prev stock disc) = do + gen <- newStdGen + let stockLongEnough = if length stock < att + then stock ++ (C.shuffle gen stock) + else stock + let stock' = drop att stockLongEnough + let disc' = if length stock < att + then [] + else disc + let cardsToDraw = take att stockLongEnough let player = plyrs !! pidx - let player' = player `draw` (take att stock) + let player' = player `draw` cardsToDraw let plyrs' = P.update plyrs pidx player' let pidx' = (pidx + dir) `mod` length plyrs - let stock' = drop att stock - putStrLn $ (P.name player) ++ " draws " ++ (C.showCards $ take att stock) - return $ Game plyrs' pidx' att dir prev stock' disc + putStrLn $ (P.name player) ++ " draws " ++ (C.showCards cardsToDraw) + return $ Game plyrs' pidx' att dir prev stock' disc' -- | Game state after player sheds card. shedAndContinue :: Card -> Game -> IO Game |