java实现简单的扫雷小游戏

作者:boogie_liu 时间:2022-09-14 19:23:24 

使用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;
   }

/**
    * 显示矩阵
    * @param bwbachod=boolean //用于判断是否踩雷
    */
   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();
       }
   }

/**
    *就算邻近雷的值
    * @param domovoi=纵坐标
    * @param dolia=横坐标
    * @return 当前点的值
    */
   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();
       }
   }

}

结果截图:

java实现简单的扫雷小游戏

来源:https://blog.csdn.net/weixin_45652057/article/details/117121495

标签:java,扫雷
0
投稿

猜你喜欢

  • 谈谈RxJava2中的异常及处理方法

    2023-05-12 09:18:11
  • Android实现在xml文件中引用自定义View的方法分析

    2021-05-28 01:43:57
  • Springboot轻量级的监控组件SpringbootAdmin

    2023-08-25 10:08:31
  • 如何通过Android Stduio来编写一个完整的天气预报APP

    2023-10-11 17:45:01
  • c#使用反射调用类型成员示例

    2023-02-27 08:54:43
  • Java线程中的常见方法(start方法和run方法)

    2023-11-16 17:41:32
  • Spring多个数据源配置详解

    2023-09-20 18:22:18
  • java实现单词搜索迷宫游戏

    2023-11-10 22:44:32
  • mac系统下载、安装、使用AndroidStudio

    2021-06-04 03:28:40
  • C#使用for循环移除HTML标记

    2022-02-02 08:35:23
  • java 多态性详解及常见面试题

    2023-03-15 18:08:49
  • SpringCloud客户端报错:- was unable to send heartbeat!的解决

    2021-08-13 14:08:11
  • Android实现绘制折线图APP代码

    2022-12-10 07:50:02
  • springboot整合腾讯云短信开箱即用的示例代码

    2023-04-02 06:06:38
  • android 通过MediaRecorder实现简单的录音示例

    2023-07-29 06:03:54
  • JAVA Integer类常用方法解析

    2021-09-01 06:51:08
  • Android自定义View之组合控件实现类似电商app顶部栏

    2023-07-26 22:14:10
  • C#中string.format用法详解

    2023-07-12 21:25:48
  • Flutter进阶之实现动画效果(三)

    2023-01-26 05:12:49
  • idea手动刷新git分支的详细教程

    2022-04-05 11:53:43
  • asp之家 软件编程 m.aspxhome.com