diff --git a/app/src/main/java/com/pixelmintdrop/MainActivity.kt b/app/src/main/java/com/pixelmintdrop/MainActivity.kt index 5e9841b..5096312 100644 --- a/app/src/main/java/com/pixelmintdrop/MainActivity.kt +++ b/app/src/main/java/com/pixelmintdrop/MainActivity.kt @@ -301,7 +301,7 @@ class MainActivity : AppCompatActivity(), statsManager.updateSessionStats(finalScore, gameBoard.lines, piecesPlaced, timePlayedMs, currentLevel) // Handle progression - XP earned, potential level up - val xpGained = progressionManager.calculateGameXP(finalScore, gameBoard.lines, currentLevel, timePlayedMs, statsManager.getSessionTetrises(), 0) + val xpGained = progressionManager.calculateGameXP(finalScore, gameBoard.lines, currentLevel, timePlayedMs, statsManager.getSessionQuads(), 0) val newRewards = progressionManager.addXP(xpGained) // Show progression screen if player earned XP @@ -472,7 +472,7 @@ class MainActivity : AppCompatActivity(), lines = gameBoard.lines, level = currentLevel, gameTime = gameTime, - tetrisCount = statsManager.getSessionTetrises(), + quadCount = statsManager.getSessionQuads(), perfectClearCount = 0 // Implement perfect clear tracking if needed ) @@ -496,7 +496,7 @@ class MainActivity : AppCompatActivity(), binding.sessionSinglesText.text = getString(R.string.singles, statsManager.getSessionSingles()) binding.sessionDoublesText.text = getString(R.string.doubles, statsManager.getSessionDoubles()) binding.sessionTriplesText.text = getString(R.string.triples, statsManager.getSessionTriples()) - binding.sessionTetrisesText.text = getString(R.string.tetrises, statsManager.getSessionTetrises()) + binding.sessionQuadsText.text = getString(R.string.quads, statsManager.getSessionQuads()) // Flag to track if high score screen will be shown var showingHighScore = false @@ -911,7 +911,7 @@ class MainActivity : AppCompatActivity(), statsManager.updateSessionStats(finalScore, gameBoard.lines, piecesPlaced, timePlayedMs, currentLevel) // Handle progression - XP earned, potential level up - val xpGained = progressionManager.calculateGameXP(finalScore, gameBoard.lines, currentLevel, timePlayedMs, statsManager.getSessionTetrises(), 0) + val xpGained = progressionManager.calculateGameXP(finalScore, gameBoard.lines, currentLevel, timePlayedMs, statsManager.getSessionQuads(), 0) val newRewards = progressionManager.addXP(xpGained) // Show progression screen if player earned XP diff --git a/app/src/main/java/com/pixelmintdrop/StatsActivity.kt b/app/src/main/java/com/pixelmintdrop/StatsActivity.kt index 09b9b9c..1652365 100644 --- a/app/src/main/java/com/pixelmintdrop/StatsActivity.kt +++ b/app/src/main/java/com/pixelmintdrop/StatsActivity.kt @@ -78,7 +78,7 @@ class StatsActivity : AppCompatActivity() { binding.totalSinglesText.setTextColor(textColor) binding.totalDoublesText.setTextColor(textColor) binding.totalTriplesText.setTextColor(textColor) - binding.totalTetrisesText.setTextColor(textColor) + binding.totalQuadsText.setTextColor(textColor) binding.maxLevelText.setTextColor(textColor) binding.maxScoreText.setTextColor(textColor) binding.maxLinesText.setTextColor(textColor) @@ -116,7 +116,7 @@ class StatsActivity : AppCompatActivity() { binding.totalSinglesText.text = getString(R.string.singles, statsManager.getTotalSingles()) binding.totalDoublesText.text = getString(R.string.doubles, statsManager.getTotalDoubles()) binding.totalTriplesText.text = getString(R.string.triples, statsManager.getTotalTriples()) - binding.totalTetrisesText.text = getString(R.string.tetrises, statsManager.getTotalTetrises()) + binding.totalQuadsText.text = getString(R.string.quads, statsManager.getTotalQuads()) // Update best performance stats binding.maxLevelText.text = getString(R.string.max_level, statsManager.getMaxLevel()) diff --git a/app/src/main/java/com/pixelmintdrop/model/PlayerProgressionManager.kt b/app/src/main/java/com/pixelmintdrop/model/PlayerProgressionManager.kt index 3e0a568..7529fef 100644 --- a/app/src/main/java/com/pixelmintdrop/model/PlayerProgressionManager.kt +++ b/app/src/main/java/com/pixelmintdrop/model/PlayerProgressionManager.kt @@ -93,24 +93,15 @@ class PlayerProgressionManager(context: Context) { /** * Calculate XP from a game session based on score, lines, level, etc. */ - fun calculateGameXP(score: Int, lines: Int, level: Int, gameTime: Long, - tetrisCount: Int, perfectClearCount: Int): Long { - // Base XP from score with level multiplier (capped at level 10) - val cappedLevel = min(level, 10) - val scoreXP = (score * (1 + LEVEL_MULTIPLIER * cappedLevel)).toLong() - - // XP from lines cleared (reduced for higher levels) - val linesXP = lines * XP_PER_LINE * (1 - (level - 1) * 0.05).coerceAtLeast(0.5) - - // XP from special moves (reduced for higher levels) - val tetrisBonus = tetrisCount * TETRIS_XP_BONUS * (1 - (level - 1) * 0.05).coerceAtLeast(0.5) - val perfectClearBonus = perfectClearCount * PERFECT_CLEAR_XP_BONUS * (1 - (level - 1) * 0.05).coerceAtLeast(0.5) - - // Time bonus (reduced for longer games) - val timeBonus = (gameTime / 60000) * TIME_XP_PER_MINUTE * (1 - (gameTime / 3600000) * 0.1).coerceAtLeast(0.5) - - // Calculate total XP - return (scoreXP + linesXP + tetrisBonus + perfectClearBonus + timeBonus).toLong() + fun calculateGameXP(score: Int, lines: Int, level: Int, timePlayedMs: Long, + quadCount: Int, perfectClearCount: Int): Long { + val scoreXP = score * SCORE_XP_MULTIPLIER + val linesXP = lines * LINES_XP_MULTIPLIER * level + val quadBonus = quadCount * QUAD_XP_BONUS * (1 - (level - 1) * 0.05).coerceAtLeast(0.5) + val perfectClearBonus = perfectClearCount * PERFECT_CLEAR_XP_BONUS + val timeBonus = (timePlayedMs / 1000) * TIME_XP_MULTIPLIER + + return (scoreXP + linesXP + quadBonus + perfectClearBonus + timeBonus).toLong() } /** diff --git a/app/src/main/java/com/pixelmintdrop/model/StatsManager.kt b/app/src/main/java/com/pixelmintdrop/model/StatsManager.kt index 89de6a0..63b0e6f 100644 --- a/app/src/main/java/com/pixelmintdrop/model/StatsManager.kt +++ b/app/src/main/java/com/pixelmintdrop/model/StatsManager.kt @@ -20,7 +20,7 @@ class StatsManager(context: Context) { private var totalSingles: Int = 0 private var totalDoubles: Int = 0 private var totalTriples: Int = 0 - private var totalTetrises: Int = 0 + private var totalQuads: Int = 0 // Session stats private var sessionScore: Int = 0 @@ -33,7 +33,7 @@ class StatsManager(context: Context) { private var sessionSingles: Int = 0 private var sessionDoubles: Int = 0 private var sessionTriples: Int = 0 - private var sessionTetrises: Int = 0 + private var sessionQuads: Int = 0 init { loadStats() @@ -53,7 +53,7 @@ class StatsManager(context: Context) { totalSingles = prefs.getInt(KEY_TOTAL_SINGLES, 0) totalDoubles = prefs.getInt(KEY_TOTAL_DOUBLES, 0) totalTriples = prefs.getInt(KEY_TOTAL_TRIPLES, 0) - totalTetrises = prefs.getInt(KEY_TOTAL_TETRISES, 0) + totalQuads = prefs.getInt(KEY_TOTAL_QUADS, 0) } private fun saveStats() { @@ -69,7 +69,7 @@ class StatsManager(context: Context) { .putInt(KEY_TOTAL_SINGLES, totalSingles) .putInt(KEY_TOTAL_DOUBLES, totalDoubles) .putInt(KEY_TOTAL_TRIPLES, totalTriples) - .putInt(KEY_TOTAL_TETRISES, totalTetrises) + .putInt(KEY_TOTAL_QUADS, totalQuads) .apply() } @@ -82,7 +82,7 @@ class StatsManager(context: Context) { sessionSingles = 0 sessionDoubles = 0 sessionTriples = 0 - sessionTetrises = 0 + sessionQuads = 0 } fun updateSessionStats(score: Int, lines: Int, pieces: Int, time: Long, level: Int) { @@ -108,8 +108,8 @@ class StatsManager(context: Context) { totalTriples++ } 4 -> { - sessionTetrises++ - totalTetrises++ + sessionQuads++ + totalQuads++ } } } @@ -142,7 +142,7 @@ class StatsManager(context: Context) { fun getTotalSingles(): Int = totalSingles fun getTotalDoubles(): Int = totalDoubles fun getTotalTriples(): Int = totalTriples - fun getTotalTetrises(): Int = totalTetrises + fun getTotalQuads(): Int = totalQuads // Getters for session stats fun getSessionScore(): Int = sessionScore @@ -155,7 +155,7 @@ class StatsManager(context: Context) { fun getSessionSingles(): Int = sessionSingles fun getSessionDoubles(): Int = sessionDoubles fun getSessionTriples(): Int = sessionTriples - fun getSessionTetrises(): Int = sessionTetrises + fun getSessionQuads(): Int = sessionQuads fun resetStats() { // Reset all lifetime stats @@ -172,7 +172,7 @@ class StatsManager(context: Context) { totalSingles = 0 totalDoubles = 0 totalTriples = 0 - totalTetrises = 0 + totalQuads = 0 // Save the reset stats saveStats() @@ -191,6 +191,6 @@ class StatsManager(context: Context) { private const val KEY_TOTAL_SINGLES = "total_singles" private const val KEY_TOTAL_DOUBLES = "total_doubles" private const val KEY_TOTAL_TRIPLES = "total_triples" - private const val KEY_TOTAL_TETRISES = "total_tetrises" + private const val KEY_TOTAL_QUADS = "total_quads" } } \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index cc42c1d..996f903 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -44,7 +44,7 @@ singles: %d doubles: %d triples: %d - tetrises: %d + quads: %d reset stats music Customization