You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
1.4 KiB
65 lines
1.4 KiB
package main
|
|
|
|
import (
|
|
"github.com/veandco/go-sdl2/sdl"
|
|
"log"
|
|
"time"
|
|
)
|
|
|
|
func gameLoop(pixels []byte, player1, player2 paddle, ball ball, renderer *sdl.Renderer, tex *sdl.Texture, keyState []uint8) {
|
|
var frameStart time.Time
|
|
var elapsedTime float32
|
|
|
|
for {
|
|
frameStart = time.Now()
|
|
for event := sdl.PollEvent(); event != nil; event = sdl.PollEvent() {
|
|
switch event.(type) {
|
|
case *sdl.QuitEvent:
|
|
return
|
|
}
|
|
}
|
|
if err := renderer.Clear(); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
if state == play {
|
|
if player1.score == 5 || player2.score == 5 {
|
|
state = start
|
|
}
|
|
player1.update(keyState, elapsedTime)
|
|
player2.aiUpdate(&ball, elapsedTime)
|
|
ball.update(&player1, &player2, elapsedTime)
|
|
} else if state == start {
|
|
if keyState[sdl.SCANCODE_SPACE] != 0 {
|
|
player1.score = 0
|
|
player2.score = 0
|
|
resetBall(&ball)
|
|
state = play
|
|
}
|
|
} else if state == pause {
|
|
if keyState[sdl.SCANCODE_SPACE] != 0 {
|
|
resetBall(&ball)
|
|
state = play
|
|
}
|
|
}
|
|
|
|
clearScreen(pixels)
|
|
player1.draw(pixels)
|
|
player2.draw(pixels)
|
|
ball.draw(pixels)
|
|
|
|
if err := tex.Update(nil, pixels, winWidth*4); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
if err := renderer.Copy(tex, nil, nil); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
renderer.Present()
|
|
|
|
elapsedTime = float32(time.Since(frameStart).Seconds())
|
|
if elapsedTime < 0.005 {
|
|
sdl.Delay(5 - uint32(elapsedTime / 1000))
|
|
elapsedTime = float32(time.Since(frameStart).Seconds())
|
|
}
|
|
}
|
|
} |