From 918e0b1e86e98ceb24f94b68ab01dbece809b2aa Mon Sep 17 00:00:00 2001 From: Qi-huanye <2728290997@qq.com> Date: Sun, 26 Apr 2026 23:52:46 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=AD=98=E5=9C=A8=E4=BF=9D?= =?UTF-8?q?=E7=95=99=E5=BC=BA=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/include/Tetris.h | 1 + src/source/TetrisLogic.cpp | 7 +------ src/source/TetrisLogicInnovation.cpp | 4 +--- src/source/TetrisRogue.cpp | 24 +++++++++++++++++++++++- 4 files changed, 26 insertions(+), 10 deletions(-) diff --git a/src/include/Tetris.h b/src/include/Tetris.h index 7ecaedf..0d9d0a0 100644 --- a/src/include/Tetris.h +++ b/src/include/Tetris.h @@ -269,6 +269,7 @@ void SetFeedbackMessage(const TCHAR* title, const TCHAR* detail, int ticks); void OpenRulesScreen(); void OpenUpgradeMenu(); void ConfirmUpgradeSelection(); +void ResetUpgradeUiState(); void HoldCurrentPiece(); void UseScreenBomb(); void UseBlackHole(); diff --git a/src/source/TetrisLogic.cpp b/src/source/TetrisLogic.cpp index 9c1966c..1f40d9f 100644 --- a/src/source/TetrisLogic.cpp +++ b/src/source/TetrisLogic.cpp @@ -855,12 +855,7 @@ void Restart() ResetPlayerStats(classicStats, false); ResetPlayerStats(rogueStats, true); - upgradeUiState.selectedIndex = 0; - upgradeUiState.optionCount = 0; - upgradeUiState.pendingCount = 0; - upgradeUiState.totalChosenCount = 0; - upgradeUiState.picksRemaining = 0; - upgradeUiState.markedCount = 0; + ResetUpgradeUiState(); feedbackState.visibleTicks = 0; feedbackState.title[0] = _T('\0'); feedbackState.detail[0] = _T('\0'); diff --git a/src/source/TetrisLogicInnovation.cpp b/src/source/TetrisLogicInnovation.cpp index 0ba321c..a543caa 100644 --- a/src/source/TetrisLogicInnovation.cpp +++ b/src/source/TetrisLogicInnovation.cpp @@ -528,9 +528,7 @@ void ReturnToMainMenu() pendingLineClearEffectRowCount = 0; pendingLineClearEffectLineCount = 0; menuState.optionCount = 3; - upgradeUiState.pendingCount = 0; - upgradeUiState.picksRemaining = 0; - upgradeUiState.markedCount = 0; + ResetUpgradeUiState(); if (menuState.selectedIndex < 0 || menuState.selectedIndex >= menuState.optionCount) { diff --git a/src/source/TetrisRogue.cpp b/src/source/TetrisRogue.cpp index 974299a..08e4935 100644 --- a/src/source/TetrisRogue.cpp +++ b/src/source/TetrisRogue.cpp @@ -2274,12 +2274,34 @@ void ResetPendingRogueVisualEvents() pendingEvolutionImpactShockwave = false; } +/** + * @brief 清空升级选择界面的所有临时状态,避免跨局残留。 + */ +void ResetUpgradeUiState() +{ + upgradeUiState.selectedIndex = 0; + upgradeUiState.optionCount = 0; + upgradeUiState.pendingCount = 0; + upgradeUiState.totalChosenCount = 0; + upgradeUiState.picksRemaining = 0; + upgradeUiState.markedCount = 0; + for (int i = 0; i < 6; i++) + { + upgradeUiState.marked[i] = false; + upgradeUiState.options[i] = {}; + } +} + /** * @brief 在 Rogue 模式中打开升级强化选择界面。 */ void OpenUpgradeMenu() { - if (currentMode != MODE_ROGUE || upgradeUiState.pendingCount <= 0) + if (currentMode != MODE_ROGUE || + currentScreen != SCREEN_PLAYING || + suspendFlag || + gameOverFlag || + upgradeUiState.pendingCount <= 0) { return; }