dovin-0.2: mtgtc/Main.hs
module Main where
import Dovin.V2
import Dovin.Prelude
import Dovin.Monad
import qualified MTGTC
import System.Exit (exitFailure, exitSuccess)
main = do
--let tape = "[s]ssr"
--let tape = "[p]fr"
--let tape = "crrffafafaffaffaaaaaaafaaaaaf[f]amamamc"
--let tape = "rrffafafaf[f]amamam"
let tape = "rrffaafaf[f]amam"
let tape = "rrffaaaaaaaaaaaffaaaaaaaaaaaafaaaaaaaaaaaafaaaaaaaaaaaffaaaaaaaaaffaaaaaf[f]amaaamaaamaaam"
--let tape = "[s]"
let (e, initialBoard, _) = runMonad emptyBoard (MTGTC.setup tape)
putStrLn . myFormatter $ initialBoard
_ <- foldM runCycle initialBoard [1..]
putStrLn "Done"
fixupFinalBoard = do
forCards (matchAttribute MTGTC.assassin) $
modifyCard cardStrengthModifier (mkStrength (-2, -2) <>)
runCycle :: Board -> Int -> IO Board
runCycle board n = do
let (e, newBoard, log) = runMonad board (MTGTC.stepCompute n)
case e of
Left "won game" -> do
let (e, finalBoard, log) = runMonad newBoard fixupFinalBoard
putStrLn ""
putStrLn . MTGTC.tapeFormatter2 $ finalBoard
exitSuccess
Left x -> putStrLn x >> exitFailure
Right _ -> do
putStrLn . myFormatter $ newBoard
-- putStrLn . myFormatter $ newBoard
-- forM_ log $ \step -> do
-- putStr $ show (view stepNumber step) <> ". "
-- putStr $ view stepLabel step
-- putStrLn . myFormatter . view stepState $ step
return newBoard
myFormatter =
MTGTC.stateFormatter
<> MTGTC.tapeFormatter2
-- <> cardFormatter "tape" (MTGTC.matchAny (map matchAttribute MTGTC.tapeTypes))