func playGame(screen *sdl.Surface, bg *glh.Texture, font *gltext.Font) (int, bool) { movingUp := false b := bird.NewBird(240, 380) score := 0 var pipes []*pipe.Pipe ticker := 0 for { gl.Clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT) quit := manageEvents(screen, &movingUp) if quit { return score, true } renderBackground(screen, bg) ticker++ if ticker > 100 { pipes = append(pipes, pipe.NewPipe(int(screen.W), int(screen.H))) ticker = 0 } if movingUp { b.MoveUp() } else { b.MoveDown() } for _, p := range pipes { if p.X < 0 { p.Destroy() pipes = pipes[1:] } if p.CollidesWith(b.X, b.Y, b.Width, b.Height) { return score, false } if p.GonePast(b.X, b.Y) { score++ } p.Tick() p.Render() } b.Render() font.Printf(240, 50, strconv.Itoa(score)) screen.Flip() time.Sleep((1 / 30) * time.Second) sdl.GL_SwapBuffers() } }
func gameOverScreen( screen *sdl.Surface, score string, bg *glh.Texture, font *gltext.Font) bool { for { gl.Clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT) for e := sdl.PollEvent(); e != nil; e = sdl.PollEvent() { switch e.(type) { case *sdl.ResizeEvent: resize(screen, e.(*sdl.ResizeEvent)) case *sdl.QuitEvent: return true case *sdl.MouseButtonEvent: return false } } renderBackground(screen, bg) font.Printf(110, 50, "Game Over") font.Printf(110, 100, "Your score: "+score) font.Printf(110, 150, "Click to play again") sdl.GL_SwapBuffers() time.Sleep((1 / 30) * time.Second) } return false }