⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 minesweeper.java

📁 使用java开发的扫雷游戏源代码
💻 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 + -