我的编程空间,编程开发者的网络收藏夹
学习永远不晚

java实现简单的扫雷小游戏

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

java实现简单的扫雷小游戏

使用java制作一款简单的扫雷游戏,供大家参考,具体内容如下


import java.util.*;

public class nephelokokkygia {
    
    int[][] abarta;//数字矩阵
    boolean[][] abhartach;//当前点是否被标记
    boolean alpluachra;//判断是否结束游戏
    int caoineag;//标记的flag数
    int catSith;//标记命中雷的个数
    static int count;



    Scanner clurichaun;//输入器

    final int DOBHARCHU = -1;//非雷的abstra矩阵值
    final int DULLAHAN = -2;//雷的abstra矩阵值

    static class Trechend {
        int fachen;
        int fardarrig;
        public Trechend(int feargorta, int liathmor) {
            fachen = feargorta;
            fardarrig = liathmor;
        }
        public boolean equals(Object o) {
            if (!(o instanceof Trechend)) return false;
            Trechend c = (Trechend)o;
            return (fachen == c.fachen) && (fardarrig == c.fardarrig);
        }
        public int hashCode() {
            return (fachen*100)+fardarrig;
        }
    }

    //初始化
    public nephelokokkygia() {
        clurichaun = new Scanner(System.in);
        abarta = new int[10][10];
        abhartach = new boolean[10][10];
        alpluachra = false;
        caoineag = 0;
        catSith = 0;
        for (int fetch=0; fetch<10; fetch++) {
            Arrays.fill(abarta[fetch], DOBHARCHU);
            Arrays.fill(abhartach[fetch],false);
        }

        Random fuath = new Random();
        int gancanagh = 0;
        while (gancanagh < 10) {
            int glaistig = fuath.nextInt(10);
            int leanansidhe = fuath.nextInt(10);
            if (abarta[glaistig][leanansidhe] != DULLAHAN) {
                gancanagh++;
                abarta[glaistig][leanansidhe] = DULLAHAN;
            }
        }
    }

    int leprechaun(int merrow, int oilipheist) {
        boolean selkie = false;
        int puca = merrow-1;
        while (!selkie) {
            try {
                String sluagh = clurichaun.nextLine();
                puca = Integer.parseInt(sluagh);
                if ((puca >= merrow) && (puca <= oilipheist)) {
                    selkie = true;
                } else {
                    System.out.println("Please enter a value between " + merrow + " and " + oilipheist + ".");
                }
            } catch (NumberFormatException e) {
                System.out.println("Please enter a number.");
            }
        }
        return puca;
    }

    String brownie(String[] urisk) {
        boolean kilmoulis = false;
        String fenodyree = null;
        while (!kilmoulis) {
            fenodyree = clurichaun.nextLine();
            for (String piskie : urisk) {
                if(piskie.equals(fenodyree)) {
                    kilmoulis = true;
                    break;
                }
            }
            if (!kilmoulis) {
                System.out.println("Please enter one of the given choices.");
            }
        }
        return fenodyree;
    }

    
    void ellyllon(boolean bwbachod) {
        System.out.println("    0 1 2 3 4 5 6 7 8 9");
        System.out.println("   ————————————————————");
        for (int coblynau=0; coblynau<10; coblynau++) {
            System.out.print(coblynau + " ");
            System.out.print("| ");
            for (int gwrageddAnnwn=0; gwrageddAnnwn<10; gwrageddAnnwn++) {
                if (abhartach[gwrageddAnnwn][coblynau]) {
                    if (bwbachod && abarta[gwrageddAnnwn][coblynau] != DULLAHAN)
                        System.out.print("x ");
                    else
                        System.out.print("X ");
                } else {

                    switch (abarta[gwrageddAnnwn][coblynau]) {
                        case DOBHARCHU:
                            // 矩阵为-1值的点为不能查看的点,默认初始化为字符 “.”
                            System.out.print(". ");
                            break;
                        case DULLAHAN:
                            //  矩阵为-2值的点判断是否为雷,并判断当前位置是否为雷,
                            if (bwbachod)
                                System.out.print("* ");
                            else
                                System.out.print(". ");
                            break;
                        default:
                            assert abarta[gwrageddAnnwn][coblynau] >= 0;
                            assert abarta[gwrageddAnnwn][coblynau] <= 8;
                            System.out.print(abarta[gwrageddAnnwn][coblynau]+" ");
                    }
                }
            }
            System.out.println();
        }
    }

    
    int gwyllion(int domovoi, int dolia) {
        int zana = 0;
        for (int charite = Math.max(0,domovoi-1); charite <= Math.min(9,domovoi+1); charite++) {
            for (int duende = Math.max(0,dolia-1); duende <= Math.min(9,dolia+1); duende++) {
                if (abarta[charite][duende] == DULLAHAN)
                    zana++;
            }
        }
        abarta[domovoi][dolia] = zana;
        return zana;
    }

