examples: fix bounce.v; clean up tetris.v

pull/5203/head
Alexander Medvednikov 2020-06-04 16:53:19 +02:00
parent 1c43204224
commit c4a6ba76a1
2 changed files with 19 additions and 56 deletions

View File

@ -3,9 +3,7 @@
module main
import gx
import gl
import gg
import glfw
import time
struct Game {
@ -17,7 +15,6 @@ mut:
dx int
height int
width int
main_wnd &glfw.Window
draw_fn voidptr
}
@ -25,64 +22,44 @@ const (
window_width = 400
window_height = 300
width = 50
red = gx.rgb(255, 0, 0)
green = gx.rgb(0, 255, 0)
blue = gx.rgb(0, 0, 255)
black = gx.rgb(0, 0, 0)
)
fn main() {
glfw.init_glfw()
mut game := &Game{
gg: 0
dx: 2
dy: 2
height: window_height
width: window_width
main_wnd: 0
draw_fn: 0
}
window := glfw.create_window(glfw.WinCfg{
width: window_width
height: window_height
borderless: false
title: 'Hot code reloading demo'
ptr: game
always_on_top: true
})
// window.onkeydown(key_down)
game.main_wnd = window
window.make_context_current()
gg.init_gg()
game.gg = gg.new_context(gg.Cfg{
game.gg = gg.new_context({
width: window_width
height: window_height
font_size: 20
use_ortho: true
window_user_ptr: 0
user_data: game
window_title: 'Hot code reloading demo'
create_window: true
frame_fn: frame
bg_color: gx.white
})
// window.onkeydown(key_down)
println('Starting the game loop...')
go game.run()
for {
if window.should_close() {
break
}
gl.clear()
gl.clear_color(255, 255, 255, 255)
game.draw()
window.swap_buffers()
glfw.wait_events()
}
game.gg.run()
}
// Try uncommenting or changing the lines inside the live functions.
// Guess what will happen:
[live]
fn (game &Game) draw() {
game.gg.draw_rect(game.x, game.y, width, width, blue)
fn frame (mut game Game) {
game.gg.begin()
game.gg.draw_rect(game.x, game.y, width, width, gx.blue)
game.gg.draw_rect(window_width - width - game.x + 10, 200 - game.y + width, width, width, gx.rgb(228, 10, 55))
game.gg.draw_rect(game.x - 25, 250 - game.y, width, width, gx.rgb(28, 240, 55))
game.gg.end()
}
[live]
@ -101,16 +78,10 @@ fn (mut game Game) update_model() {
fn (mut game Game) run() {
for {
game.update_model()
glfw.post_empty_event() // Refresh
//glfw.post_empty_event() // Refresh
time.sleep_ms(17) // 60fps
}
}

View File

@ -195,7 +195,7 @@ fn (mut g Game) init_game() {
g.parse_tetros()
rand.seed(int(time.now().unix))
g.generate_tetro()
g.field = [] // TODO: g.field = [][]int
g.field = []
// Generate the field, fill it with 0's, add -1's on each edge
for _ in 0..field_height + 2 {
mut row := [0].repeat(field_width + 2)
@ -240,10 +240,7 @@ fn (mut g Game) move_tetro() bool {
y := block.y + g.pos_y + 1
x := block.x + g.pos_x
// Reached the bottom of the screen or another block?
// TODO: if g.field[y][x] != 0
//if g.field[y][x] != 0 {
row := g.field[y]
if row[x] != 0 {
if g.field[y][x] != 0 {
// The new tetro has no space to drop => end of the game
if g.pos_y < 2 {
g.state = .gameover
@ -321,9 +318,7 @@ fn (g &Game) drop_tetro() {
x := tetro.x + g.pos_x
y := tetro.y + g.pos_y
// Remember the color of each block
// TODO: g.field[y][x] = g.tetro_idx + 1
mut row := g.field[y]
row[x] = g.tetro_idx + 1
g.field[y][x] = g.tetro_idx + 1
}
}
@ -377,7 +372,7 @@ fn (mut g Game) draw_scene() {
fn parse_binary_tetro(t_ int) []Block {
mut t := t_
res := [Block{}].repeat(4)
mut res := [Block{}].repeat(4)
mut cnt := 0
horizontal := t == 9// special case for the horizontal line
ten_powers := [1000,100,10,1]
@ -391,11 +386,8 @@ fn parse_binary_tetro(t_ int) []Block {
bin := digit % 2
digit /= 2
if bin == 1 || (horizontal && i == tetro_size - 1) {
// TODO: res[cnt].x = j
// res[cnt].y = i
mut point := &res[cnt]
point.x = j
point.y = i
res[cnt].x = j
res[cnt].y = i
cnt++
}
}