私は現在、マインスイーパのクローンを作成しています。私は、周囲の地雷が 0 のタイルをクリックすると、周囲の地雷が 0 のすべての隣人を明らかにし、次に周囲の地雷が 0 のそれらのすべての隣人を明らかにするアルゴリズムを作成しました... (再帰)。この結果は 1 回クリックするだけで済みます。
正常に動作しますが、遅すぎます。元のマインスイーパはこれらのタイルを即座に明らかにしますが、私の場合、明らかにする間に少し遅れがあります.
私はこのコードを書きました:
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}
};
どうすれば速くなりますか?