tateti-tateti-0.1.0.0: src/OtherScreens.hs
{-# LANGUAGE LambdaCase #-}
module OtherScreens where
import Control.Monad.Trans
import UI.NCurses
import Types
import Util
-- | Select screen types
data Choice = CPlayer Player
| CRandom
deriving Show
whoPlaysLoop :: Window -> Colors -> Choice -> Game (Maybe Choice)
whoPlaysLoop w colors who = do
lift . updateWindow w $ do
moveCursor 10 4
drawString "Who should play?"
uncurry moveCursor . getPos $ CPlayer X
setColor . colors . color $ X
drawString "X"
uncurry moveCursor . getPos $ CPlayer O
setColor . colors . color $ O
drawString "O"
uncurry moveCursor . getPos $ CRandom
setColor . colors . color $ Draw
drawString "Random"
setColor defaultColorID
uncurry moveCursor $ getPos who
lift render
parseInput w >>= \case
Movement KLeft -> whoPlaysLoop w colors $ toLeft who
Movement KRight -> whoPlaysLoop w colors $ toRight who
Select -> return $ Just who
Quit -> return Nothing
_ -> whoPlaysLoop w colors who
where
toLeft (CPlayer X) = CPlayer X
toLeft (CPlayer O) = CPlayer X
toLeft CRandom = CPlayer O
toRight (CPlayer X) = CPlayer O
toRight (CPlayer O) = CRandom
toRight CRandom = CRandom
getPos (CPlayer X) = (12, 6)
getPos (CPlayer O) = (12, 8)
getPos CRandom = (12, 10)
endGameLoop :: Winner -> Window -> Colors -> Game ()
endGameLoop winner w colors = do
lift . updateWindow w $ do
moveCursor 0 2
setColor . colors . color $ winner
drawString $ case winner of
Player pl -> show pl ++ " wins!"
Draw -> "Draw lolz..."
lift render
parseInput w >>= \case
Quit -> return ()
_ -> endGameLoop winner w colors