模拟扫雷--Java控制台操作(二)

扫雷——游戏操作(Java)

描述:首先选择难度,根据选择的难度生成地雷图,并在控制台输出游戏界面,其中‘~’表示灰色区域,‘*’表示地雷,‘_’表示空白区域,‘1~8’表示提示数字,之后根据提示输入进行游戏操作。

说明:控制台输入输出,根据输入的行、列情况进行显示,可标注地雷。若当前选中的为数字则显示数字,若为地雷则游戏结束,若为灰色区域则将灰色区域周围的8格全部显示,直至周围全为数字为止。当提示数字周围标注的地雷数与数字相等,再次输入提示数字的行列时,则会自动显示提示数字周围未选中的区域。当提示数字和灰色区域全部显示完后,则过关,并输出用时。

注:1、控制台输入只能输入数字,输入其他会报错,并且输入的数字若超出范围则会提示重新输入;2、灰色区域周围只能是数字,不可能有其他情况;3、地雷周围的8格内至少有一个数字,否则不合规则;4、第一步绝对不会踩中地雷。

源代码:

import java.util.Scanner;

/**
 * 游戏操作
 * 
 * 与SaoLei相配,主函数中调用new SaoLei2();
 * 
 * -2-->灰色, -1-->地雷, 0-->空白, 1~8-->提示数字
 * 
 * @author lixiang
 *
 */
public class SaoLei2 {
    private int[][] game;
    private SaoLei sl;
    private Scanner sc;
    private int choose; // 游戏选择
    private boolean start = true; // 第一步判断
    private long startTime; // 开始时间
    private long endTime; // 结束时间
    private boolean pass = false; // 是否过关
    private boolean jump = false; // 跳过输入
    private boolean flag = false; // 结果不全面标志

    // 8个方向  上、下、左、右、左上、左下、右上、右下
    public static final int[][] move = {
  
  {-1,0},{
  
  1,0},{
  
  0,-1},{
  
  0,1},{-1,-1},{
  
  1,-1},{-1,1},{
  
  1,1}};

    public SaoLei2() {
        sc = new Scanner(System.in);

        // 初始化开始
        start();
        game = new int[sl.rows+1][sl.columns+1];
        print(game);

        // 执行游戏
        play(0,0,0);
    }

    // 递归显示灰色区域
    private void dfs(int i, int j){
        game[i][j] = -2;

        for (int k = 0; k < 8; k++) {
            if(dfs_range(i, j, move[k][0], move[k][1])){
                if(sl.data[i+move[k][0]][j+move[k][1]]==-2 && game[i+move[k][0]][j+move[k][1]]==0){
                    game[i+move[k][0]][j+move[k][1]] = -2;
                    dfs(i+move[k][0], j+move[k][1]);
                }else{
                    game[i+move[k][0]][j+move[k][1]] = sl.data[i+move[k][
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值