diff options
Diffstat (limited to 'Game.hs')
-rw-r--r-- | Game.hs | 18 |
1 files changed, 13 insertions, 5 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 |