【发布时间】:2012-12-17 00:36:12
【问题描述】:
我目前正在制作扫雷克隆。 我做了一个算法,当点击一个周围有 0 个地雷的图块时,显示所有周围有 0 个地雷的邻居,然后显示它们的所有邻居,周围有 0 个地雷......(递归)。 这个结果只需要点击一下:
它可以正常工作,但是太慢了。最初的扫雷游戏会立即显示这些图块,但在我的情况下,它们在显示之间有一点延迟。
我写了这段代码:
private void RevealNeighbor(int x, int y) {
foreach(var neighbor in _neighbors) {
try {
Tile tile = _tiles[x + neighbor[0], y + neighbor[1]];
if(tile.TileType == TileType.Empty && tile.Hidden) {
tile.Reveal();
if(tile.Number == 0) {
RevealNeighbor(x + neighbor[0], y + neighbor[1]);
}
}
}
catch(IndexOutOfRangeException) {
}
}
}
_neighbors 是一个数组数组,它有 8 个相邻元素的位置偏移:
private readonly int[][] _neighbors = new[] {
new[] {-1, -1},
new[] {0, -1},
new[] {1, -1},
new[] {1, 0},
new[] {1, 1},
new[] {0, 1},
new[] {-1, 1},
new[] {-1, 0}
};
我怎样才能让它更快?
【问题讨论】:
-
tile.Reveal();是否提示渲染? -
延迟肯定是在绘制更新而不是计算更新。使用分析器来避免猜测。
-
瓷砖是 System.Windows.Forms.Button。 Reveal() 只是禁用按钮并将 Text 设置为大于 0 的数字。
-
那将触发一次绘制。