summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrederick Yin <fkfd@fkfd.me>2023-01-19 11:52:19 +0800
committerFrederick Yin <fkfd@fkfd.me>2023-01-19 11:52:19 +0800
commit84ee16536eabd4f637912d25643184cbcc118092 (patch)
tree38a80b91e2d3e23dff13cdd7739e015dc4102f4f
parent018486dde08e85cd52d12bac845f0cc5d199e20c (diff)
Parse arguments with optparse-applicative
-rw-r--r--Main.hs46
1 files changed, 39 insertions, 7 deletions
diff --git a/Main.hs b/Main.hs
index 1244051..1b4996f 100644
--- a/Main.hs
+++ b/Main.hs
@@ -1,12 +1,44 @@
+import Options.Applicative
import Game (Game(..), Setup(..), beginGame)
+setup :: Parser Setup
+setup = Setup
+ <$> option auto
+ ( short 'n'
+ <> long "player-number"
+ <> metavar "n"
+ <> value 4
+ <> help "n players, n must be larger than 2 (default: 4)"
+ )
+ <*> option auto
+ ( short 'r'
+ <> long "rounds"
+ <> metavar "r"
+ <> value 1
+ <> help "play r rounds, r must be at least 1 (default: 1)"
+ )
+ <*> option auto
+ ( short 'd'
+ <> long "decks"
+ <> metavar "d"
+ <> value 2
+ <> help "use d decks 52 cards each, d must be at least 2 (default: 2)"
+ )
+ <*> option auto
+ ( short 'c'
+ <> long "initial-cards"
+ <> metavar "c"
+ <> value 5
+ <> help "deal c cards per player, c must be at least 2 (default: 5)"
+ )
+ <*> switch
+ ( short 'a'
+ <> long "auto"
+ <> help "run in demo mode"
+ )
+
main :: IO ()
main = do
- let setup = Setup { playerN = 3
- , roundN = 3
- , deckN = 2
- , cardN = 6
- , autoMode = True
- }
- beginGame setup
+ let opts = info (setup <**> helper) (fullDesc <> progDesc "One Card")
+ beginGame =<< execParser opts
return ()