summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrederick Yin <fkfd@fkfd.me>2023-01-07 20:29:57 +0800
committerFrederick Yin <fkfd@fkfd.me>2023-01-07 20:29:57 +0800
commitb881871420b96553037af6790191ff91b3bcdf82 (patch)
treeef27a9f48ad43a26722db18fed1794d04b4b2df4
parent81ea0f259a49d1a66374afe747334d96eee34b6a (diff)
Rudimentary Game.advanceGame
-rw-r--r--Game.hs8
-rw-r--r--Main.hs10
2 files changed, 14 insertions, 4 deletions
diff --git a/Game.hs b/Game.hs
index 6912ea4..71c6298 100644
--- a/Game.hs
+++ b/Game.hs
@@ -17,6 +17,14 @@ data Game = Game { players :: [Player]
, discardPile :: [Card]
}
+-- | Advance game state.
+advanceGame :: Game -> IO Game
+advanceGame game@(Game plyrs pidx att dir stock disc) = do
+ cardToPlay <- prompt game
+ let newPidx = (pidx + 1) `mod` (length plyrs)
+ advanceGame (Game plyrs newPidx att dir stock disc)
+
+-- | Prompt player to play a card (or draw card and skip turn).
prompt :: Game -> IO (Maybe Card)
prompt game@(Game plyrs pidx att _ _ _) = do
let player = plyrs !! pidx
diff --git a/Main.hs b/Main.hs
index c18b780..ab0d00e 100644
--- a/Main.hs
+++ b/Main.hs
@@ -10,6 +10,7 @@ import Game (Game(..),
discardPile,
prompt,
dealCards,
+ advanceGame,
)
import Player (Player(..))
import qualified Player as P
@@ -18,8 +19,8 @@ import qualified Card as C
main :: IO ()
main = do
- gen <- getStdGen
- let stock = shuffle gen $ fullDecks 2
+ shuffleGen <- getStdGen
+ let stock = shuffle shuffleGen $ fullDecks 2
let discard = []
let defaultPlayers = [ Player "Alice" 0 []
, Player "Bob" 0 []
@@ -32,5 +33,6 @@ main = do
, stockPile = stock
, discardPile = discard
}
- card <- prompt $ dealCards 6 game
- print card
+
+ advanceGame $ dealCards 6 game
+ print ()