diff --git a/game/board.go b/game/board.go index c15f533..6618eeb 100644 --- a/game/board.go +++ b/game/board.go @@ -216,7 +216,8 @@ func (b *Board) HoldPiece() { } // ClearLines clears all lines that are completely filled. -func (g *Board) ClearLines() { +func (g *Board) ClearLines() int { + clearedLines := 0 for y := 19; y >= 0; { skip := false for x := 0; x < 10; x++ { @@ -229,8 +230,15 @@ func (g *Board) ClearLines() { y-- continue } - for ty := y; ty > 0; ty-- { + clearedLines++ + for ty := y; ty >= 0; ty-- { for x := 0; x < 10; x++ { + // always clear top line + if ty == 0 { + g.Board[x][ty] = nil + continue + } + // move all blocks above cleared line down if g.Board[x][ty-1] != nil { g.Board[x][ty] = g.Board[x][ty-1] g.Board[x][ty].Position.Y++ @@ -239,10 +247,8 @@ func (g *Board) ClearLines() { } } } - for x := 0; x < 10; x++ { - g.Board[x][0] = nil - } } + return clearedLines } func (b *Board) DrawGrid(offset, scale rl.Vector2) { diff --git a/game/game.go b/game/game.go index beac0b4..1055edc 100644 --- a/game/game.go +++ b/game/game.go @@ -36,7 +36,6 @@ func (g *Game) Init() { func (g *Game) Update() { var err error - defer g.Board.ClearLines() if g.GameOver { if rl.IsKeyPressed(rl.KeyEnter) { g.Init() @@ -76,6 +75,18 @@ func (g *Game) Update() { if errors.Is(err, ErrGameOver) { g.GameOver = true } + + clearedLines := g.Board.ClearLines() + switch clearedLines { + case 1: + g.UI.Score += 40 + case 2: + g.UI.Score += 100 + case 3: + g.UI.Score += 300 + case 4: + g.UI.Score += 1200 + } g.FramesCounter++ }