2

Java でマインスイーパ ゲームを作成しようとしましたが、このエラーが発生し続けます。この関数は、現在の四角形をクリック済みに設定し、隣接する四角形をすべてクリック済みに設定し、再帰的に続行します。マスがなくなると止まるはずなのですが、フィールドサイズを2x2にして地雷0個にしてもオーバーフローしてしまいます。

public void setClicked(boolean clicked){
    this.clicked = clicked;
    if(adjacentMines == 0)
        for(mine m : adjacent){
            if(!m.isClicked() && !m.isMine()){
                setClicked(true); //Should be m.setClicked(true);
            }
        }
}

問題は解決しました。「m」がありませんでした。私のメソッド呼び出しで。ご協力いただきありがとうございます。

4

4 に答える 4

4

setClicked元の鉱山ではなく、隣接する鉱山を呼び出す必要があります。そうしないsetClicked(true)と、ソース鉱山のために何度も呼び出されます

public void setClicked(boolean clicked){
    this.clicked = clicked;
    if(adjacentMines == 0)
        for(mine m : adjacent){
            if(!m.isClicked() && !m.isMine()){
                m.setClicked(true); // setClicked should be called on the adjacent mine, not on itself!
            }
        }
}
于 2011-07-12T14:25:04.157 に答える
1

隣接する鉱山ではなく、同じ鉱山で setClicked を呼び出しています。

への変更:

public void setClicked(boolean clicked){
    this.clicked = clicked;
    if(adjacentMines == 0)
        for(mine m : adjacent){
            if(!m.isClicked() && !m.isMine()){
                //missing the "m."
                m.setClicked(true);
            }
        }
}
于 2011-07-12T14:25:30.450 に答える
0

コード スニペットから判断するのは難しいですが、セルを繰り返し処理していないと思います。つまり、同じセルを何度も再帰的にチェックしていることを意味します (無限に、wooshを超えて)。ただし、周囲のコードを見ると非常に便利です。

于 2011-07-12T14:27:44.457 に答える
0

setClicked()メソッドが のメンバーであるとしか推測できませんが、 の代わりに条件内mineで呼び出すべきではありませんか?m.setClicked(true)setClicked(true)

于 2011-07-12T14:26:34.153 に答える