📄 minesweeper.java
字号:
import java.util.Random;
public class Minesweeper {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Minesweeper ms = new Minesweeper();
ms.initialize();
ms.printMinesweeper();
}
private int width = 9;
private int height = 9;
private int numOfMines = 10;
private int[][] minesBoard = new int[width][height];
private boolean[][] minesField = new boolean[width][height];
public void initialize() {
for (int i = 0; i < numOfMines; i++) {
Random random = new Random();
int row = random.nextInt(width);
int column = random.nextInt(height);
minesBoard[row][column] = -1;
}
int currentMines = 0;
for (int i = 0; i < width; i++) {
for (int j = 0; j < height; j++) {
if (minesBoard[i][j] == -1) {
currentMines++;
}
}
}
while (currentMines < numOfMines) {
Random random = new Random();
int row = random.nextInt(width);
int column = random.nextInt(height);
minesBoard[row][column] = -1;
currentMines = 0;
for (int i = 0; i < width; i++) {
for (int j = 0; j < height; j++) {
if (minesBoard[i][j] == -1) {
currentMines++;
}
}
}
}
for (int i = 0; i < width; i++) {
for (int j = 0; j < height; j++) {
if (minesBoard[i][j] != -1) {
int numOfSurroundingMines = 0;
if (i - 1 >= 0 && j - 1 >= 0 && minesBoard[i - 1][j - 1] == -1) {
numOfSurroundingMines++;
}
if (i - 1 >= 0 && minesBoard[i - 1][j] == -1) {
numOfSurroundingMines++;
}
if (i - 1 >= 0 && j + 1 < height && minesBoard[i - 1][j + 1] == -1) {
numOfSurroundingMines++;
}
if (j - 1 >= 0 && minesBoard[i][j - 1] == -1) {
numOfSurroundingMines++;
}
if (j + 1 < height && minesBoard[i][j + 1] == -1) {
numOfSurroundingMines++;
}
if (i + 1 < width && j - 1 >= 0 && minesBoard[i + 1][j - 1] == -1) {
numOfSurroundingMines++;
}
if (i + 1 < width && minesBoard[i + 1][j] == -1) {
numOfSurroundingMines++;
}
if (i + 1 < width && j + 1 < height && minesBoard[i + 1][j + 1] == -1) {
numOfSurroundingMines++;
}
minesBoard[i][j] = numOfSurroundingMines;
}
}
}
}
public int getHeight() {
return height;
}
public int getWidth() {
return width;
}
public int[][] getMinesBoard() {
return minesBoard;
}
public boolean[][] getMinesField() {
return minesField;
}
public int sweep(int x, int y) {
if (minesField[x][y] == true) {
return 0;
}
if (minesBoard[x][y] == -1) {
minesField[x][y] = true;
for (int i = 0; i < width; i++) {
for (int j = 0; j < height; j++) {
if (minesBoard[i][j] == -1 && minesField[i][j] == false) {
minesField[i][j] = true;
}
}
}
return -1;
}
else if (minesBoard[x][y] == 0) {
sweepOff(x, y);
}
else {
minesField[x][y] = true;
}
return checkState();
}
private void sweepOff(int x, int y) {
if (minesBoard[x][y] == 0 && minesField[x][y] == false) {
minesField[x][y] = true;
}
else {
return;
}
if (x - 1 >= 0) {
sweepOff(x - 1, y);
}
if (x + 1 < width) {
sweepOff(x + 1, y);
}
if (y - 1 >= 0) {
sweepOff(x, y - 1);
}
if (y + 1 < height) {
sweepOff(x, y + 1);
}
}
private int checkState() {
int returnValue = 1;
for (int i = 0; i < width; i++) {
for (int j = 0; j < height; j++) {
if (minesField[i][j] == false && minesBoard[i][j] != -1) {
returnValue = 0;
}
}
}
return returnValue;
}
public void printMinesweeper() {
System.out.println("width: "+width+", height: "+height);
for (int i = 0; i < width; i++) {
System.out.print("[");
for (int j = 0; j < height - 1; j++) {
System.out.print(minesBoard[i][j]+", ");
}
System.out.println(minesBoard[i][height - 1]+"]");
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -