java用数组实现随机布雷,雷周围八格显示雷的数目
时间: 2023-12-10 14:37:35 浏览: 26
实现随机布雷,可以使用Java中的随机数生成器Random类,结合二维数组来实现。具体步骤如下:
1. 首先定义一个二维数组来表示雷区,其中0表示未翻开的方块,-1表示雷,其他数字表示该方块周围雷的数量。
```java
int[][] minefield = new int[10][10];
```
2. 初始化雷区,将所有方块都设置为0。
```java
for (int i = 0; i < minefield.length; i++) {
for (int j = 0; j < minefield[0].length; j++) {
minefield[i][j] = 0;
}
}
```
3. 随机布雷。可以使用Random类的nextInt方法来生成随机数,根据设定的雷数来随机生成雷的位置。将雷的位置设置为-1。
```java
Random random = new Random();
int mineCount = 10; // 雷的数量
int count = 0; // 已经生成的雷数
while (count < mineCount) {
int x = random.nextInt(minefield.length);
int y = random.nextInt(minefield[0].length);
if (minefield[x][y] != -1) { // 如果该位置不是雷,就设置为雷
minefield[x][y] = -1;
count++;
}
}
```
4. 统计每个方块周围雷的数量。遍历每个方块,对于每个不是雷的方块,统计其周围8个方块中雷的数量,将该数量设置为该方块的值。
```java
for (int i = 0; i < minefield.length; i++) {
for (int j = 0; j < minefield[0].length; j++) {
if (minefield[i][j] != -1) { // 如果该位置不是雷
int count = 0;
for (int k = i-1; k <= i+1; k++) {
for (int l = j-1; l <= j+1; l++) {
if (k >= 0 && k < minefield.length && l >= 0 && l < minefield[0].length && minefield[k][l] == -1) {
count++;
}
}
}
minefield[i][j] = count;
}
}
}
```
5. 最后可以输出雷区,查看结果。
```java
for (int i = 0; i < minefield.length; i++) {
for (int j = 0; j < minefield[0].length; j++) {
System.out.print(minefield[i][j] + " ");
}
System.out.println();
}
```
完整代码如下:
```java
import java.util.Random;
public class Minefield {
public static void main(String[] args) {
int[][] minefield = new int[10][10];
// 初始化雷区
for (int i = 0; i < minefield.length; i++) {
for (int j = 0; j < minefield[0].length; j++) {
minefield[i][j] = 0;
}
}
// 随机布雷
Random random = new Random();
int mineCount = 10; // 雷的数量
int count = 0; // 已经生成的雷数
while (count < mineCount) {
int x = random.nextInt(minefield.length);
int y = random.nextInt(minefield[0].length);
if (minefield[x][y] != -1) { // 如果该位置不是雷,就设置为雷
minefield[x][y] = -1;
count++;
}
}
// 统计每个方块周围雷的数量
for (int i = 0; i < minefield.length; i++) {
for (int j = 0; j < minefield[0].length; j++) {
if (minefield[i][j] != -1) { // 如果该位置不是雷
int count = 0;
for (int k = i-1; k <= i+1; k++) {
for (int l = j-1; l <= j+1; l++) {
if (k >= 0 && k < minefield.length && l >= 0 && l < minefield[0].length && minefield[k][l] == -1) {
count++;
}
}
}
minefield[i][j] = count;
}
}
}
// 输出雷区
for (int i = 0; i < minefield.length; i++) {
for (int j = 0; j < minefield[0].length; j++) {
System.out.print(minefield[i][j] + " ");
}
System.out.println();
}
}
}
```