优化帮助页逻辑

This commit is contained in:
2026-04-28 21:11:50 +08:00
parent 45d9e988df
commit 2f435f5ca6
2 changed files with 33 additions and 47 deletions
+21 -12
View File
@@ -981,7 +981,20 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
if (currentScreen != SCREEN_MENU && IsPointInRect(GetBackButtonRect(hWnd), mouseX, mouseY)) if (currentScreen != SCREEN_MENU && IsPointInRect(GetBackButtonRect(hWnd), mouseX, mouseY))
{ {
ReturnToMainMenu(); if (currentScreen == SCREEN_PLAYING && IsRogueSkillDemoMode())
{
OpenSkillDemoScreen();
}
else if (currentScreen == SCREEN_RULES && helpState.currentPage != 0)
{
helpState.selectedIndex = (helpState.currentPage == 5) ? 3 : helpState.currentPage - 1;
helpState.currentPage = 0;
helpScrollOffset = 0;
}
else
{
ReturnToMainMenu();
}
InvalidateRect(hWnd, nullptr, FALSE); InvalidateRect(hWnd, nullptr, FALSE);
break; break;
} }
@@ -1076,15 +1089,9 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
} }
else if (IsPointInRect(GetHelpBackHintRect(hWnd), mouseX, mouseY)) else if (IsPointInRect(GetHelpBackHintRect(hWnd), mouseX, mouseY))
{ {
if (helpState.currentPage == 4) helpState.selectedIndex = (helpState.currentPage == 5) ? 3 : helpState.currentPage - 1;
{ helpState.currentPage = 0;
ReturnToMainMenu(); helpScrollOffset = 0;
}
else
{
helpState.currentPage = 0;
helpScrollOffset = 0;
}
InvalidateRect(hWnd, nullptr, FALSE); InvalidateRect(hWnd, nullptr, FALSE);
} }
else if (helpState.currentPage == 4 && IsPointInRect(GetCreditArrowRect(hWnd, -1), mouseX, mouseY)) else if (helpState.currentPage == 4 && IsPointInRect(GetCreditArrowRect(hWnd, -1), mouseX, mouseY))
@@ -1387,7 +1394,9 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
} }
else if (helpState.currentPage == 4) else if (helpState.currentPage == 4)
{ {
ReturnToMainMenu(); helpState.currentPage = 0;
helpState.selectedIndex = 3;
helpScrollOffset = 0;
} }
else if (helpState.currentPage == 5) else if (helpState.currentPage == 5)
{ {
@@ -1535,7 +1544,7 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
} }
else if (wParam == VK_ESCAPE || wParam == VK_BACK || wParam == 'M') else if (wParam == VK_ESCAPE || wParam == VK_BACK || wParam == 'M')
{ {
ReturnToMainMenu(); OpenSkillDemoScreen();
InvalidateRect(hWnd, nullptr, FALSE); InvalidateRect(hWnd, nullptr, FALSE);
break; break;
} }
+12 -35
View File
@@ -166,46 +166,18 @@ struct RogueDemoStep
static const RogueDemoStep kRogueDemoSteps[] = static const RogueDemoStep kRogueDemoSteps[] =
{ {
{ DEMO_SCORE_MULTIPLIER, _T("赏金纹章"), _T("Space 消一行,观察得分倍率提高后的分数收益。") },
{ DEMO_EXP_MULTIPLIER, _T("成长印记"), _T("Space 消一行,观察 EXP 倍率提高后的成长收益。") },
{ DEMO_SLOW_FALL, _T("缓坠羽翼"), _T("当前下落速度已放慢,练习在慢速节奏中调整落点。") },
{ DEMO_COMBO_BONUS, _T("连击律动"), _T("连续完成两次消行,第二次会获得连击收益。") },
{ DEMO_PREVIEW_PLUS_ONE, _T("先见之眼"), _T("右侧预览增加到 2 个,便于提前规划落点。") },
{ DEMO_LAST_CHANCE, _T("最后一搏"), _T("Space 固定触顶方块,濒死时自动清理底部 3 行。") },
{ DEMO_HOLD, _T("备用仓"), _T("按 C / Shift 换出备用 I 块,再用 Space 填平底行缺口。") }, { DEMO_HOLD, _T("备用仓"), _T("按 C / Shift 换出备用 I 块,再用 Space 填平底行缺口。") },
{ DEMO_PRESSURE_RELIEF, _T("卸压清场"), _T("进入场景时只演示卸压清场:最高占用行被清除") }, { DEMO_BLACK_HOLE, _T("黑洞奇点"), _T("按 Z 吞噬场上最多的粉色方块,观察棋盘变化") },
{ DEMO_SWEEPER, _T("底线清道夫"), _T("Space 消去底行,充能满后自动再清扫底部") }, { DEMO_SCREEN_BOMB, _T("清屏炸弹"), _T("按 X 主动引爆,清理底部 5 行高压区") },
{ DEMO_AIR_RESHAPE, _T("空中换形"), _T("按 V 把当前方块变为 I 块,再用 Space 完成落位。") },
{ DEMO_EXPLOSIVE, _T("爆破核心"), _T("用方向键微调红框方块,Space 落地后清除 3x3 区域。") }, { DEMO_EXPLOSIVE, _T("爆破核心"), _T("用方向键微调红框方块,Space 落地后清除 3x3 区域。") },
{ DEMO_STABLE_STRUCTURE, _T("稳定结构"), _T("Space 落地后只触发稳定结构,自动填补局部空洞。") },
{ DEMO_DOUBLE_GROWTH, _T("成长核心"), _T("Space 消一行,观察得分与 EXP 同时提高。") },
{ DEMO_PIECE_TUNING, _T("方块改造"), _T("预览队列固定给出更多 I 块,展示改造后的出块倾向。") },
{ DEMO_GAMBLER, _T("赌徒契约"), _T("Space 消一行,观察随机波动后的收益变化。") },
{ DEMO_CHAIN_BLAST, _T("连锁火花"), _T("Space 消行后,在清除行附近追加随机破坏。") },
{ DEMO_CHAIN_BOMB, _T("连环炸弹"), _T("Space 落下红框方块,演示更大的连环爆破范围。") }, { DEMO_CHAIN_BOMB, _T("连环炸弹"), _T("Space 落下红框方块,演示更大的连环爆破范围。") },
{ DEMO_LASER, _T("棱镜激光"), _T("把青色边框方块落到中列,落地后贯穿整列。") }, { DEMO_LASER, _T("棱镜激光"), _T("把青色边框方块落到中列,落地后贯穿整列。") },
{ DEMO_THUNDER_TETRIS, _T("雷霆四消"), _T("Space 完成四消,额外轰击随机 2 行。") },
{ DEMO_THUNDER_LASER, _T("雷霆棱镜"), _T("Space 完成四消,额外发射 2 道激光。") },
{ DEMO_FEVER_MODE, _T("狂热节拍"), _T("Space 消一行补满充能,进入狂热收益状态。") },
{ DEMO_RAGE_STACK, _T("怒火连段"), _T("连续消行时得分倍率追加,当前已预置连击层数。") },
{ DEMO_INFINITE_FEVER, _T("无尽狂热"), _T("狂热期间消行会延长狂热时间。") },
{ DEMO_SCREEN_BOMB, _T("清屏炸弹"), _T("按 X 主动引爆,清理底部 5 行高压区。") },
{ DEMO_TERMINAL_CLEAR, _T("终末清场"), _T("Space 固定触顶方块,最后一搏会连带引爆清屏炸弹。") },
{ DEMO_DUAL_CHOICE, _T("双重抉择"), _T("演示升级规则:每次升级可选择 2 个强化。") },
{ DEMO_DESTINY_WHEEL, _T("命运轮盘"), _T("演示升级规则:6 选 2,并可能出现诅咒选项。") },
{ DEMO_PERFECT_ROTATE, _T("完美旋转"), _T("靠墙旋转受阻时,系统会尝试左右修正。") },
{ DEMO_TIME_DILATION, _T("时间缓流"), _T("高堆叠开局会自动减速,玩家可用慢速窗口整理局面。") },
{ DEMO_HIGH_PRESSURE, _T("高压悬赏"), _T("下落速度提高,但 Space 消行后得分与 EXP 更高。") },
{ DEMO_TETRIS_GAMBLE, _T("豪赌四消"), _T("Space 完成四消,展示四消收益暴增。") },
{ DEMO_EXTREME_PLAYER, _T("极限玩家"), _T("Space 完成四消,触发短暂缓速补位窗口。") },
{ DEMO_UPGRADE_SHOCKWAVE, _T("升级冲击波"), _T("Space 消一行立刻升级,不弹强化菜单并清除底部 2 行。") },
{ DEMO_EVOLUTION_IMPACT, _T("进化冲击"), _T("Space 消一行立刻升级,清除底部 3 行并进入狂热。") },
{ DEMO_CONTROL_MASTER, _T("操控大师"), _T("按 C / Shift 使用备用仓后,触发短暂减速并增加预览。") },
{ DEMO_BLOCK_STORM, _T("方块风暴"), _T("连续用 I 块清理竖井,后续预览也固定为 I 块。") },
{ DEMO_CROSS, _T("十字方块"), _T("把绿色边框方块落到交叉点,清除一行一列。") }, { DEMO_CROSS, _T("十字方块"), _T("把绿色边框方块落到交叉点,清除一行一列。") },
{ DEMO_BLACK_HOLE, _T("黑洞奇点"), _T("按 Z 吞噬场上最多的粉色方块,观察棋盘重力补位。") },
{ DEMO_AIR_RESHAPE, _T("空中换形"), _T("按 V 把当前方块变为 I 块,再用 Space 完成四消。") },
{ DEMO_RAINBOW, _T("彩虹方块"), _T("把紫色边框方块落到彩色层,按中心行主色触发清除。") }, { DEMO_RAINBOW, _T("彩虹方块"), _T("把紫色边框方块落到彩色层,按中心行主色触发清除。") },
{ DEMO_VOID_CORE, _T("虚空核心"), _T("按 Z 释放黑洞后,下一枚方块会被召唤成彩虹方块。") } { DEMO_VOID_CORE, _T("虚空核心"), _T("按 Z 释放黑洞后,下一枚方块会被召唤成彩虹方块。") },
{ DEMO_UPGRADE_SHOCKWAVE, _T("升级冲击波"), _T("Space 消一行立刻升级,不弹强化菜单并清除底部 2 行。") },
{ DEMO_STABLE_STRUCTURE, _T("稳定结构"), _T("Space 落地后只触发稳定结构,自动填补局部空洞。") }
}; };
static constexpr int kRogueDemoStepCount = sizeof(kRogueDemoSteps) / sizeof(kRogueDemoSteps[0]); static constexpr int kRogueDemoStepCount = sizeof(kRogueDemoSteps) / sizeof(kRogueDemoSteps[0]);
@@ -3061,7 +3033,12 @@ static void ResetRogueDemoBoard()
*/ */
static void ShowRogueDemoFloatingName(const TCHAR* name) static void ShowRogueDemoFloatingName(const TCHAR* name)
{ {
(void)name; floatingTextEffects[0].ticks = 70;
floatingTextEffects[0].totalTicks = 70;
floatingTextEffects[0].boardX = 500;
floatingTextEffects[0].boardY = 1000;
floatingTextEffects[0].color = RGB(255, 248, 250);
lstrcpyn(floatingTextEffects[0].text, name, sizeof(floatingTextEffects[0].text) / sizeof(TCHAR));
} }
/** /**