summaryrefslogtreecommitdiff
path: root/Game.hs
diff options
context:
space:
mode:
Diffstat (limited to 'Game.hs')
-rw-r--r--Game.hs18
1 files changed, 13 insertions, 5 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