From d1bc887836407ce19fb8e1892f6bdf36e3732e1e Mon Sep 17 00:00:00 2001 From: Qi-huanye <2728290997@qq.com> Date: Sat, 25 Apr 2026 16:39:18 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=86=E7=82=B8=E5=BC=B9=E6=96=B9=E5=9D=97?= =?UTF-8?q?=E6=94=B9=E4=B8=BA=E6=AF=8F10=E5=9D=97=E5=9B=BA=E5=AE=9A?= =?UTF-8?q?=E7=94=9F=E6=88=90=E4=B8=80=E6=AC=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/include/Tetris.h | 1 + src/source/TetrisLogic.cpp | 14 ++++++++++---- src/source/TetrisRender.cpp | 11 +++++------ 强化TODO.md | 14 +++++++------- 4 files changed, 23 insertions(+), 17 deletions(-) diff --git a/src/include/Tetris.h b/src/include/Tetris.h index 9a6657a..28c97d3 100644 --- a/src/include/Tetris.h +++ b/src/include/Tetris.h @@ -54,6 +54,7 @@ struct PlayerStats int sweeperLevel; int sweeperCharge; int explosiveLevel; + int explosivePieceCounter; int chainBlastLevel; int chainBombLevel; int laserLevel; diff --git a/src/source/TetrisLogic.cpp b/src/source/TetrisLogic.cpp index dfb13ee..8903a4c 100644 --- a/src/source/TetrisLogic.cpp +++ b/src/source/TetrisLogic.cpp @@ -271,6 +271,7 @@ static void ResetPlayerStats(PlayerStats& stats, bool useRogueRules) stats.sweeperLevel = 0; stats.sweeperCharge = 0; stats.explosiveLevel = 0; + stats.explosivePieceCounter = 0; stats.chainBlastLevel = 0; stats.chainBombLevel = 0; stats.laserLevel = 0; @@ -851,13 +852,18 @@ static bool RollExplosivePiece() return false; } - int chancePercent = 12 + (rogueStats.explosiveLevel - 1) * 8; - if (chancePercent > 40) + if (rogueStats.explosivePieceCounter < 10) { - chancePercent = 40; + rogueStats.explosivePieceCounter++; } - return (rand() % 100) < chancePercent; + if (rogueStats.explosivePieceCounter < 10) + { + return false; + } + + rogueStats.explosivePieceCounter = 0; + return true; } static bool RollLaserPiece() diff --git a/src/source/TetrisRender.cpp b/src/source/TetrisRender.cpp index d386a70..0bb86bc 100644 --- a/src/source/TetrisRender.cpp +++ b/src/source/TetrisRender.cpp @@ -712,12 +712,11 @@ void TDrawScreen(HDC hdc, HWND hWnd) if (rogueStats.explosiveLevel > 0) { TCHAR explosiveText[96]; - int explosiveChance = 12 + (rogueStats.explosiveLevel - 1) * 8; - if (explosiveChance > 40) - { - explosiveChance = 40; - } - _stprintf_s(explosiveText, _T("\u7206\u7834\u6982\u7387 %d%% %s"), explosiveChance, currentPieceIsExplosive ? _T("\u672c\u5757\u5df2\u7206\u7834") : _T("\u672c\u5757\u666e\u901a")); + _stprintf_s( + explosiveText, + _T("\u7206\u7834\u8ba1\u6570 %d / 10 %s"), + rogueStats.explosivePieceCounter, + currentPieceIsExplosive ? _T("\u672c\u5757\u5df2\u7206\u7834") : _T("\u672c\u5757\u666e\u901a")); TextOut(hdc, combatRect.left + SS(18), combatRect.top + SS(146), explosiveText, lstrlen(explosiveText)); } diff --git a/强化TODO.md b/强化TODO.md index 6ac5e41..0ba26d3 100644 --- a/强化TODO.md +++ b/强化TODO.md @@ -11,8 +11,8 @@ | 状态 | 数量 | |---|---:| -| 已完成 | 30 | -| 部分完成 | 5 | +| 已完成 | 31 | +| 部分完成 | 4 | | 未完成 | 0 | ## 已完成 @@ -26,6 +26,7 @@ | 暂存槽 | 基础 | 解锁 Hold | 基础出现 | | 最后一搏 | 基础 | 濒死时自动清除底部 3 行并续命一次 | 基础出现 | | 成长核心 | 基础 | 选择后永久提高 15% 得分和 15% EXP 获取,只能选择一次 | 基础出现 | +| 炸弹方块 | 爽感 | 每隔 10 个方块生成一个炸弹方块,落地后清除周围 3x3 区域 | 基础出现 | | 激光方块 | 爽感 | 特殊激光块落地后清除整列 | 基础出现 | | 十字方块 | 爽感 | 特殊方块落地后同时清除所在行与列 | 基础出现 | | 连锁爆破 | 爽感 | 消行后额外清除附近若干格 | 炸弹方块 | @@ -54,7 +55,6 @@ | 强化 | 分类 | 当前状态 | 升级路径 | |---|---|---|---| -| 炸弹方块 | 爽感 | 已做成概率生成的爆炸块;文档写的是“每隔 10 个方块生成 1 个炸弹方块”,出现机制还没完全对齐 | 基础出现 | | 狂热模式 | 爽感 | 已实现累计 20 行进入 10 秒狂热、得分/EXP x2、下落变慢;文档里的“特殊方块出现率提高”还没接入 | 基础出现 | | 时间缓流 | 操作/生存 | 已实现盘面过高时自动减速;文档要求是“高度超过 15 行时减速 30%,持续 8 秒”,当前是危险高度下的持续性减速逻辑 | 基础出现 | | 赌命四消 | 风险 | 已实现 1~3 消降益、4 消暴增;数值实现与文档“普通消行降低、四消奖励提高 300%”不完全一致 | 基础出现 | @@ -75,7 +75,7 @@ ## 推荐下一批实现顺序 -1. `炸弹方块` 出现机制对齐为“每隔 10 个方块” -2. `狂热模式` 补上“特殊方块出现率提高” -3. `极限玩家` 补上“30 秒未四消增加危险等级” -4. `时间缓流 / 赌命四消` 的数值与触发条件继续向文档收敛 +1. `狂热模式` 补上“特殊方块出现率提高” +2. `极限玩家` 补上“30 秒未四消增加危险等级” +3. `时间缓流` 的触发条件、减速比例和持续时间继续向文档收敛 +4. `赌命四消` 的普通消行 / 四消收益数值继续向文档收敛