52700.fb2 Учебник по Haskell - читать онлайн бесплатно полную версию книги . Страница 324

Учебник по Haskell - читать онлайн бесплатно полную версию книги . Страница 324

type Vec2d = (GLfloat, GLfloat)

data Ball = Ball

{ ballPos :: Vec2d

, ballVel :: Vec2d

}

initBall = Ball (0, 0) (0, 0)

dt :: GLfloat

dt = 0.3

minVel = 10

main = do

initialize

openWindow (Size width height) [] Window

windowTitle $= title

Основные библиотеки | 293

clearColor $= Color4 1 1 1 1

ortho (-dw2) (dw2) (-dh2) (dh2) (-1) 1

ball <- newIORef initBall

windowCloseCallback $= exitWith ExitSuccess

windowSizeCallback

$= (\size -> viewport $= (Position 0 0, size))

loop ball

loop :: IORef Ball -> IO ()

loop ball = do

display ball

onMouse ball

sleep frameTime

loop ball

display ball = do

(px, py) <- ballPos <$> get ball

(vx, vy) <- ballVel <$> get ball

ball $= Ball (px + dt*vx, py + dt*vy) (vx, vy)

clear [ColorBuffer]

color black

line (-ow2) (-oh2) (-ow2) oh2

line (-ow2) oh2

ow2

oh2

line ow2

oh2

ow2

(-oh2)

line ow2

(-oh2)

(-ow2) (-oh2)

color red

circle px py 10

swapBuffers

where ow2 = w2 - 50

oh2 = h2 - 50

onMouse ball = do