summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrederick Yin <fkfd@fkfd.me>2023-01-08 20:09:37 +0800
committerFrederick Yin <fkfd@fkfd.me>2023-01-08 20:09:37 +0800
commit1e336424e1c661303fed2a4d4e58915bf267bb55 (patch)
tree1b6fb222bb31be47c6d98fa754d302f519ee2fa0
parent988f9eaf9b1c3e0d56f23bf4b698601adc2e3b9f (diff)
Handle 2 and 3
-rw-r--r--Game.hs18
-rw-r--r--Main.hs2
-rw-r--r--Player.hs6
3 files changed, 17 insertions, 9 deletions
diff --git a/Game.hs b/Game.hs
index c55acf5..7c5c8ba 100644
--- a/Game.hs
+++ b/Game.hs
@@ -10,7 +10,7 @@ import qualified Card as C
data Game = Game { players :: [Player]
, playerIdx :: Int
- , attack :: Integer
+ , attack :: Int
, direction :: Int -- ^ 1 when CCW, -1 when CW
, stockPile :: [Card]
, discardPile :: [Card]
@@ -29,26 +29,34 @@ nextRound n game = do
nextTurn :: Game -> IO Game
nextTurn game@(Game plyrs pidx att dir stock disc) = do
putStrLn $ replicate 80 '-'
+ putStrLn $ "Current attack: " ++ show att
decision <- prompt game
+
let player = plyrs !! pidx
let player' = case decision of
- Nothing -> player `draw` (head stock)
+ Nothing -> player `draw` (take att stock)
Just card -> player `shed` card
+ let (left, right) = splitAt pidx plyrs
+ let plyrs' = left ++ [player'] ++ (tail right)
+
let stock' = case decision of
Nothing -> tail stock
Just _ -> stock
let disc' = case decision of
Nothing -> disc
Just card -> card:disc
- let (left, right) = splitAt pidx plyrs
- let plyrs' = left ++ [player'] ++ (tail right)
+
+ let att' = case decision of
+ Just (Card _ C.Two) -> if att == 1 then 2 else att + 2
+ Just (Card _ C.Three) -> if att == 1 then 3 else att + 3
+ _ -> 1
let dir' = case decision of
Just (Card _ C.Queen) -> negate dir
_ -> dir
let pidx' = case decision of
Just (Card _ C.Jack) -> (pidx + 2 * dir') `mod` length plyrs
_ -> (pidx + dir') `mod` length plyrs
- let game' = Game plyrs' pidx' att dir' stock' disc'
+ let game' = Game plyrs' pidx' att' dir' stock' disc'
case decision of
Nothing -> do
diff --git a/Main.hs b/Main.hs
index 9cf55fe..1992399 100644
--- a/Main.hs
+++ b/Main.hs
@@ -27,7 +27,7 @@ main = do
]
let game = Game { players = defaultPlayers
, playerIdx = 0
- , attack = 0
+ , attack = 1
, direction = 1
, stockPile = stock
, discardPile = discard
diff --git a/Player.hs b/Player.hs
index ec0dbcc..0b57c7e 100644
--- a/Player.hs
+++ b/Player.hs
@@ -13,9 +13,9 @@ data Player = Player { name :: String
shed :: Player -> Card -> Player
shed (Player n p cs) c = Player n p $ L.delete c cs
--- | Same player after drawing card specified.
-draw :: Player -> Card -> Player
-draw (Player n p cs) c = Player n p $ L.sort (c:cs)
+-- | Same player after drawing cards specified.
+draw :: Player -> [Card] -> Player
+draw (Player n p cs) cs' = Player n p $ L.sort (cs' ++ cs)
-- | Show player's cards, e.g. "1. Spade 2"
showCards :: Player -> String