Ejemplo n.º 1
0
func newCanvas(canvasEl *dom.HTMLCanvasElement) *canvas {
	c := &canvas{canvasEl: canvasEl, event: make(chan string)}

	canvasEl.AddEventListener("keydown", false, func(event dom.Event) {
		c.handleKeyDown(event.(*dom.KeyboardEvent))
	})

	canvasEl.AddEventListener("keyup", false, func(event dom.Event) {
		c.handleKeyUp(event.(*dom.KeyboardEvent))
	})

	go func() {
		ticker := time.NewTicker(time.Duration(1000/animationFramesPerSecond) * time.Millisecond)
		for {
			<-ticker.C

			c.draw()

			if c.checkLost() {
				c.bll = nil
				c.event <- "L"
			} else {
				c.checkTopBottomCollision()
				c.checkPaddleCollision()
				if c.checkOverNet() {
					rad := math.Atan2(c.bll.yMovement, c.bll.xMovement)
					deg := rad * radianToDegree
					if deg < 0 {
						deg = 360 + deg
					}
					speed := math.Floor(c.bll.xMovement/math.Cos(rad) + 0.5)
					if speed < 2 {
						speed = 2
					}
					c.event <- fmt.Sprintf("N,%d,%d,%d", c.bll.yPos, int(deg), int(speed))
					c.bll = nil
				}
			}
		}
	}()

	return c
}