summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrederick Yin <fkfd@fkfd.me>2023-01-05 22:10:15 +0800
committerFrederick Yin <fkfd@fkfd.me>2023-01-05 22:10:15 +0800
commitba61f2b7363116f6530fc6c256b1ad97ef0e0861 (patch)
tree6c21bb93bc89f621e9a5ed25ae787d2fa0224344
parentacd9a60a2232cea6efceee64d1c442d19c52235d (diff)
Game.dealCards
-rw-r--r--Game.hs11
-rw-r--r--Main.hs9
2 files changed, 16 insertions, 4 deletions
diff --git a/Game.hs b/Game.hs
index 77b2e92..6912ea4 100644
--- a/Game.hs
+++ b/Game.hs
@@ -39,3 +39,14 @@ prompt game@(Game plyrs pidx att _ _ _) = do
putStrLn "This card does not exist, try again"
prompt game
else return $ Just (cards !! cardIdx)
+
+-- | Deal c cards to each player in game.
+dealCards :: Int -> Game -> Game
+dealCards c game@(Game plyrs _ _ _ stock disc)
+ | (length $ P.cards $ head plyrs) < c =
+ dealCards c game { players = newPlyrs, stockPile = newStock }
+ | otherwise = game
+ where newPlyrs = giveOneCardEach stock plyrs
+ newStock = drop c stock
+ giveOneCardEach =
+ zipWith (\card player -> player { P.cards = card:(P.cards player) })
diff --git a/Main.hs b/Main.hs
index 48726b7..c18b780 100644
--- a/Main.hs
+++ b/Main.hs
@@ -9,6 +9,7 @@ import Game (Game(..),
stockPile,
discardPile,
prompt,
+ dealCards,
)
import Player (Player(..))
import qualified Player as P
@@ -20,9 +21,9 @@ main = do
gen <- getStdGen
let stock = shuffle gen $ fullDecks 2
let discard = []
- let defaultPlayers = [ Player "Alice" 0 $ take 6 $ fullDecks 1
- , Player "Bob" 0 $ take 6 $ fullDecks 1
- , Player "Carol" 0 $ take 6 $ fullDecks 1
+ let defaultPlayers = [ Player "Alice" 0 []
+ , Player "Bob" 0 []
+ , Player "Carol" 0 []
]
let game = Game { players = defaultPlayers
, playerIdx = 0
@@ -31,5 +32,5 @@ main = do
, stockPile = stock
, discardPile = discard
}
- card <- prompt game
+ card <- prompt $ dealCards 6 game
print card