Advertisement
Guest User

Untitled

a guest
Aug 2nd, 2015
225
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.65 KB | None | 0 0
  1. import Data.IORef
  2.  
  3. data Scene = Scene { keyboardHandler :: Char -> IO ()
  4. , stepHandler :: IO ()
  5. , drawHandler :: IO ()
  6. }
  7.  
  8. mkTitle :: IORef Scene -> IO Scene
  9. mkTitle transit = do
  10. x <- newIORef 0
  11. return $ Scene { keyboardHandler = \key -> if key == 'e' -- Enter
  12. then do
  13. let game = mkGame x transit
  14. writeIORef transit game
  15. else return ()
  16. , stepHandler = modifyIORef x (+1)
  17. , drawHandler = print =<< readIORef x -- Graphics.drawCircle(x, h)
  18. }
  19.  
  20. mkGame :: IORef Int -> IORef Scene -> Scene
  21. mkGame x transit = do
  22. Scene { keyboardHandler = \key -> if key == 'c' -- ESC
  23. then do
  24. title <- mkTitle transit
  25. writeIORef transit title
  26. else return ()
  27. , stepHandler = modifyIORef x (subtract 1)
  28. , drawHandler = print =<< readIORef x -- Graphics.drawCircle(x, h)
  29. }
  30.  
  31. main = do
  32. let dummy = Scene (const (return ())) (return ()) (return ())
  33. sceneRef <- newIORef dummy
  34. title <- mkTitle sceneRef
  35. writeIORef sceneRef title
  36. loop sceneRef
  37. where
  38. loop sceneRef = do
  39. -- c <- getChar
  40. scene <- readIORef sceneRef
  41. -- keyboardHandler scene c
  42. stepHandler scene
  43. drawHandler scene
  44. loop sceneRef
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement