diff --git a/examples/tetris/tetris.v b/examples/tetris/tetris.v index 10e32c68fc..156f1f2855 100644 --- a/examples/tetris/tetris.v +++ b/examples/tetris/tetris.v @@ -8,11 +8,8 @@ import rand import time import gx import gg2 as gg -import sokol import sokol.sapp -import math -import gg2.ft -import os +import sokol.sfons const ( block_size = 20 // pixels @@ -133,13 +130,32 @@ struct Game { //ft &freetype.FreeType //ft &ft.FT font_loaded bool + frame int + frame_old int + frame_sw time.StopWatch = time.new_stopwatch({}) + second_sw time.StopWatch = time.new_stopwatch({}) +} + +[if showfps] +fn (game &Game) showfps() { + game.frame++ + if 0 == game.frame % 60 { + elapsed_time_ms := game.second_sw.elapsed().milliseconds() + last_frame_ms := game.frame_sw.elapsed().milliseconds() + fps := (game.frame-game.frame_old)*(1000/elapsed_time_ms) + eprintln('fps: ${fps:3} | last frame took: ${last_frame_ms:2}ms | frame: ${game.frame:6} ') + game.second_sw.restart() + game.frame_old = game.frame + } } fn frame(game &Game) { + game.frame_sw.restart() //C.sfons_flush(game.ft.fons) game.gg.begin() game.draw_scene() game.gg.end() + game.showfps() } fn main() { @@ -154,6 +170,7 @@ fn main() { } */ mut game := &Game{ + gg: 0 //ft: f } game.gg = gg.new_context( @@ -216,7 +233,7 @@ fn (mut g Game) run() { } } -fn (mut g Game) move_tetro() { +fn (mut g Game) move_tetro() bool { // Check each block in current tetro for block in g.tetro { y := block.y + g.pos_y + 1 @@ -229,15 +246,16 @@ fn (mut g Game) move_tetro() { // The new tetro has no space to drop => end of the game if g.pos_y < 2 { g.state = .gameover - return + return false } // Drop it and generate a new one g.drop_tetro() g.generate_tetro() - return + return false } } g.pos_y++ + return true } fn (mut g Game) move_right(dx int) bool { @@ -361,9 +379,10 @@ fn parse_binary_tetro(t_ int) []Block { res := [Block{}].repeat(4) mut cnt := 0 horizontal := t == 9// special case for the horizontal line + ten_powers := [1000,100,10,1] for i := 0; i <= 3; i++ { // Get ith digit of t - p := int(math.pow(10, 3 - i)) + p := ten_powers[i] mut digit := t / p t %= p // Convert the digit to binary @@ -438,6 +457,9 @@ fn (mut game Game) key_down(key sapp.KeyCode) { .down { game.move_tetro() // drop faster when the player presses } + .d { + for game.move_tetro() {} + } else { } } } diff --git a/vlib/gg2/gg.v b/vlib/gg2/gg.v index af57b5eaa0..7c03dd034f 100644 --- a/vlib/gg2/gg.v +++ b/vlib/gg2/gg.v @@ -3,7 +3,6 @@ // that can be found in the LICENSE file. module gg2 -import glm import gx import os import sokol