JAVA扫雷游戏代码详解,java课程设计扫雷游戏

  JAVA扫雷游戏代码详解,java课程设计扫雷游戏

  本文分享java实现扫雷游戏入门程序的具体代码,供大家参考。具体内容如下。

  分析:

  1.先铺一个10*10的闪电阵列,也就是二维阵列图,每个地方都是0。

  2.在雷霆阵中随机选取10个位置设置为雷霆,雷霆用-1表示,即map[I][j]=-1;

  3.数一数雷声周围的数字。有两种方法。

  第一种方法是用二维数组保存所有雷的位置,然后遍历所有雷,检查雷周围的八个位置。如果值为-1,就不要做;如果值不是-1,就这样做。

  二是遍历所有不打雷的地方,然后计算周围打雷的次数,就是那个位置的值。

  个人认为第一种方法更好,时间复杂度更低。如果闪电阵列比较大,比如50*50,那么第二种方法明显比第一种慢很多)

  另外值得注意的是,在生成雷霆所在位置的随机数时,要避免生成的随机数重复的问题。

  我们标记了雷场的每一个地方,如图所示:

  我们使用一维数组来存储标签索引=[0,1,2,3.97,98,99]。

  那么生成的随机数的范围就是[0,100]。比如第一个随机数是22,那么这个数就是最上面图标数为22的地方,然后indexs数组中的indexs [22]保存indexs数组的最后一个数,即Indexs[22]=99;下次生成随机数时,范围将是[0,99]。此时,indexs[]数组中不会有数字22,所以不会有重复的问题。

  计算雷周围位置的第一种方法的代码如下:

  /* * *扫雷游戏的这种部署*/导入Java . util . random;public class Miner _ 1 { private static int[][]map;私有静态随机ran=new Random();私有静态int[]indexs;private static int[][]minePos;//用于保存所有迅雷私有静态int x=10的位置;//c表示行数私有静态int y=10//c表示列数private static int n=10//n表示迅雷公共静态void main(string[]args){ init();//初始化arrange();//calMines();//计算迅雷周围的disp();} private static void init(){ map=new int[x][y];indexs=new int[x * y];for(int I=0;I .索引.长度;I){ indexs[I]=I;} minePos=new int[n][2];} private static void arrange(){ int CNT=0;while(CNT n){ int index=creation index(indexs . length-CNT);int r=index/map[0]。长度;int c=index % map[0]。长度;map[r][c]=-1;//记录雷霆minePos[cnt][0]=r的位置;minePos[CNT][1]=c;cnt} }//该方法用于生成随机数私有静态int creat index(int right){ int index=ran . nextint(right);int value=indexs[index];indexs[index]=indexs[右-1];返回值;} Private Static Void Calmines(){//遍历每条射线for(int I=0;I mine pos . length;I){ int r=minePos[I][0];int c=minePos[I][1];//调用函数在雷霆周围寻找(int j=r-

  1; j <= r + 1; j++) {                for (int k = c - 1; k <= c + 1; k++) {                    if (checkIndex(j, k) && map[j][k] != -1) {                        map[j][k]++;                    }                }            }        }    }     private static boolean checkIndex(int r, int c) {        return (r >= 0 && r < map.length) && (c >= 0 && c < map[r].length);    }     private static void disp() {        for (int i = 0; i < map.length; i++) {            for (int j = 0; j < map[i].length; j++) {                System.out.printf("%-3d", map[i][j]);            }            System.out.println();        }    }}第二种遍历每一个不为雷的地方然后计算周围有多少个雷,如果没有雷,该位置就为0,如果有一个雷,该位置就+1,代码如下

  

import java.util.Random; /** * 扫雷算法 * @author OnTheRoad_ * */public class Miner2 {    private static int[][] map;    private static int[] indexs;//为雷的位置编号     private static Random ran;//随机数类,调用产生随机数     public static void main(String[] args) {        init();//初始化雷阵 假设10*10        arrange();//布雷 假设为10个雷        calmine();//计算雷数        disp();//打印    }     private static void init() {        ran = new Random();        map = new int[10][10];        indexs = new int[100];        for (int i = 0; i < indexs.length; i++) {            indexs[i] = i;        }    }     //布雷 10个    private static void arrange() {        int cnt = 0;        while (cnt < 10) {            int index = creatIndex(indexs.length - cnt);//生成雷序列随机数            int r = index / 10;            int c = index % 10;            map[r][c] = -1;            cnt++;        }    }     //此方法为生成雷位置的随机数 并且避免重复    private static int creatIndex(int right) {        int index = ran.nextInt(right);        int value = indexs[index];        indexs[index] = indexs[right - 1];        return value;    }     //遍历每一个不是雷的地方 计算周围的雷数    private static void calmine() {        for (int i = 0; i < map.length; i++) {            for (int j = 0; j < map[i].length; j++) {                if (map[i][j] != -1) {                    map[i][j] = calRound(i, j);                }            }        }    }     private static int calRound(int r, int c) {        int cnt = 0;        for (int i = r - 1; i <= r + 1; i++) {            for (int j = c - 1; j <= c + 1; j++) {                if (checkIndex(i, j) && map[i][j] == -1) {                    cnt++;                }            }        }        return cnt;    }     private static boolean checkIndex(int r, int c) {        return (r >= 0 && r < 10) && (c >= 0 && c < 10);    }     private static void disp() {        for (int i = 0; i < map.length; i++) {            for (int j = 0; j < map[i].length; j++) {                System.out.printf("%3d", map[i][j]);            }            System.out.println();        }    }}

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

 

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: