Unity:行/列Minigame中的简单匹配3+

时间:2016-07-31 12:44:24

标签: c# algorithm unity3d

我试图为我的项目创建一个简单的迷你游戏,要求玩家在行/列中匹配3个以上的对象来获取积分。目前我不知道为什么它有时会起作用,有时候不行。

此外,我的脚本通常会匹配不应该使用的块。

基本上,我将所有块存储在MinigameBlock[,]数组中,然后将其投影到场景中。之后,场景上的每一次移动都会重新回到数组上,然后匹配行的函数就会启动:

public void CheckForRows()
{
    var list = new List<MinigameBlock>();
    for (int y = blocksArray.GetLength(1) - 1; y >= 0; y--)
        for (int x = blocksArray.GetLength(0) - 1; x >= 0; x--)
        {
            MinigameBlock[] r = null;
            if (blocksArray[x, y] != null)
                r = blocksArray[x, y].Check();
            if (r != null) list.AddRange(r);
        }
    foreach (var obj in list.Distinct())
        Destroy(obj.gameObject); //For now
}

这里是Check()的{​​{1}}功能:

MinigameBlock

(这仅适用于现在的水平匹配)

此外,这是我用块填充董事会的屠杀尝试:

public MinigameBlock[] Check()
{
    var t = type;
    List<MinigameBlock> blocks = new List<MinigameBlock>();
    var pos = manager.blocksArray.FindIndex(this);
    if (pos[0] > 1)
    {
        var _blocks = new List<MinigameBlock>();
        _blocks.Add(this);
        var match = 1;
        for (int i = 1; i <= 2; i++)
            if (manager.blocksArray[pos[0] - i, pos[1]] != null && manager.blocksArray[pos[0] - i, pos[1]].type == t)
            {
                match++;
                _blocks.Add(manager.blocksArray[pos[0] - i, pos[1]]);
            }
            else break;
        if (match >= 3)
            for (int i = pos[0]; i < manager.blocksArray.GetLength(0); i++)
                if (manager.blocksArray[i, pos[1]] != null && manager.blocksArray[i, pos[1]].type == t)
                {
                    match++;
                    _blocks.Add(manager.blocksArray[i, pos[1]]);
                }
                else break;
        if (_blocks.Count >= 3)
            blocks.AddRange(_blocks);
    }

除了代码需要大量优化的事实外,我做错了什么?

0 个答案:

没有答案