module Main where
import System.IO
import Text.Printf
import Options.Applicative
import Data.Semigroup ((<>))
import HangmanAscii.Game
import HangmanAscii.Database
import Paths_HangmanAscii
data Args = Args
{ dbfile :: String
, skill :: String
, category :: String
}
sample :: Parser Args
sample = Args
<$> strOption
( long "dbfile"
<> help "Text file, one word per line"
<> value ""
<> metavar "FILENAME" )
<*> strOption
( long "skill"
<> short 's'
<> help "easy, medium, hard."
<> showDefault
<> value "medium"
<> metavar "SKILL" )
<*> strOption
( long "category"
<> short 'c'
<> help ("Categories: all, " ++ conCat ++ ".")
<> showDefault
<> value "fruites"
<> metavar "SKILL" )
parseArgs :: IO Args
parseArgs = execParser opts
where
opts = info (sample <**> helper) (progDesc "Hangman game")
loadWords :: String -> String -> IO [String]
loadWords "" category = return $ getWords category
loadWords fn _ = fmap lines $ readFile fn
getSkill :: String -> Skill
getSkill "easy" = Easy
getSkill "medium" = Medium
getSkill "hard" = Hard
main :: IO ()
main = parseArgs >>= go
where
go :: Args -> IO ()
go (Args dbfile skl category) = do
words <- loadWords dbfile category
printf "Total words: %d\r\n" (length words)
hangman category words (getSkill skl)