我的Bejeweled克隆的提示算法存在轻微问题。现在,每次我按下H键(显示提示的键)时,下面的代码在板的左上角产生一个“提示”。
public bool AreThereMoves(Gem[,] gem2)
{
hintGems.Clear();
return (AreThereMovesDown(gem2) && AreThereMovesRight(gem2));
}
public bool AreThereMovesRight(Gem[,] gem2)
{
hintGems.Clear();
for (int x = 0; x < gem2.GetLength(0) - 1; x++)
{
for (int y = 0; y < gem2.GetLength(1); y++)
{
Gem[,] gems3 = new Gem[gem2.GetLength(0), gem2.GetLength(1)];
Array.Copy(gem2, gems3, gem2.Length);
SwapGemsCheck(x, y, x + 1, y, ref gems3);
if (CheckMatches(gems3, 2) || AreThereSpecialGems(gems3))
{
hintGems.Add(gems3[x, y]);
return true;
}
}
}
return false;
}
public bool AreThereMovesDown(Gem[,] gem2)
{
hintGems.Clear();
for (int y = 0; y < gem2.GetLength(1) - 1; y++)
{
for (int x = 0; x < gem2.GetLength(0); x++)
{
Gem[,] gems3 = new Gem[gem2.GetLength(0), gem2.GetLength(1)];
Array.Copy(gem2, gems3, gem2.Length);
SwapGemsCheck(x, y, x, y + 1, ref gems3);
if (CheckMatches(gems3, 2) || AreThereSpecialGems(gems3))
{
hintGems.Add(gems3[x, y]);
return true;
}
}
}
return false;
}
现在,代码对于特殊的宝石提示有点怪异。如同,它不会在超立方体上显示提示。
当我在检查游戏结束时尝试使用普通AreThereMoves()
方法时,它根本不起作用。我目前在游戏检查结束时测试了Down和Right方法。
我的问题是:我如何改变这一点,以便将提示置于实际行动之上?
如果还需要其他信息,请不要犹豫。
编辑:
这是提示弹出代码:
public void ShowRandomHint()
{
if (hintGems.Count == 0) return;
Gem g = hintGems[Main.rand.Next(hintGems.Count)];
g.Sparkle(Main.rand);
AddText(new Vector2((GetGemPosition(g)[1] - 1) * gemSize + (gemSize), (GetGemPosition(g)[0] - 1) * gemSize + (gemSize)) * new Vector2(1.08f, 1.08f), "HINT!", 2f, Color.Aqua, outlineColor: new Color?[1] { Color.Gold }, amt: .01f);
}
调用它的代码(在Board.Update中):
if (CheckMoving()) hintTimer++;
else hintTimer = 0;
if (hintTimer >= hintDelay)
{
ShowRandomHint();
hintTimer = 0;
}