パニック速報

The next stage is paradise…

今日暇やった

だからコード書いたりアルゴリズム考えながらしこしこしてた。

ループの処理とか被ったときの+1の2重ループとか久しぶりに頭使った希ガス

以下コード


public class Minesweeper {

private int rows, cols; //盤面の行数、列数(番兵を含まない)
private int board; //各マスの中身(何が配置されてるか)
private int face; //各マスの状態(開いてるか閉じてるか)

public static final int GUARD = -1; //番兵を表す定数
public static final int BOMB = 9; //爆弾を表す定数

public static final int HIDE = 0; //隠れているを表す定数
public static final int OPEN = 1; //開いてるを表す定数


public Minesweeper(int rows, int cols){ //今トラクタ(因数は行、列数)
this.rows = rows;
this.cols = cols;
board = new int[rows+2][cols+2]; //番兵分を含めて要素を確保
face = new int[rows+2][cols+2]; //番兵分を含めて要素を確保
clearBoard();
}

public void clearBoard(){ //全マス初期化処理
for(int i = 0; i < rows+2; i++){
for(int j = 0; j < cols+2; j++){
face[i][j] = HIDE; //全マス隠れている状態にする
board[i][j] = 0; // とりあえず中身に0を配置
if(i == 0 || j == 0 || i == rows+1 || j == cols+1){
board[i][j] = GUARD; //外周のマスには番兵(ー1)を配置
}

}
}
}
public void putBOMB(int n){ //爆弾配置処理(引数は爆弾の数))
int i, j, k;
for(k = 0; k < n; k++){
do{
i = (int)(Math.random() * rows) + 1; //番兵以外はランダム配置
j = (int)(Math.random() * cols) + 1;
}while(board[i][j] == BOMB); //既に配置された爆弾を避ける
board[i][j] = BOMB; //決めた位置に爆弾を配置
nearPlus(i, j); //爆弾を配置した周囲8マスを+1にする
}
}

private void nearPlus(int i, int j){ //i行目、j列目の周囲8マスを+1にする処理
for(int si = -1; si <= 1; si++){
for(int sj = -1; sj <= 1; sj++){
if(board[i+si][j+sj] != GUARD && board[i+si][j+sj] != BOMB){
board[i+si][j+sj]++; //↑が番兵・爆弾でなければ←+1する
}
}
}
}
}




まだ爆弾と番兵の処理しかできてないからこれからはクリックした場所の判定とかオープン、クローズの状態とかやらなきゃいかんのです。

自分でコメント書きながらコード書いてると自分でもまた勉強になるからいいね。