From cf97c134b2bff6672171ac05d05b399085f9ad3c Mon Sep 17 00:00:00 2001 From: Frederick Yin Date: Mon, 9 Jan 2023 15:24:25 +0800 Subject: Allow regular card once attack is done; Auto mode --- Game.hs | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'Game.hs') diff --git a/Game.hs b/Game.hs index 275b951..ea327a9 100644 --- a/Game.hs +++ b/Game.hs @@ -33,13 +33,14 @@ beginTurn game@(Game plyrs pidx att dir prev stock disc) = do putStrLn $ replicate 80 '-' putStrLn $ P.name player ++ "'s turn (input 0 to skip turn and draw card)" - putStrLn $ P.showCards player prev + putStrLn $ P.showCards player prev att putStrLn $ "Stock: " ++ (show $ length stock) ++ ", Discard: " ++ (show $ length disc) putStrLn $ "Current attack: " ++ show att putStrLn $ "Prev card: " ++ C.showCard prev - decision <- prompt game + -- decision <- prompt game + let decision = auto game game' <- case decision of Nothing -> drawAndSkip game Just card -> shedAndContinue card game @@ -112,12 +113,20 @@ prompt game@(Game plyrs pidx att _ prev _ _) = do prompt game else do let card = cards !! cardIdx - if C.isValid prev card + if C.isValid prev att card then return $ Just card else do putStrLn "You cannot play this card, try again" prompt game +-- | Make an automated decision to draw/shed card. +auto :: Game -> Maybe Card +auto game@(Game plyrs pidx att _ prev _ _) = + if null validCards + then Nothing + else Just (head validCards) + where validCards = filter (C.isValid prev att) $ P.cards (plyrs !! pidx) + -- | Deal c cards to each player in game. dealCards :: Int -> Game -> Game dealCards c game@(Game plyrs _ _ _ _ stock disc) -- cgit v1.2.3