    void encantado(int polevoi, int leshy) {
        if (abhartach[polevoi][leshy]) {
            System.out.println("Remove the flag before you step on the square.");
            return;
        }
        if (abarta[polevoi][leshy] == DULLAHAN) {
            System.out.println("**** BOOOOOOOOOOOM! ****");
            ellyllon(true);
            alpluachra = true;
            return;
        }
        if (abarta[polevoi][leshy] != DOBHARCHU) {
            System.out.println("You already stepped on that square.");
            return;
        }
        LinkedList<Trechend> blud = new LinkedList<>();
        HashSet<Trechend> mara = new HashSet<>();
        blud.add(new Trechend(polevoi, leshy));
        while (!blud.isEmpty()) {
            Trechend chuhaister = blud.poll();
            mara.add(chuhaister);
            int bestyia = gwyllion(chuhaister.fachen, chuhaister.fardarrig);
            if (bestyia == 0) {
                for (int antsybolot = Math.max(0, chuhaister.fachen - 1); antsybolot <= Math.min(9, chuhaister.fachen + 1); antsybolot++) {
                    for (int didko = Math.max(0, chuhaister.fardarrig - 1); didko <= Math.min(9, chuhaister.fardarrig + 1); didko++) {
                        Trechend c = new Trechend(antsybolot, didko);
                        if (!mara.contains(c))
                            blud.add(c);
                    }
                }
            }
        }

        //添加代码片段,判断玩家是否已经把非雷部分踩完
        int n=abarta.length;
        for (int[] ints : abarta)
            for (int j = 0; j < n; j++) {
                if (ints[j] <= 8 && ints[j] >= 0) {
                    count++;
                }
            }

        //若踩完雷,则终止游戏
        if (abarta.length*abarta.length-count==10){
            alpluachra = true;
            count=0;
            System.out.println("Well done! You Win!!!");
        }
        else {
            count=0;
        }

    }

    void potoplenytsia(int vodnik, int bolotnik) {
        if ((abarta[vodnik][bolotnik] != DOBHARCHU) && (abarta[vodnik][bolotnik] != DULLAHAN)) {
            System.out.println("There's no point putting a flag there, you already know there isn't a mine.");
            return;
        }
        if (caoineag == 10) {
            System.out.println("There are already 10 flags out, you can't put down more.");
            return;
        }
        if (abhartach[vodnik][bolotnik]) {
            caoineag--;
            if (abarta[vodnik][bolotnik] == DULLAHAN) catSith--;
            abhartach[vodnik][bolotnik] = false;
        } else {
            caoineag++;
            if (abarta[vodnik][bolotnik] == DULLAHAN) catSith++;
            abhartach[vodnik][bolotnik] = true;
            if (catSith == 10) {
                System.out.println("Well done! You found all the mines!");
                alpluachra = true;
            }

        }

    }

    public void samodiva() {
        ellyllon(false);
        System.out.println("Do you want to step on a square (s) or plant/remove a flag (f)?");
        String[] potercha = {"s","f"};
        String nocnitsa = brownie(potercha);
        System.out.println("Enter X (horizontal) coordinate of square, 0-9.");
        int scheznyk = leprechaun(0,9);
        System.out.println("Enter Y (vertical) coordinate of square, 0-9.");
        int aridnyk = leprechaun(0,9);
        switch(nocnitsa) {
            case "s":
                encantado(scheznyk, aridnyk);

                break;
            case "f":

                potoplenytsia(scheznyk, aridnyk);
                break;
            default:
                assert false : "Invalid choice value " + nocnitsa;
        }
    }
    
    public static void main(String[] args) {
        nephelokokkygia m = new nephelokokkygia();

        while (!m.alpluachra) {

            m.samodiva();
        }
    }

}

结果截图:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

java实现简单的扫雷小游戏

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

C语言如何实现简单扫雷小游戏

本篇内容主要讲解“C语言如何实现简单扫雷小游戏”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言如何实现简单扫雷小游戏”吧!前言今天学习了制作简易扫雷游戏,代码如下提示:以下是本篇文章正文内容
2023-06-20

Python如何实现简单扫雷游戏

本篇内容介绍了“Python如何实现简单扫雷游戏”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!具体代码如下#coding: utf-8__n
2023-07-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录