扫雷游戏 (20 分)

无聊的老 H 最近迷上了扫雷游戏,但是真正的扫雷游戏老 H 还不会玩,只能尝试更为简单
且纯粹依靠运气的扫雷游戏
简易扫雷游戏规则:

  1. 给定扫雷的游戏棋盘是一个 N * N 的矩阵,且棋盘中只有 X 和 O 两种格子,X 表示
    该格子上有雷,O 表示该格子没有雷,每次游戏老 H 只有两次操作的机会。
  2. 在老 H 的视线中该棋盘中的信息全部用’*'隐藏掉了,且每次都需要随机从该棋盘中
    选择一个格子打开。
  3. 如果选择的格子恰好为地雷,则直接输出“Game over!”若选择的格子不是地雷,
    则将该格子(不位于边界)和紧挨该格子四周的其他 8 个格子全部打开,并将其信
    息全部修改,并输出修改之后的棋盘。
  4. 修改规则:如果格子四周没有地雷则修改信息为大写字母’O’,若格子四周存在地雷则
    修改信息为四周地雷的个数,若格子上是地雷则修改信息为大写字母’X’。
  5. . 若操作次数用尽,仍然还未踩到地雷的状态,则输出“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;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值