龙空技术网

扫雷游戏java

哈狗们T 214

前言:

当前你们对“java扫雷”大概比较注重,我们都想要了解一些“java扫雷”的相关内容。那么小编同时在网络上收集了一些有关“java扫雷””的相关文章,希望大家能喜欢,你们一起来学习一下吧!

前言

在我小的时候,电脑上有一款自带的游戏,每当打开电脑发现电脑没有网时,就会把这个游戏打开玩一玩,当时还不知道这个游戏是怎么玩的,而且这个游戏看起来非常单调无聊,所以直到现在通过网上查找资料才知道这个游戏的规则是什么,但我最近看着这个游戏的逻辑很简单,也想自己尝试着用代码敲一敲。

一、整体思路

扫雷游戏第一步,需要先确定雷区的长度和宽度,再确定雷区中地雷的个数。可以通过一个二维数组来实现,将二维数组中的所有数全部赋值为零,通过for循环来产生地雷,在数组中如果是地雷则值为-1,如果该值已经为-1了,则继续循环。通过这一操作我们可以把地雷的分布图给做出来。

再根据所得到的数组,通过对数组中的每个数进行访问,将每个数在二维数组中其他周围八个方格中有多少个地雷进行计数,如果该数组中的值为-1,则不需要进行操作,之后再把加起来的数填入该方格中,就能得到图像的内层图了。

图像建立好之后我们需要进行踩雷,插旗子或取旗子,打问号或去问号,三个操作。

踩雷有三种情况,一,如果踩到了方格在数组中的值为-1,则将所有的地雷全部显示出来,然后结束整个游戏。二,如果踩到了方格中的值为1,2,3,4,5,6,7,8就只需要显示该方格这个数就可以了。三,如果踩到的方格为0,则我们需要通过递归算法与计数这两步操作将其他周围方格为0全部显示出来并且它四周围绕的是不为0的方格。

插旗子和打问号都是两个一样的操作,选择一个在数组中的坐标,同时,我们可以建立一个新的数组,来记录这些坐标,当我们下一次通过踩地雷操作来访问这些坐标时,则会提示该坐标无法进行踩雷操作,而取旗子和去问号与插旗子和打问号操作相反,整体思路大致是这样。

二、递归算法与计数

这是我在做扫雷游戏这个过程中遇到的一个难点,就是将他周围的方格如果没有地雷全部都显示出来的操作。可以通过上下左右四个方向进行递归操作,从而来显示他周围所有的方格。但是递归算法如果不对他进行限制,那么,它将永无止境的进行下去,但是程序的递归深度总是有限的,所以,当程序运行到一定深度时,程序就会自动报错,因此,我们可以通过计数操作,来将这些已经递归过的方格排除掉,通过这样的操作就能够实现方格中空格和数的显示了。

具体代码如下

 private void chuli1(int H1,int H2){        StringBuilder JJ;        for(int i=H1-1;i<=H1+1;i++)        {            for(int j=H2-1;j<=H2+1;j++)            {                if(i>=0&&i<this.L2&&j>=0&&j<this.L1&&A[i][j]==0&&zhongyao[i][j]==0)                {                    if(tuixiang[i].charAt(j)=='■')                    {                        qizi--;                    }                    if(tuixiang[i].charAt(j)=='?')                    {                        wenhao--;                    }                    JJ=new StringBuilder(tuixiang[i]);                    JJ.setCharAt(j,' ');                    tuixiang[i]=JJ.toString();                    zhongyao[i][j]++;                    chuli1(i,j);                }                else                if(i>=0&&i<this.L2&&j>=0&&j<this.L1&&A[i][j]!=0&&A[i][j]!=-1&&zhongyao[i][j]==0)                {                    if(tuixiang[i].charAt(j)=='■')                    {                        qizi--;                    }                    if(tuixiang[i].charAt(j)=='?')                    {                        wenhao--;                    }                    JJ=new StringBuilder(tuixiang[i]);                    JJ.setCharAt(j,(char)(A[i][j]+48));                    zhongyao[i][j]++;                    tuixiang[i]=JJ.toString();                }            }        }    }
