2016-11-20 8 views
1

私はこのページでは新しいですが、基本的にはJavaで地雷探偵のゲームをやっていますが、機能に問題があります。 1つの場所をクリックするとすべてのウィットセルが表示されます。再帰的にしようとしましたが、できません。地雷がない地域を発見する

コード申し訳ありません

、原稿がスペイン語であるが、私は擬似コードを作成しようとした: 分 マトリズ=多次元配列(マインスイーパ)とmax(8 sorroud細胞)を反復するインデックスminとmaxを返す

private void discoverWitheCell(int x, int y) { 
    if(matriz[x][y].getdiscovered() == false){ 
     matriz[x][y].setDiscovered(true); 
    } 
    else{ 
     if(matriz[x][y].getNumberOfMinesArround() == 0){ 
      for(int i=min(x);i<max(x);i++) 
       for(int j=min(y);j<max(y);j++) 
        discoverWhiteCell(i,j); 
     } 
    } 
} 
+0

再帰的には、その8近傍をトリガする必要があります。私たちがさらに助けてくれるようにあなたのコードを共有することができますか? –

+0

完了、本当に申し訳ありませんが私の悪い英語:c – Farengar

答えて

1

ここにコードはたくさんありませんが、逆戻りしているような気がします。

申し訳ありませんが、私はJavaのスピーカーではないため、構文の一部を推測しています。これは境界から外れる可能性があることに注意してください - 個人的には、マップの周りに空のセルのレイヤーを追加するので、境界チェックには心配する必要はありません。私はあなたが発見したテストが台無しにし、あなたのバージョンが隣人でもあるかのように無限(スタックオーバーフローまで)再帰に入ることができるように見える持っていると信じています

private void ClickSquare(int x, int y) 
{ 
    // Did the user click an already exposed square? If so, ignore 
    if (matriz[x][y].getDiscovered()) return; 
    matriz[x][y].SetDiscovered(true); 
    if (matriz[x][y].getNumberOfMinesAround != 0) return; 
    // If empty, click all the neighbors 
    for (int xloop = x - 1; xloop <= x + 1; xloop++) 
     for (int yloop = y - 1; yloop <= y + 1; yloop++) 
      ClickSquare(xloop, yloop); 
} 

は、それが元のセルに来るゼロ。私のバージョンは、セルがまだ処理されていない場合にのみ、この再帰を停止します。

+0

そして、あなたはそれがどのように処理されていることを知っていますか? – Farengar

+0

@Farengar私はあなたの質問を理解していません。私は、二次細胞をクリックしているかのように開いた状態で扱うと言っています。セルオープニングコードは、誰がそれを呼ぶか気にするべきではありません。 –

+0

オクラホマ、あなたのバージョンCを試してみます: – Farengar