2017-11-14 15 views
-1

Imのプログラミングは、掃海艇のゲームです。 最後はきれいです。 私は最後の部分だけに問題があります。近傍を見つけるための地雷探査アルゴリズム?

ゲーム中(写真参照)左上のフィールドをクリックすると、鉱山のないフィールドは反転し、境界には数字が表示されます。

このフィールドを見つけてそれらを表示するアルゴリズムはどうですか...私は緑色の円のフィールドのアルゴリズムですか?

MineSweeper

+5

私は[Flood fill](https://en.wikipedia.org/wiki/Flood_fill)アルゴリズムに類似していると思います。 –

+0

あなたの助けてくれてありがとう、より簡単なアルゴリズムがあるかどうか知っていますか? – naikjones

+0

この問題を解決するには、[this](https://en.wikipedia.org/wiki/Flood_fill#Stack-based_recursive_implementation_2.8fourway.29)よりも単純なアルゴリズムを見つけるのは難しいでしょう。 – SirGuy

答えて

1

私は最初からデザインをしています、私はそれはあなたを助け願っています。

私のゲームの舞台は、整数のn×nの行列である場合には、

0 0 0 0 0 
0 0 0 0 0 
0 0 0 0 0 
0 0 0 0 0 

私は、このような3×3行列を適用することによって、その行列に爆弾を置くモデル化することができます

1 1 1 
1 9 1 
1 1 1 

ここでは9、爆弾を表し、おそらくより大きな整数を使用する必要があります。私が適用と言うとき、私は場所を選び、その3x3マトリックスの数字でそれを増やします。だから1爆弾を置こう:

0 1 1 1 0 
0 1 9 1 0 
0 1 1 1 0 
0 0 0 0 0 
0 0 0 0 0 

最初の爆弾の横にもう1爆弾を置こう。とのは、セル内の初期値はのはどこか、以下の別のものにこの時間を置いてみましょう9.

0 1 2 2 1 
0 1 9 9 1 
0 1 2 2 1 
0 0 0 0 0 
0 0 0 0 0 

ときに場所をインクリメントビット賢いとはないとします。

0 1 2 2 1 
0 1 9 9 1 
0 1 3 3 2 
0 0 1 9 1 
0 0 1 1 1 

私は右下から数値を明らかにするために試してみるとよいでしょう。私のアルゴリズムは何でしょうか?

function revealCell(location) 
{ 
    if(cellValueIsRevealed(location)) { 
     return; 
    } 
    var value = revealValueOfCell(location); 
    if(value > 0) 
    { 
     return; 
    } 

    foreach(neighbor in neighbors) 
    { 
     revealCell(neighbor); 
    } 
} 

が一つの方法は、ブールの行列を実装するだろう、cellValueIsRevealedメソッドを実装するには:ここに私のテイクです。

+0

あなたは隣接する2つ以上のゼロがある場合、無限再帰に対する保護を追加します。 – interjay

+0

@interjay無限再帰を避けるためのショートカット動作を追加しました。 –

関連する問題