diff options
-rw-r--r-- | Game.hs | 18 | ||||
-rw-r--r-- | Main.hs | 2 | ||||
-rw-r--r-- | Player.hs | 6 |
3 files changed, 17 insertions, 9 deletions
@@ -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 @@ -27,7 +27,7 @@ main = do ] let game = Game { players = defaultPlayers , playerIdx = 0 - , attack = 0 + , attack = 1 , direction = 1 , stockPile = stock , discardPile = discard @@ -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 |