完善彩虹方块逻辑 游戏帮助描述
This commit is contained in:
@@ -419,12 +419,16 @@ void Fixing()
|
|||||||
if (!overflowTop && currentPieceIsRainbow)
|
if (!overflowTop && currentPieceIsRainbow)
|
||||||
{
|
{
|
||||||
rainbowFilledCount = TriggerRainbowRowCompletion(point.y, point.y + 3);
|
rainbowFilledCount = TriggerRainbowRowCompletion(point.y, point.y + 3);
|
||||||
|
TCHAR rainbowDetail[128];
|
||||||
if (rainbowFilledCount > 0)
|
if (rainbowFilledCount > 0)
|
||||||
{
|
{
|
||||||
TCHAR rainbowDetail[128];
|
|
||||||
_stprintf_s(rainbowDetail, _T("彩虹能量补齐 %d 个缺口,消行机会扩大。"), rainbowFilledCount);
|
_stprintf_s(rainbowDetail, _T("彩虹能量补齐 %d 个缺口,消行机会扩大。"), rainbowFilledCount);
|
||||||
SetFeedbackMessage(_T("彩虹方块"), rainbowDetail, 10);
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_stprintf_s(rainbowDetail, _T("覆盖行没有 1~2 格缺口,彩虹能量保留为特殊固定块。"));
|
||||||
|
}
|
||||||
|
SetFeedbackMessage(_T("彩虹方块"), rainbowDetail, 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (overflowTop)
|
if (overflowTop)
|
||||||
@@ -567,7 +571,7 @@ void Fixing()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (TryStabilizeBoard() > 0)
|
if (!currentPieceIsRainbow && TryStabilizeBoard() > 0)
|
||||||
{
|
{
|
||||||
SetFeedbackMessage(_T("稳定结构"), _T("附近空洞被自动填补,阵型更加稳固。"), 10);
|
SetFeedbackMessage(_T("稳定结构"), _T("附近空洞被自动填补,阵型更加稳固。"), 10);
|
||||||
}
|
}
|
||||||
|
|||||||
+15
-14
@@ -657,8 +657,9 @@ void TDrawScreen(HDC hdc, HWND hWnd)
|
|||||||
if (helpState.currentPage == 1)
|
if (helpState.currentPage == 1)
|
||||||
{
|
{
|
||||||
pageText =
|
pageText =
|
||||||
_T("经典模式:只考验堆叠、消行和生存。\r\n\r\n")
|
_T("经典模式:考验堆叠、消行和生存。消行后悬空方块会继续受重力下落。\r\n\r\n")
|
||||||
_T("Rogue:消行得分和 EXP,升级后选择强化。\r\n\r\n")
|
_T("Rogue:消行得分和 EXP,升级后选择强化,构筑会改变方块、清场、得分和保命方式。\r\n\r\n")
|
||||||
|
_T("特殊方块用粗色边框提示:橙红=爆破,青色=激光,绿色=十字,紫色=彩虹。\r\n\r\n")
|
||||||
_T("战斗越久危险越高,底部封锁区会压缩空间。\r\n\r\n")
|
_T("战斗越久危险越高,底部封锁区会压缩空间。\r\n\r\n")
|
||||||
_T("死亡后可以按 V 看视频复活一次,经典模式和 Rogue 模式都支持。");
|
_T("死亡后可以按 V 看视频复活一次,经典模式和 Rogue 模式都支持。");
|
||||||
}
|
}
|
||||||
@@ -694,14 +695,14 @@ void TDrawScreen(HDC hdc, HWND hWnd)
|
|||||||
};
|
};
|
||||||
const TCHAR* categoryTexts[8] =
|
const TCHAR* categoryTexts[8] =
|
||||||
{
|
{
|
||||||
_T("赏金纹章:得分+20%\r\n成长印记:EXP+25%\r\n缓坠羽翼:下落变慢\r\n连击律动:连续消行加分;先见之眼:预览+1"),
|
_T("赏金纹章:得分+20%,可叠加\r\n成长印记:EXP+25%,可叠加\r\n缓坠羽翼:自然下落变慢\r\n连击律动:连续消行追加奖励\r\n先见之眼:下一方块预览+1"),
|
||||||
_T("最后一搏:濒死清底3行\r\n备用仓:解锁 Hold\r\n完美旋转:卡墙修正\r\n时间缓流:高堆叠减速;空中换形:V 变 I 块"),
|
_T("最后一搏:首次濒死清底3行\r\n备用仓:C / Shift 暂存方块\r\n完美旋转:旋转受阻时左右修正\r\n时间缓流:高堆叠自动减速\r\n空中换形:V 将当前方块变 I"),
|
||||||
_T("卸压清场:清最高行\r\n底线清道夫:更快充能清底\r\n清屏炸弹:X 清底5行,16行充能\r\n黑洞奇点:Z 吞噬最多方块,获得2次"),
|
_T("卸压清场:立刻清最高占用行\r\n底线清道夫:消行充能后清底\r\n清屏炸弹:X 清底5行,消行充能\r\n黑洞奇点:Z 吞噬数量最多的方块"),
|
||||||
_T("爆破核心:更频繁爆破块清 3x3\r\n棱镜激光:更高概率清整列\r\n十字方块:更高概率清行列\r\n彩虹方块:更高概率补齐缺口;方块改造:提高 I 块概率"),
|
_T("爆破核心:橙红边框,落地清 3x3\r\n棱镜激光:青色边框,落地清整列\r\n十字方块:绿色边框,落地清行列\r\n彩虹方块:紫色边框,补覆盖行1~2缺口\r\n方块改造:提高 I 块生成概率"),
|
||||||
_T("连锁火花:消行追加破坏\r\n连环炸弹:爆破扩大 5x5\r\n雷霆四消:三消/四消额外轰击\r\n雷霆棱镜:三消/四消额外激光"),
|
_T("连锁火花:消行后追加随机破坏\r\n连环炸弹:爆破扩大为 5x5\r\n雷霆四消:三消/四消额外轰击\r\n雷霆棱镜:三消/四消追加激光"),
|
||||||
_T("狂热节拍:12行进狂热\r\n怒火连段:连击加倍率\r\n无尽狂热:延长狂热\r\n高压悬赏 / 豪赌四消 / 极限玩家:高风险高收益"),
|
_T("狂热节拍:累计12行进入狂热\r\n怒火连段:连击越高倍率越高\r\n无尽狂热:狂热中消行延时\r\n高压悬赏:更快但收益更高\r\n豪赌四消 / 极限玩家:偏向四消爆发"),
|
||||||
_T("双重抉择:升级多选1个\r\n命运轮盘:6选2但带诅咒\r\n升级冲击波 / 进化冲击:升级清底\r\n成长核心:永久得分 / EXP +15%"),
|
_T("双重抉择:升级可多选1个\r\n命运轮盘:6选2但含诅咒\r\n升级冲击波:升级后清底2行\r\n进化冲击:升级后清底3行\r\n成长核心:永久得分/EXP +15%"),
|
||||||
_T("操控大师:Hold 后减速并预览+1\r\n方块风暴:接下来5个全 I 块\r\n稳定结构:更高概率落地补洞\r\n虚空核心:黑洞和彩虹联动;赌徒契约:强化可能翻倍或落空")
|
_T("操控大师:Hold 后减速并预览+1\r\n方块风暴:接下来5个全 I 块\r\n稳定结构:概率填局部小洞,和彩虹不同\r\n虚空核心:黑洞生成彩虹,彩虹消行触发小黑洞\r\n赌徒契约:强化可能翻倍或落空")
|
||||||
};
|
};
|
||||||
|
|
||||||
int columnGap = SS(18);
|
int columnGap = SS(18);
|
||||||
@@ -902,8 +903,8 @@ void TDrawScreen(HDC hdc, HWND hWnd)
|
|||||||
gameRect.top + (i + 1) * grid - SS(2)
|
gameRect.top + (i + 1) * grid - SS(2)
|
||||||
};
|
};
|
||||||
|
|
||||||
COLORREF fillColor = isRainbowCell ? RGB(255, 214, 120) : BrickColor[colorIndex];
|
COLORREF fillColor = isRainbowCell ? RGB(186, 154, 255) : BrickColor[colorIndex];
|
||||||
COLORREF borderColor = isRainbowCell ? RGB(255, 248, 191) : RGB(255, 248, 250);
|
COLORREF borderColor = isRainbowCell ? RGB(250, 238, 255) : RGB(255, 248, 250);
|
||||||
HBRUSH brickBrush = CreateSolidBrush(fillColor);
|
HBRUSH brickBrush = CreateSolidBrush(fillColor);
|
||||||
HPEN brickPen = CreatePen(PS_SOLID, isRainbowCell ? SS(2) : 1, borderColor);
|
HPEN brickPen = CreatePen(PS_SOLID, isRainbowCell ? SS(2) : 1, borderColor);
|
||||||
oldPen = (HPEN)SelectObject(hdc, brickPen);
|
oldPen = (HPEN)SelectObject(hdc, brickPen);
|
||||||
@@ -977,7 +978,7 @@ void TDrawScreen(HDC hdc, HWND hWnd)
|
|||||||
int activeOutlineWidth = 1;
|
int activeOutlineWidth = 1;
|
||||||
if (currentPieceIsExplosive)
|
if (currentPieceIsExplosive)
|
||||||
{
|
{
|
||||||
activeOutlineColor = RGB(255, 214, 82);
|
activeOutlineColor = RGB(255, 116, 78);
|
||||||
activeOutlineWidth = SS(3);
|
activeOutlineWidth = SS(3);
|
||||||
}
|
}
|
||||||
else if (currentPieceIsLaser)
|
else if (currentPieceIsLaser)
|
||||||
@@ -992,7 +993,7 @@ void TDrawScreen(HDC hdc, HWND hWnd)
|
|||||||
}
|
}
|
||||||
else if (currentPieceIsRainbow)
|
else if (currentPieceIsRainbow)
|
||||||
{
|
{
|
||||||
activeOutlineColor = RGB(255, 226, 126);
|
activeOutlineColor = RGB(186, 126, 255);
|
||||||
activeOutlineWidth = SS(3);
|
activeOutlineWidth = SS(3);
|
||||||
}
|
}
|
||||||
HPEN brickPen = CreatePen(PS_SOLID, activeOutlineWidth, activeOutlineColor);
|
HPEN brickPen = CreatePen(PS_SOLID, activeOutlineWidth, activeOutlineColor);
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ static const UpgradeEntry kUpgradePool[] =
|
|||||||
{ UPGRADE_CROSS_PIECE, -1, 84, true, _T("十字方块"), _T("爆发"), _T("大幅提高十字方块出现率。十字方块落地后清除所在行与所在列。") },
|
{ UPGRADE_CROSS_PIECE, -1, 84, true, _T("十字方块"), _T("爆发"), _T("大幅提高十字方块出现率。十字方块落地后清除所在行与所在列。") },
|
||||||
{ UPGRADE_BLACK_HOLE, 1, 88, false, _T("黑洞奇点"), _T("特殊"), _T("获得 2 次黑洞。按 Z 吞噬棋盘上数量最多的一种固定方块。") },
|
{ UPGRADE_BLACK_HOLE, 1, 88, false, _T("黑洞奇点"), _T("特殊"), _T("获得 2 次黑洞。按 Z 吞噬棋盘上数量最多的一种固定方块。") },
|
||||||
{ UPGRADE_AIR_RESHAPE, 1, 82, false, _T("空中换形"), _T("操作"), _T("获得 2 次换形。按 V 将正在下落的方块重塑为 I 块。") },
|
{ UPGRADE_AIR_RESHAPE, 1, 82, false, _T("空中换形"), _T("操作"), _T("获得 2 次换形。按 V 将正在下落的方块重塑为 I 块。") },
|
||||||
{ UPGRADE_RAINBOW_PIECE, 1, 84, false, _T("彩虹方块"), _T("爆发"), _T("更高概率生成彩虹方块。落地后自动补齐行内缺口,更容易达成消行。") },
|
{ UPGRADE_RAINBOW_PIECE, 1, 84, false, _T("彩虹方块"), _T("爆发"), _T("更高概率生成彩虹方块。落地后补齐覆盖行中 1~2 个缺口,更容易达成消行。") },
|
||||||
{ UPGRADE_VOID_CORE, 1, 112, false, _T("虚空核心"), _T("进化"), _T("黑洞后额外生成 1 个彩虹方块;彩虹消行时撕开小型黑洞。") },
|
{ UPGRADE_VOID_CORE, 1, 112, false, _T("虚空核心"), _T("进化"), _T("黑洞后额外生成 1 个彩虹方块;彩虹消行时撕开小型黑洞。") },
|
||||||
{ UPGRADE_STABLE_STRUCTURE, -1, 72, true, _T("稳定结构"), _T("特殊"), _T("落地后有小概率填补邻近空洞,让阵型更加稳固。") },
|
{ UPGRADE_STABLE_STRUCTURE, -1, 72, true, _T("稳定结构"), _T("特殊"), _T("落地后有小概率填补邻近空洞,让阵型更加稳固。") },
|
||||||
{ UPGRADE_DOUBLE_GROWTH, 1, 84, false, _T("成长核心"), _T("成长"), _T("永久获得 +15% 得分与 +15% EXP;每局只能选择一次。") },
|
{ UPGRADE_DOUBLE_GROWTH, 1, 84, false, _T("成长核心"), _T("成长"), _T("永久获得 +15% 得分与 +15% EXP;每局只能选择一次。") },
|
||||||
@@ -955,7 +955,7 @@ int ClearRowAt(int row)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief 让彩虹方块尝试补齐其覆盖行内的空缺格。
|
* @brief 让彩虹方块尝试补齐其覆盖行内的少量空缺格。
|
||||||
*/
|
*/
|
||||||
int TriggerRainbowRowCompletion(int minRow, int maxRow)
|
int TriggerRainbowRowCompletion(int minRow, int maxRow)
|
||||||
{
|
{
|
||||||
@@ -973,15 +973,18 @@ int TriggerRainbowRowCompletion(int minRow, int maxRow)
|
|||||||
for (int row = minRow; row <= maxRow; row++)
|
for (int row = minRow; row <= maxRow; row++)
|
||||||
{
|
{
|
||||||
int emptyCount = 0;
|
int emptyCount = 0;
|
||||||
int emptyColumn = -1;
|
int emptyColumns[2] = {};
|
||||||
bool hasRainbowCell = false;
|
bool hasRainbowCell = false;
|
||||||
|
|
||||||
for (int x = 0; x < nGameWidth; x++)
|
for (int x = 0; x < nGameWidth; x++)
|
||||||
{
|
{
|
||||||
if (workRegion[row][x] == 0)
|
if (workRegion[row][x] == 0)
|
||||||
{
|
{
|
||||||
|
if (emptyCount < 2)
|
||||||
|
{
|
||||||
|
emptyColumns[emptyCount] = x;
|
||||||
|
}
|
||||||
emptyCount++;
|
emptyCount++;
|
||||||
emptyColumn = x;
|
|
||||||
}
|
}
|
||||||
else if (IsRainbowBoardCell(workRegion[row][x]))
|
else if (IsRainbowBoardCell(workRegion[row][x]))
|
||||||
{
|
{
|
||||||
@@ -989,10 +992,13 @@ int TriggerRainbowRowCompletion(int minRow, int maxRow)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hasRainbowCell && emptyCount == 1 && emptyColumn >= 0)
|
if (hasRainbowCell && emptyCount > 0 && emptyCount <= 2)
|
||||||
{
|
{
|
||||||
workRegion[row][emptyColumn] = 8;
|
for (int i = 0; i < emptyCount; i++)
|
||||||
filledCellCount++;
|
{
|
||||||
|
workRegion[row][emptyColumns[i]] = 8;
|
||||||
|
filledCellCount++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user