tetris: display next tetro (#6532)

pull/6539/head
Nicolas Sauzede 2020-10-02 15:37:00 +02:00 committed by GitHub
parent 2204bad7cf
commit a0aedfbe5c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 18 additions and 5 deletions

View File

@ -122,6 +122,8 @@ struct Game {
tetros_cache []Block
// Index of the current tetro. Refers to its color.
tetro_idx int
// Idem for the next tetro
next_tetro_idx int
// Index of the rotation (0-3)
rotation_idx int
// gg context for drawing
@ -186,6 +188,7 @@ fn main() {
fn (mut g Game) init_game() {
g.parse_tetros()
g.next_tetro_idx = rand.intn(b_tetros.len) // generate initial "next"
g.generate_tetro()
g.field = []
// Generate the field, fill it with 0's, add -1's on each edge
@ -231,7 +234,7 @@ fn (g &Game) draw_ghost() {
pos_y := g.move_ghost()
for i in 0..tetro_size {
tetro := g.tetro[i]
g.draw_block_ghost(pos_y + tetro.y, g.pos_x + tetro.x)
g.draw_block_color(pos_y + tetro.y, g.pos_x + tetro.x, gx.gray)
}
}
}
@ -319,7 +322,8 @@ fn (mut g Game) delete_completed_line(y int) {
fn (mut g Game) generate_tetro() {
g.pos_y = 0
g.pos_x = field_width / 2 - tetro_size / 2
g.tetro_idx = rand.intn(b_tetros.len)
g.tetro_idx = g.next_tetro_idx
g.next_tetro_idx = rand.intn(b_tetros.len)
g.rotation_idx = 0
g.get_tetro()
}
@ -348,8 +352,17 @@ fn (g &Game) draw_tetro() {
}
}
fn (g &Game) draw_block_ghost(i, j int) {
g.draw_block_color(i, j, gx.gray)
fn (g &Game) draw_next_tetro() {
if g.state != .gameover {
idx := g.next_tetro_idx * tetro_size * tetro_size
next_tetro := g.tetros_cache[idx..idx+tetro_size]
pos_y := 0
pos_x := field_width / 2 - tetro_size / 2
for i in 0..tetro_size {
block := next_tetro[i]
g.draw_block_color(pos_y + block.y, pos_x + block.x, gx.rgb(220, 220, 220))
}
}
}
fn (g &Game) draw_block_color(i, j int, color gx.Color) {
@ -361,7 +374,6 @@ fn (g &Game) draw_block(i, j, color_idx int) {
color := if g.state == .gameover { gx.gray } else { colors[color_idx] }
g.draw_block_color(i, j, color)
}
fn (g &Game) draw_field() {
for i := 1; i < field_height + 1; i++ {
for j := 1; j < field_width + 1; j++ {
@ -391,6 +403,7 @@ fn (mut g Game) draw_ui() {
fn (mut g Game) draw_scene() {
g.draw_ghost()
g.draw_next_tetro()
g.draw_tetro()
g.draw_field()
g.draw_ui()