我试图为我的项目创建一个简单的迷你游戏,要求玩家在行/列中匹配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);
}
除了代码需要大量优化的事实外,我做错了什么?