Fix level-based scoring to maintain starting level throughout gameplay

This commit is contained in:
cmclark00 2025-03-27 19:13:03 -04:00
parent d2554d5dfc
commit dcc4cc28d5

View file

@ -29,6 +29,7 @@ class GameBoard(
// Game state // Game state
var score = 0 var score = 0
var level = 1 var level = 1
var startingLevel = 1 // Add this line to track the starting level
var lines = 0 var lines = 0
var isGameOver = false var isGameOver = false
var isHardDropInProgress = false // Make public var isHardDropInProgress = false // Make public
@ -439,7 +440,8 @@ class GameBoard(
// Update lines cleared and level // Update lines cleared and level
lines += clearedLines lines += clearedLines
level = (lines / 10) + 1 // Calculate level based on lines cleared, but ensure it's never below the starting level
level = Math.max((lines / 10) + 1, startingLevel)
// Update game speed based on level (NES formula) // Update game speed based on level (NES formula)
dropInterval = (1000 * Math.pow(0.8, (level - 1).toDouble())).toLong() dropInterval = (1000 * Math.pow(0.8, (level - 1).toDouble())).toLong()
@ -519,6 +521,7 @@ class GameBoard(
*/ */
fun updateLevel(newLevel: Int) { fun updateLevel(newLevel: Int) {
level = newLevel.coerceIn(1, 20) level = newLevel.coerceIn(1, 20)
startingLevel = level // Store the starting level
// Update game speed based on level (NES formula) // Update game speed based on level (NES formula)
dropInterval = (1000 * Math.pow(0.8, (level - 1).toDouble())).toLong() dropInterval = (1000 * Math.pow(0.8, (level - 1).toDouble())).toLong()
} }
@ -546,10 +549,10 @@ class GameBoard(
// Reset game state // Reset game state
score = 0 score = 0
level = 1 level = startingLevel // Use starting level instead of resetting to 1
lines = 0 lines = 0
isGameOver = false isGameOver = false
dropInterval = 1000L // Reset to level 1 speed dropInterval = (1000 * Math.pow(0.8, (level - 1).toDouble())).toLong() // Set speed based on current level
// Reset scoring state // Reset scoring state
combo = 0 combo = 0