无聊的老 H 最近迷上了扫雷游戏,但是真正的扫雷游戏老 H 还不会玩,只能尝试更为简单
且纯粹依靠运气的扫雷游戏
简易扫雷游戏规则:
- 给定扫雷的游戏棋盘是一个 N * N 的矩阵,且棋盘中只有 X 和 O 两种格子,X 表示
该格子上有雷,O 表示该格子没有雷,每次游戏老 H 只有两次操作的机会。 - 在老 H 的视线中该棋盘中的信息全部用’*'隐藏掉了,且每次都需要随机从该棋盘中
选择一个格子打开。 - 如果选择的格子恰好为地雷,则直接输出“Game over!”若选择的格子不是地雷,
则将该格子(不位于边界)和紧挨该格子四周的其他 8 个格子全部打开,并将其信
息全部修改,并输出修改之后的棋盘。 - 修改规则:如果格子四周没有地雷则修改信息为大写字母’O’,若格子四周存在地雷则
修改信息为四周地雷的个数,若格子上是地雷则修改信息为大写字母’X’。 - . 若操作次数用尽,仍然还未踩到地雷的状态,则输出“You Win!”
提示:棋盘左上角坐标为(0,0)
输入格式:
输入第一行一个数字 N,代表矩阵的长和宽(1<=N<=25)
接下来输入一个 N 行 N 列的矩阵,用于标记棋盘中地雷的位置
接下来两行,每行两个数字 x,y,代表此次操作打开格子的坐标(题目保证每次操作的格子
均为未打开的格子)
输出格式:
操作如果没有踩到地雷,则输出修改后的棋盘(每个棋盘之前用一行隔开)
如果踩到地雷,则直接输出“Game over!”
如果所有操作完成之后仍然没有踩到地雷,则输出“You Win!”
输入样例 1:
在这里给出一组输入。例如:
5
OXOOO
OOOOX
OXOOO
XOXOO
OOOOO
1 1
3 2
结尾无空行
输出样例 1:
在这里给出相应的输出。例如:
1X1**
222**
2X2**
*****
*****
Game over!
结尾无空行
输入样例 2:
在这里给出一组输入。例如:
5
OXOOO
OOOOX
OXOOO
XOXOO
OOOOO
1 1
3 3
结尾无空行
输出样例 2:
在这里给出相应的输出。例如:
1X1**
222**
2X2**
*****
*****
1X1**
222**
2X221
**X1O
**11O
You Win!
结尾无空行
我的代码:
import java.util.Scanner;
public class b {
static Scanner sc = new Scanner(System.in);
static int n=sc.nextInt();
static char map[][]=new char[n][n];//存放地图
static char user[][]=new char[n][n];//用户眼中的地图
static int dilei[][]=new int[n][n];//用来存放地图中每个点的地雷数
public static void main(String[] args) {
int x1,y1;
int x[]={-1,1,0,0,-1,1,-1,1};
int y[]={0,0,-1,1,-1,-1,1,1};
for (int i = 0; i <n; i++) {
map[i]=sc.next().toCharArray();
}
for (int i = 0; i <n; i++) {
user[i]="*****".toCharArray();
}
for (int i = 0; i <n; i++) {
for (int j = 0; j <n; j++) {
if(map[i][j]=='X')
{
dilei[i][j]=-1;
continue;
}
int temp_x,temp_y;
for (int k = 0; k <x.length; k++) {
temp_x=i+x[k];
temp_y=j+y[k];
if(isin(temp_x,temp_y)&&map[temp_x][temp_y]=='X')
{
dilei[i][j]++;
}
}
}
}
for (int i = 0; i <2; i++) {
x1=sc.nextInt();
y1=sc.nextInt();
if(map[x1][y1]=='X')
{
System.out.print("Game over!");
System.exit(0);
}
else
{
user[x1][y1]=(char) (dilei[x1][y1]+'0');
int temp_x,temp_y;
for (int k = 0; k <x.length; k++) {
temp_x=x1+x[k];
temp_y=y1+y[k];
if(isin(temp_x,temp_y)&&dilei[temp_x][temp_y]==0)
{
user[temp_x][temp_y]='O';
}
else if(isin(temp_x,temp_y)&&dilei[temp_x][temp_y]>0)
{
user[temp_x][temp_y]= (char) (dilei[temp_x][temp_y]+'0');
}
else if(isin(temp_x,temp_y)&&dilei[temp_x][temp_y]==-1)
{
user[temp_x][temp_y]='X';
}
}
for (int j = 0; j <n; j++) {
for (int k = 0; k <n; k++) {
System.out.print(user[j][k]);
}
System.out.println();
}
System.out.println();
}
}
System.out.print("You Win!");
}
public static boolean isin(int x,int y)
{
if(x>=0&&x<n&&y>=0&&y<n) return true;
return false;
}
}