这里有简化的问题: https://stackoverflow.com/questions/38174267/two-dimensional-array-neighbour-cell-search
大家好我正在使用Unity 5重新创建Puzzle Pirates Swordfight。它的副本,我不打算发布或使用它,我只是练习我的算法和编码技巧,但我已经遇到了瓶颈。我正在使用C#进行编码,并对以下主题提出任何建议。谢谢< 3
这是我的项目演示
https://www.youtube.com/watch?v=GRvGIDaY-aE
这是原来的
https://www.youtube.com/watch?v=fuy1Zqkjhn8
在"网格[6,13]"有4种不同颜色的盒子。我需要一种算法,将它们分组最小2宽2高2x2。因此总是将它们分组为NxM。我的算法目前可以将它们分组为2x2,但这是非常有限的。
我使用面板和图像创建了Puzzle Pirates Swordfight棋盘游戏屏幕的精确副本。
以下是我的算法。它检查位置是否已满。它可以装满CurrentPiece,RedPiece,RedGem或RedBreaker。红绿黄蓝之间的颜色可以改变。它基本上做的是对角检查,而不是正交检查;以下各个颜色是否相同。然后如果它们是相同的颜色则删除它们并在它们的位置创建一个更大的颜色。
for (int y = 0; y < height-1; y++) {
for (int x = 0; x < width-1; x++) {
if (grid [x, y] != null) {
if (grid [x, y].parent.name != "CurrentPiece" && grid [x,y].name.Contains("Piece")) {
string colorofpiece = grid [x, y].name.Substring (0, grid [x, y].name.IndexOf ("Piece"));
if ((grid [x + 1, y] != null && grid [x + 1, y].parent.name != "CurrentPiece" && grid [x + 1, y].name.Contains (colorofpiece + "Piece")) &&
(grid [x, y + 1] != null && grid [x, y + 1].parent.name != "CurrentPiece" && grid [x, y + 1].name.Contains (colorofpiece + "Piece")) &&
(grid [x + 1, y + 1] != null && grid [x + 1, y + 1].parent.name != "CurrentPiece" && grid [x + 1, y + 1].name.Contains (colorofpiece + "Piece"))) {
int colornumber = getColor (colorofpiece);
GameObject gem = Instantiate (GemPrefab, transform.localPosition, Quaternion.identity) as GameObject;
gem.name = colorofpiece + "Gem";
gem.transform.SetParent (grid [x, y].parent);
gem.transform.localScale = new Vector3 (1.0f, 1.0f, 1.0f);
gem.transform.localPosition = grid [x, y].localPosition;
gem.GetComponent<Image> ().sprite = sprites [colornumber];
gem.transform.FindChild ("Breaker").GetComponent<Image> ().sprite = sprites [colornumber + 1];
gem.transform.FindChild ("Breaker").transform.FindChild ("Border").GetComponent<Image> ().sprite = sprites [colornumber + 2];
for (int j = y; j < y + 2; j++) {
for (int i = x; i < x + 2; i++) {
Destroy (grid [i, j].gameObject);
grid [i, j] = gem.GetComponent<Transform> ();
}
}
}
}
}
}
}