diff options
-rw-r--r-- | Color.hs | 13 | ||||
-rw-r--r-- | Game.hs | 2 | ||||
-rw-r--r-- | Player.hs | 14 |
3 files changed, 25 insertions, 4 deletions
diff --git a/Color.hs b/Color.hs new file mode 100644 index 0000000..1d63fcd --- /dev/null +++ b/Color.hs @@ -0,0 +1,13 @@ +module Color where + +red :: String -> String +red s = "\x001b[31m" ++ s ++ "\x001b[0m" + +green :: String -> String +green s = "\x001b[32m" ++ s ++ "\x001b[0m" + +yellow :: String -> String +yellow s = "\x001b[33m" ++ s ++ "\x001b[0m" + +blue :: String -> String +blue s = "\x001b[34m" ++ s ++ "\x001b[0m" @@ -33,7 +33,7 @@ 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 + putStrLn $ P.showCards player prev putStrLn $ "Current attack: " ++ show att putStrLn $ "Prev card: " ++ C.showCard prev @@ -3,6 +3,7 @@ module Player where import qualified Data.List as L import Card (Card) import qualified Card as C +import qualified Color data Player = Player { name :: String , penalty :: Integer @@ -24,6 +25,13 @@ 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 -showCards (Player _ _ cs) = - unlines $ zipWith (\i c -> (show i) ++ ". " ++ C.showCard c) [1..] cs +showCards :: Player -> Card -> String +showCards (Player _ _ cs) prev = + unlines $ zipWith joinAndColorize [1..] cs + where joinAndColorize n c = + if C.isValid prev c + then if C.isSpecial c + then Color.green $ join n c + else join n c + else Color.red $ join n c + join n c = (show n) ++ ". " ++ (C.showCard c) |