setgame-1.1: src/Set/Ascii.hs
{-# LANGUAGE NamedFieldPuns #-}
module Set.Ascii (cardLines) where
import Set.Card
-------------------------------------------------------------------------------
-- Card drawing functions -----------------------------------------------------
-------------------------------------------------------------------------------
-- | 'selectArt' returns the ASCII art representation of the lines for
-- a given 'Shading' and 'Symbol'.
selectArt :: Shading -> Symbol -> [String]
selectArt Open Diamond = [" "
," ╱╲ "
,"╱ ╲"
,"‾‾‾‾"]
selectArt Striped Diamond = [" "
," ╱╲ "
,"╱╱╲╲"
,"‾‾‾‾"]
selectArt Solid Diamond = [" "
," ╱╲ "
,"╱╳╳╲"
,"‾‾‾‾"]
selectArt Open Squiggle = ["___ "
,"╲ ╲"
,"╱ ╱"
,"‾‾‾ "]
selectArt Striped Squiggle = ["___ "
,"╲╲╲╲"
,"╱╱╱╱"
,"‾‾‾ "]
selectArt Solid Squiggle = ["___ "
,"╲╳╳╲"
,"╱╳╳╱"
,"‾‾‾ "]
selectArt Open Oval = [" __ "
,"╱ ╲"
,"╲ ╱"
," ‾‾ "]
selectArt Striped Oval = [" __ "
,"╱╱╲╲"
,"╲╲╱╱"
," ‾‾ "]
selectArt Solid Oval = [" __ "
,"╱╳╳╲"
,"╲╳╳╱"
," ‾‾ "]
-- | Compute the ASCII lines and color of a given card
cardLines :: Card -> (Color, [String])
cardLines Card {color, count, shading, symbol}
= (color, map (duplicate count) (selectArt shading symbol))
-- | 'duplicate' pads a 'String' to fit neatly, centered in a 14-character
-- region.
duplicate :: Count -> String -> String
duplicate One x = " " ++ x ++ " "
duplicate Two x = " " ++ x ++ " " ++ x ++ " "
duplicate Three x = " " ++ x ++ " " ++ x ++ " " ++ x ++ " "