| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- import sdl2
- import ./player
- import ./ball
- import ./cons
- import ./scores
- import ./font
- import ./collision
- type
- Pong* = ref object
- isRun: bool
- human, robot: Player
- ball: Ball
- renderer:RendererPtr
- scores: Scores
- collision:Collision
- proc NewPong*(font:Font, renderer:RendererPtr): Pong =
- var
- human=NewHuman(cons.PaddleWidth, "user", renderer)
- robot=NewRobot(cons.WindowWidth - 2 * cons.PaddleWidth, renderer)
- scores= NewScores(font)
- ball=NewBall(renderer, scores)
- Pong(
- isRun: true,
- renderer:renderer,
- human: human,
- robot: robot,
- ball: ball,
- scores: scores,
- collision:NewCollision(human, robot, ball)
- )
- proc keyDown*(sf:var Pong, dt:float32)=
- sf.human.Up(dt)
- proc keyUp*(sf:var Pong, dt:float32)=
- sf.human.Down(dt)
- proc stopHuman*(sf: var Pong)=
- sf.human.Stop()
- proc update*(sf:var Pong, dt: float32) =
- sf.collision.update()
- sf.human.update(dt)
- sf.robot.update(dt, sf.ball.y)
- let
- distRobot = (sf.ball.y + BallRadius) - (sf.robot.y + PaddleHeight / 2)
- req = BallUpdateReq(
- dTime:dt,
- distRobot:distRobot,
- isColHuman:sf.collision.isCollisionHuman,
- isColRobot:sf.collision.isCollisionRobot,
- humanX:sf.human.x,
- robotX:sf.robot.x
- )
- sf.ball.update(req)
- proc draw*(sf:var Pong) =
- sf.renderer.setDrawColor 0, 0, 0, 255 # black
- sf.renderer.clear()
- sf.human.draw()
- sf.robot.draw()
- sf.ball.draw()
- sf.scores.draw()
|