宝石迷阵克隆中的提示算法问题

时间:2014-12-01 21:46:17

标签: c# xna

我的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;
}

0 个答案:

没有答案