三、代码的运行过程四、整体代码

主程序代码:

import java.util.Scanner;public class SaoLei {    //雷区的长度    private int L1;    //雷区的宽度    private int L2;    //地雷的个数    private int shuliang;    //雷区图像1    private int [][]A;    //雷区图像2    private String []tuixiang;    //显示单元的个数    private int geshu;    //雷区图像3    private int [][]zhongyao;    //重要信息1    private int JDK;    //重要信息2    private int JKK;    //旗子的个数    private int qizi;    //问号的个数    private int wenhao;    //雷区长度和宽度的输入    private void T1(){        Scanner input=new Scanner(System.in);        System.out.println("提示:雷区的长度和宽度的范围为[2,64],地雷的个数要小于雷区的总个数");        System.out.print("请输入雷区的长度:");        do {            this.L1=input.nextInt();            if(this.L1<=1)            {                System.out.println("输入雷区的长度不正确!");                System.out.print("请重新输入:");            }            if(this.L1>64)            {                System.out.println("输入的雷区长度过大!");                System.out.print("请重新输入:");            }        }while (this.L1<=1||this.L1>64);        System.out.print("请输入雷区的宽度:");        do {            this.L2=input.nextInt();            if(this.L2<=1)            {                System.out.println("输入雷区的宽度不正确!");                System.out.print("请重新输入:");            }            if(this.L2>64)            {                System.out.println("输入的雷区宽度过大!");                System.out.print("请重新输入:");            }        }while (this.L2<=1||this.L2>64);        System.out.print("请输入地雷的个数:");        do {            this.shuliang=input.nextInt();            if(this.shuliang<=0||this.shuliang>=this.L1*this.L2)            {                System.out.println("输入地雷的个数不正确!");                System.out.print("请重新输入:");            }        }while (this.shuliang<=0||this.shuliang>=this.L1*this.L2);        tuixiang=new String[this.L2];        geshu=0;        zhongyao=new int[L2][L1];        qizi=0;        wenhao=0;        JDK=0;        JKK=0;    }    //地雷的随机分布    private void T2(){        A=new int[this.L2][this.L1];        int B,C;        for(int i=0;i<shuliang;i++)        {            do {                B=(int)(0+Math.random()*this.L2);                C=(int)(0+Math.random()*this.L1);                if(A[B][C]!=-1)                {                    A[B][C]=-1;                    break;                }            }while (true);        }        T10();    }    //对图像进行初始化    private void T3(){        StringBuilder []J=new StringBuilder[this.L2];        System.out.print("   ");        for(int i=0;i<this.L1;i++)        {            if(i+1<10)            {                System.out.print(i+1);                System.out.print("  ");            }            else            {                System.out.print(i+1+" ");            }        }        System.out.println();        System.out.print("  ▏-");        for(int i=1;i<L1;i++)        {            System.out.print("-▏-");        }        System.out.print("-▏");        for(int i=0;i<this.L2;i++)        {            J[i]=new StringBuilder("");        }        for(int i=0;i<this.L2;i++)        {            for(int j=0;j<this.L1;j++)            {                J[i].append("□");            }        }        for(int i=0;i<this.L2;i++)        {            tuixiang[i]=J[i].toString();        }        System.out.println();        for(int i=0;i<this.L2;i++)        {            if(i+1<10)            {                System.out.print(" "+(i+1)+"▏");            }            else            {                System.out.print(i+1+"▏");            }            for(int j=1;j<this.L1+1;j++)            {                System.out.print(tuixiang[i].charAt(j-1)+" ▏");            }            System.out.println();        }    }    //玩家进行的操作    private void T4(){        Scanner input=new Scanner(System.in);        int A,AA,AAA;        int []B=new int[2];        while (geshu!=L1*L2-shuliang)        {            System.out.print("                ");            System.out.printf("当前玩家的得分为【%d】",geshu);            System.out.println();            System.out.println("请玩家选择如下操作");            System.out.print("""                1.插旗子或取旗子                2.打问号或去除问号                3.揭开(踩地雷◑﹏◐)                """);            System.out.print("请输入你的选择:");            do {                A=input.nextInt();                if(A<1||A>3)                {                    System.out.println("输入错误!");                    System.out.print("请重新输入:");                }            }while (A<1||A>3);            if(A==1)            {                do {                    System.out.println("请玩家选择如下操作");                    System.out.print("""                        1.插旗子                        2.取旗子                        3.退出                        """);                    do {                        AA=input.nextInt();                        if(AA<1||AA>3)                        {                            System.out.println("输入错误!");                            System.out.print("请重新输入:");                        }                        if(AA==2&&qizi==0)                        {                            System.out.println("该雷区没有旗子可取!");                            System.out.println("请重新输入:");                        }                        if(AA==1&&qizi==L1*L2)                        {                            System.out.println("该区域的旗子已经被插满了!");                            System.out.println("请重新输入:");                        }                    }while ((AA<1||AA>3)||(AA==2&&qizi==0)||(AA==1&&qizi==L1*L2));                    if(AA==1)                    {                        do{                            T12(B);                            if(tuixiang[B[0]-1].charAt(B[1]-1)==' ')                            {                                System.out.println("该区域没有地雷!");                                System.out.print("请重新输入:");                            }                            if(tuixiang[B[0]-1].charAt(B[1]-1)=='■')                            {                                System.out.println("该区域已经插了旗子了!");                            }                            if(tuixiang[B[0]-1].charAt(B[1]-1)=='1'||tuixiang[B[0]-1].charAt(B[1]-1)=='2'||tuixiang[B[0]-1].charAt(B[1]-1)=='3'||tuixiang[B[0]-1].charAt(B[1]-1)=='4'||tuixiang[B[0]-1].charAt(B[1]-1)=='5'||tuixiang[B[0]-1].charAt(B[1]-1)=='6'||tuixiang[B[0]-1].charAt(B[1]-1)=='7'||tuixiang[B[0]-1].charAt(B[1]-1)=='8')                            {                                System.out.println("该区域没有地雷!");                                System.out.print("请重新输入:");                            }                        }while(tuixiang[B[0]-1].charAt(B[1]-1)==' '||tuixiang[B[0]-1].charAt(B[1]-1)=='■'||tuixiang[B[0]-1].charAt(B[1]-1)=='1'||tuixiang[B[0]-1].charAt(B[1]-1)=='2'||tuixiang[B[0]-1].charAt(B[1]-1)=='3'||tuixiang[B[0]-1].charAt(B[1]-1)=='4'||tuixiang[B[0]-1].charAt(B[1]-1)=='5'||tuixiang[B[0]-1].charAt(B[1]-1)=='6'||tuixiang[B[0]-1].charAt(B[1]-1)=='7'||tuixiang[B[0]-1].charAt(B[1]-1)=='8');                        T6(B);                        T8();                    }                    else                    if(AA==2)                    {                        do{                            T12(B);                            if(tuixiang[B[0]-1].charAt(B[1]-1)!='■')                            {                                System.out.println("该区域没有旗子!");                            }                        }while(tuixiang[B[0]-1].charAt(B[1]-1)!='■');                        T13(B);                        T8();                    }                    else                    {                        T8();                        break;                    }                }while(true);            }            else            if(A==2)            {                do {                    System.out.println("请玩家选择如下操作");                    System.out.print("""                        1.打问号                        2.去问号                        3.退出                        """);                    do {                        AAA=input.nextInt();                        if(AAA<1||AAA>3)                        {                            System.out.println("输入错误!");                            System.out.print("请重新输入:");                        }                        if(AAA==2&&wenhao==0)                        {                            System.out.println("该雷区没有问号!");                            System.out.println("请重新输入:");                        }                        if(AAA==1&&wenhao==L1*L2)                        {                            System.out.println("该区域的问号已经被填满了!");                            System.out.println("请重新输入:");                        }                    }while ((AAA<1||AAA>3)||(AAA==2&&wenhao==0)||(AAA==1&&wenhao==L1*L2));                    if(AAA==1)                    {                        do{                            T12(B);                            if(tuixiang[B[0]-1].charAt(B[1]-1)==' ')                            {                                System.out.println("该区域没有问号!");                                System.out.print("请重新输入:");                            }                            if(tuixiang[B[0]-1].charAt(B[1]-1)=='?')                            {                                System.out.println("该区域已经有问号了!");                            }                            if(tuixiang[B[0]-1].charAt(B[1]-1)=='1'||tuixiang[B[0]-1].charAt(B[1]-1)=='2'||tuixiang[B[0]-1].charAt(B[1]-1)=='3'||tuixiang[B[0]-1].charAt(B[1]-1)=='4'||tuixiang[B[0]-1].charAt(B[1]-1)=='5'||tuixiang[B[0]-1].charAt(B[1]-1)=='6'||tuixiang[B[0]-1].charAt(B[1]-1)=='7'||tuixiang[B[0]-1].charAt(B[1]-1)=='8')                            {                                System.out.println("该区域没有问号!");                                System.out.print("请重新输入:");                            }                        }while(tuixiang[B[0]-1].charAt(B[1]-1)==' '||tuixiang[B[0]-1].charAt(B[1]-1)=='?'||tuixiang[B[0]-1].charAt(B[1]-1)=='1'||tuixiang[B[0]-1].charAt(B[1]-1)=='2'||tuixiang[B[0]-1].charAt(B[1]-1)=='3'||tuixiang[B[0]-1].charAt(B[1]-1)=='4'||tuixiang[B[0]-1].charAt(B[1]-1)=='5'||tuixiang[B[0]-1].charAt(B[1]-1)=='6'||tuixiang[B[0]-1].charAt(B[1]-1)=='7'||tuixiang[B[0]-1].charAt(B[1]-1)=='8');                        T7(B);                        T8();                    }                    else                    if(AAA==2)                    {                        do{                            T16(B);                            if(tuixiang[B[0]-1].charAt(B[1]-1)!='?')                            {                                System.out.println("该区域没有问号!");                            }                        }while(tuixiang[B[0]-1].charAt(B[1]-1)!='?');                        T14(B);                        T8();                    }                    else                    {                        T8();                        break;                    }                }while (true);            }            else            {                T15(B);                T9(B);                T8();                if(JKK==1)                {                    System.out.println("该区域被旗子占据!");                    System.out.println("请将旗子去除在进行操作");                }                else                if(JKK==2)                {                    System.out.println("该区域被问号占据!");                    System.out.println("请将问号去除在进行操作");                }                JKK=0;                if(JDK==0)                {                    T11();                    if(geshu==L1*L2-shuliang)                    {                        System.out.println("恭喜玩家获得胜利^o^");                    }                    System.out.println("\n");                }                else                {                    System.out.println("游戏失败!");                    System.out.println("(╯‵□′)╯炸弹!•••*~●");                    break;                }            }        }    }    //揭开输入    private int[] T15(int []B){        Scanner input=new Scanner(System.in);        do {            System.out.print("请输入雷区的坐标:");            B[0]=input.nextInt();            B[1]=input.nextInt();            if((B[0]>this.L2||B[0]<=0)||(B[1]>this.L1||B[1]<=0))            {                System.out.println("输入的坐标错误!");            }            else            if(tuixiang[B[0]-1].charAt(B[1]-1)=='1'||tuixiang[B[0]-1].charAt(B[1]-1)=='2'||tuixiang[B[0]-1].charAt(B[1]-1)=='3'||tuixiang[B[0]-1].charAt(B[1]-1)=='4'||tuixiang[B[0]-1].charAt(B[1]-1)=='5'||tuixiang[B[0]-1].charAt(B[1]-1)=='6'||tuixiang[B[0]-1].charAt(B[1]-1)=='7'||tuixiang[B[0]-1].charAt(B[1]-1)=='8'||tuixiang[B[0]-1].charAt(B[1]-1)==' ')            {                System.out.println("该区域没有地雷!");            }        }while((B[0]>this.L2||B[0]<=0)||(B[1]>this.L1||B[1]<=0)||tuixiang[B[0]-1].charAt(B[1]-1)=='1'||tuixiang[B[0]-1].charAt(B[1]-1)=='2'||tuixiang[B[0]-1].charAt(B[1]-1)=='3'||tuixiang[B[0]-1].charAt(B[1]-1)=='4'||tuixiang[B[0]-1].charAt(B[1]-1)=='5'||tuixiang[B[0]-1].charAt(B[1]-1)=='6'||tuixiang[B[0]-1].charAt(B[1]-1)=='7'||tuixiang[B[0]-1].charAt(B[1]-1)=='8'||tuixiang[B[0]-1].charAt(B[1]-1)==' ');        return B;    }    //旗子坐标输入    private int[] T12(int []B){        Scanner input=new Scanner(System.in);        do {            System.out.print("请输入旗子的坐标:");            B[0]=input.nextInt();            B[1]=input.nextInt();            if((B[0]>this.L2||B[0]<=0)||(B[1]>this.L1||B[1]<=0))            {                System.out.println("输入的坐标错误!");            }            else            if(tuixiang[B[0]-1].charAt(B[1]-1)=='1'||tuixiang[B[0]-1].charAt(B[1]-1)=='2'||tuixiang[B[0]-1].charAt(B[1]-1)=='3'||tuixiang[B[0]-1].charAt(B[1]-1)=='4'||tuixiang[B[0]-1].charAt(B[1]-1)=='5'||tuixiang[B[0]-1].charAt(B[1]-1)=='6'||tuixiang[B[0]-1].charAt(B[1]-1)=='7'||tuixiang[B[0]-1].charAt(B[1]-1)=='8'||tuixiang[B[0]-1].charAt(B[1]-1)==' ')            {                System.out.println("该区域没有地雷!");            }        }while((B[0]>this.L2||B[0]<=0)||(B[1]>this.L1||B[1]<=0)||tuixiang[B[0]-1].charAt(B[1]-1)=='1'||tuixiang[B[0]-1].charAt(B[1]-1)=='2'||tuixiang[B[0]-1].charAt(B[1]-1)=='3'||tuixiang[B[0]-1].charAt(B[1]-1)=='4'||tuixiang[B[0]-1].charAt(B[1]-1)=='5'||tuixiang[B[0]-1].charAt(B[1]-1)=='6'||tuixiang[B[0]-1].charAt(B[1]-1)=='7'||tuixiang[B[0]-1].charAt(B[1]-1)=='8'||tuixiang[B[0]-1].charAt(B[1]-1)==' ');        return B;    }    //问号坐标输入    private int[] T16(int []B){        Scanner input=new Scanner(System.in);        do {            System.out.print("请输入旗子的坐标:");            B[0]=input.nextInt();            B[1]=input.nextInt();            if((B[0]>this.L2||B[0]<=0)||(B[1]>this.L1||B[1]<=0))            {                System.out.println("输入的坐标错误!");            }            else            if(tuixiang[B[0]-1].charAt(B[1]-1)=='1'||tuixiang[B[0]-1].charAt(B[1]-1)=='2'||tuixiang[B[0]-1].charAt(B[1]-1)=='3'||tuixiang[B[0]-1].charAt(B[1]-1)=='4'||tuixiang[B[0]-1].charAt(B[1]-1)=='5'||tuixiang[B[0]-1].charAt(B[1]-1)=='6'||tuixiang[B[0]-1].charAt(B[1]-1)=='7'||tuixiang[B[0]-1].charAt(B[1]-1)=='8'||tuixiang[B[0]-1].charAt(B[1]-1)==' ')            {                System.out.println("该区域没有地雷!");            }        }while((B[0]>this.L2||B[0]<=0)||(B[1]>this.L1||B[1]<=0)||tuixiang[B[0]-1].charAt(B[1]-1)=='1'||tuixiang[B[0]-1].charAt(B[1]-1)=='2'||tuixiang[B[0]-1].charAt(B[1]-1)=='3'||tuixiang[B[0]-1].charAt(B[1]-1)=='4'||tuixiang[B[0]-1].charAt(B[1]-1)=='5'||tuixiang[B[0]-1].charAt(B[1]-1)=='6'||tuixiang[B[0]-1].charAt(B[1]-1)=='7'||tuixiang[B[0]-1].charAt(B[1]-1)=='8'||tuixiang[B[0]-1].charAt(B[1]-1)==' ');        return B;    }    //给雷区加旗帜    private void T6(int []B){        StringBuilder A;        if(tuixiang[B[0]-1].charAt(B[1]-1)=='?')        {            wenhao--;        }        qizi++;        A=new StringBuilder(tuixiang[B[0]-1]);        A.setCharAt(B[1]-1,'■');        tuixiang[B[0]-1]=A.toString();    }    //给雷区减旗帜    private void T13(int []B){        StringBuilder A;        A=new StringBuilder(tuixiang[B[0]-1]);        A.setCharAt(B[1]-1,'□');        tuixiang[B[0]-1]=A.toString();        qizi--;    }    //给图像加问号    private void T7(int []B){        StringBuilder A;        if(tuixiang[B[0]-1].charAt(B[1]-1)=='■')        {            qizi--;        }        wenhao++;        A=new StringBuilder(tuixiang[B[0]-1]);        A.setCharAt(B[1]-1,'?');        tuixiang[B[0]-1]=A.toString();    }    //给图像减问号    private void T14(int []B){        StringBuilder A;        A=new StringBuilder(tuixiang[B[0]-1]);        A.setCharAt(B[1]-1,'□');        tuixiang[B[0]-1]=A.toString();        wenhao--;    }    //揭开    private void T9(int []B){        StringBuilder JJ;        int H1,H2;        if(tuixiang[B[0]-1].charAt(B[1]-1)=='■')        {            JKK=1;        }        else        if(tuixiang[B[0]-1].charAt(B[1]-1)=='?')        {            JKK=2;        }        else        {            if(A[B[0]-1][B[1]-1]==-1)            {                T15();                JDK=1;            }            else            {                if(A[B[0]-1][B[1]-1]==0)                {                    H1=B[0]-1;                    H2=B[1]-1;                    chuli1(H1,H2);                }                else                {                    JJ=new StringBuilder(tuixiang[B[0]-1]);                    JJ.setCharAt(B[1]-1,(char)(A[B[0]-1][B[1]-1]+48));                    tuixiang[B[0]-1]=JJ.toString();                    zhongyao[B[0]-1][B[1]-1]++;                }            }        }    }    //处理1    private void chuli1(int H1,int H2){        StringBuilder JJ;        for(int i=H1-1;i<=H1+1;i++)        {            for(int j=H2-1;j<=H2+1;j++)            {                if(i>=0&&i<this.L2&&j>=0&&j<this.L1&&A[i][j]==0&&zhongyao[i][j]==0)                {                    if(tuixiang[i].charAt(j)=='■')                    {                        qizi--;                    }                    if(tuixiang[i].charAt(j)=='?')                    {                        wenhao--;                    }                    JJ=new StringBuilder(tuixiang[i]);                    JJ.setCharAt(j,' ');                    tuixiang[i]=JJ.toString();                    zhongyao[i][j]++;                    chuli1(i,j);                }                else                if(i>=0&&i<this.L2&&j>=0&&j<this.L1&&A[i][j]!=0&&A[i][j]!=-1&&zhongyao[i][j]==0)                {                    if(tuixiang[i].charAt(j)=='■')                    {                        qizi--;                    }                    if(tuixiang[i].charAt(j)=='?')                    {                        wenhao--;                    }                    JJ=new StringBuilder(tuixiang[i]);                    JJ.setCharAt(j,(char)(A[i][j]+48));                    zhongyao[i][j]++;                    tuixiang[i]=JJ.toString();                }            }        }    }    //图像显示    private void T8(){        System.out.print("   ");        for(int i=0;i<this.L1;i++)        {            if(i+1<10)            {                System.out.print(i+1);                System.out.print("  ");            }            else            {                System.out.print(i+1+" ");            }        }        System.out.println();        System.out.print("  ▏-");        for(int i=1;i<L1;i++)        {            System.out.print("-▏-");        }        System.out.print("-▏");        System.out.println();        for(int i=0;i<this.L2;i++)        {            if(i+1<10)            {                System.out.print(" "+(i+1)+"▏");            }            else            {                System.out.print(i+1+"▏");            }            for(int j=1;j<this.L1+1;j++)            {                System.out.print(tuixiang[i].charAt(j-1)+" ▏");            }            System.out.println();        }    }    //String图像处理    private void T10(){        int J=0;        for(int i=0;i<this.L2;i++)        {            for(int j=0;j<this.L1;j++)            {                if(A[i][j]!=-1)                {                    if(i-1>=0&&j-1>=0)                    {                        if(A[i-1][j-1]==-1)                        {                            J++;                        }                    }                    if(i-1>=0)                    {                        if(A[i-1][j]==-1)                        {                            J++;                        }                    }                    if(i-1>=0&&j+1<this.L1)                    {                        if(A[i-1][j+1]==-1)                        {                            J++;                        }                    }                    if(j-1>=0)                    {                        if(A[i][j-1]==-1)                        {                            J++;                        }                    }                    if(j+1<this.L1)                    {                        if(A[i][j+1]==-1)                        {                            J++;                        }                    }                    if(i+1<this.L2&&j-1>=0)                    {                        if(A[i+1][j-1]==-1)                        {                            J++;                        }                    }                    if(i+1<this.L2)                    {                        if(A[i+1][j]==-1)                        {                            J++;                        }                    }                    if(i+1<this.L2&&j+1<this.L1)                    {                        if(A[i+1][j+1]==-1)                        {                            J++;                        }                    }                    A[i][j]=J;                }                J=0;            }        }    }    //geshu计数    private void T11() {        for(int i=0;i<L2;i++)        {            for(int j=0;j<L1;j++)            {                if(zhongyao[i][j]==1)                {                    geshu++;                }                if(zhongyao[i][j]!=0)                {                    zhongyao[i][j]++;                }            }        }    }    //最后的显示    private void T15(){        StringBuilder II;        for(int i=0;i<L2;i++)        {            II=new StringBuilder(tuixiang[i]);            for(int j=0;j<L1;j++)            {                if(A[i][j]==-1)                {                    II.setCharAt(j,'●');                }            }            tuixiang[i]=II.toString();        }    }    //游戏说明    private void youxishuoming(){        System.out.println("""                               1.尽快找到雷区中的所有不是地雷的格子,而不许踩到地雷。                2.点开的数字是几,则说明该数字旁边的8个位置中有几个雷。                3.如果挖开的是地雷,则会输掉游戏。                4.其中“■”代表旗子,“●”代表地雷。                5.插旗子的作用是表示该区域有地雷。                6.打问号的作用是表示该区域不确定是否有地雷。                7.插旗子或打问号的区域无法进行揭开操作。                """);    }    //总方法    public void asd(){        Scanner input=new Scanner(System.in);        int A;        do {            System.out.print("""                《扫雷游戏》                1.开始游戏                2.游戏说明                3.退出游戏                """);            System.out.print("请输入你的选择:");            do {                A=input.nextInt();                if(A!=1&&A!=2&&A!=3)                {                    System.out.println("输入错误!");                    System.out.print("请重新输入:");                }            }while(A!=1&&A!=2&&A!=3);            if(A==1)            {                T1();                T2();                T3();                T4();            }            else            if(A==2)            {                youxishuoming();            }            else            {                System.exit(0);            }        }while (true);    }}

测试代码

public class str1 {    public static void main(String[] args) {        SaoLei A=new SaoLei();        A.asd();    }}

标签: #java扫雷