返回
敲开回忆的闸门,用Java畅游扫雷世界
后端
2024-02-20 13:48:57
周末的时光总是闲暇而慵懒,仿佛置身于宁静的港湾,少了几分都市的喧嚣与烦躁。漫步在记忆的长廊中,我突然想起儿时沉迷于扫雷游戏的时光,指尖在电脑键盘上飞舞,在方块阵中步步为营,挖掘深藏的秘密。于是,我决定用Java语言编写一款扫雷程序,让这份怀旧的情怀在代码的海洋中重焕生机。
// 引入必要的Java库
import java.util.Random;
import java.util.Scanner;
public class Java扫雷游戏 {
// 游戏变量
private static final int 格子数量 = 10;
private static final int 雷的数量 = 10;
private static char[][] 棋盘;
private static boolean[][] 已知雷区;
private static int 未知雷区数量;
public static void main(String[] args) {
// 初始化游戏
初始化棋盘();
设置雷区();
计算相邻雷区数量();
// 玩家交互
Scanner scanner = new Scanner(System.in);
while (未知雷区数量 > 0) {
// 显示棋盘
System.out.println("当前棋盘:");
显示棋盘();
// 获取玩家输入
System.out.print("请输入坐标(行, 列): ");
String 输入坐标 = scanner.nextLine();
int 行 = Integer.parseInt(输入坐标.split(",")[0]);
int 列 = Integer.parseInt(输入坐标.split(",")[1]);
// 处理玩家输入
处理玩家输入(行, 列);
}
// 结束游戏
if (未知雷区数量 == 0) {
System.out.println("恭喜您,您成功通关了!");
} else {
System.out.println("很遗憾,您踩到了雷,游戏结束!");
}
}
// 初始化棋盘
private static void 初始化棋盘() {
棋盘 = new char[格子数量][格子数量];
已知雷区 = new boolean[格子数量][格子数量];
未知雷区数量 = 格子数量 * 格子数量;
// 初始化棋盘为未知状态
for (int i = 0; i < 格子数量; i++) {
for (int j = 0; j < 格子数量; j++) {
棋盘[i][j] = '?';
已知雷区[i][j] = false;
}
}
}
// 设置雷区
private static void 设置雷区() {
Random 随机数生成器 = new Random();
// 设置雷的数量
for (int i = 0; i < 雷的数量; i++) {
int 行 = 随机数生成器.nextInt(格子数量);
int 列 = 随机数生成器.nextInt(格子数量);
// 如果该位置已经设置了雷,则重新生成随机位置
while (棋盘[行][列] == 'X') {
行 = 随机数生成器.nextInt(格子数量);
列 = 随机数生成器.nextInt(格子数量);
}
// 设置雷
棋盘[行][列] = 'X';
}
}
// 计算相邻雷区数量
private static void 计算相邻雷区数量() {
for (int i = 0; i < 格子数量; i++) {
for (int j = 0; j < 格子数量; j++) {
// 如果该位置是雷,则跳过
if (棋盘[i][j] == 'X') {
continue;
}
// 计算相邻雷区数量
int 相邻雷区数量 = 0;
for (int ii = i - 1; ii <= i + 1; ii++) {
for (int jj = j - 1; jj <= j + 1; jj++) {
// 如果超出棋盘范围,则跳过
if (ii < 0 || ii >= 格子数量 || jj < 0 || jj >= 格子数量) {
continue;
}
// 如果相邻位置是雷,则增加相邻雷区数量
if (棋盘[ii][jj] == 'X') {
相邻雷区数量++;
}
}
}
// 将相邻雷区数量存储在棋盘中
棋盘[i][j] = (char) (相邻雷区数量 + '0');
}
}
}
// 处理玩家输入
private static void 处理玩家输入(int 行, int 列) {
// 如果玩家输入的坐标超出棋盘范围,则忽略
if (行 < 0 || 行 >= 格子数量 || 列 < 0 || 列 >= 格子数量) {
System.out.println("输入的坐标超出棋盘范围,请重新输入!");
return;
}
// 如果玩家输入的坐标是已知雷区,则忽略
if (已知雷区[行][列]) {
System.out.println("该位置已经