Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import Data.IORef
- data Scene = Scene { keyboardHandler :: Char -> IO ()
- , stepHandler :: IO ()
- , drawHandler :: IO ()
- }
- mkTitle :: IORef Scene -> IO Scene
- mkTitle transit = do
- x <- newIORef 0
- return $ Scene { keyboardHandler = \key -> if key == 'e' -- Enter
- then do
- let game = mkGame x transit
- writeIORef transit game
- else return ()
- , stepHandler = modifyIORef x (+1)
- , drawHandler = print =<< readIORef x -- Graphics.drawCircle(x, h)
- }
- mkGame :: IORef Int -> IORef Scene -> Scene
- mkGame x transit = do
- Scene { keyboardHandler = \key -> if key == 'c' -- ESC
- then do
- title <- mkTitle transit
- writeIORef transit title
- else return ()
- , stepHandler = modifyIORef x (subtract 1)
- , drawHandler = print =<< readIORef x -- Graphics.drawCircle(x, h)
- }
- main = do
- let dummy = Scene (const (return ())) (return ()) (return ())
- sceneRef <- newIORef dummy
- title <- mkTitle sceneRef
- writeIORef sceneRef title
- loop sceneRef
- where
- loop sceneRef = do
- -- c <- getChar
- scene <- readIORef sceneRef
- -- keyboardHandler scene c
- stepHandler scene
- drawHandler scene
- loop sceneRef
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement