扫雷游戏制作全过程01 地雷生成及表示
来源:互联网 发布:算法这本书怎么样 编辑:程序博客网 时间:2024/06/05 01:03
/*用来生成地雷的的类*/public class Mine{//雷区的长和宽及雷的个数final int width = 5;final int height = 4;final int mine_num = 6;//为了生成雷区方便int[][] mine= new int[height+2][width+2];public void createMine(){int num = 0;int[] x = new int[mine_num];int[] y = new int[mine_num];//用于判断是否重复boolean mark = true;while(num<mine_num){ x[num] = (int)(Math.random()*height+1); y[num] = (int)(Math.random()*width+1); mark = true; for(int i=0;i<num;i++) {if(x[num]==x[i]&&y[num]==y[i]) mark = false; } if(mark)num++;}//布雷for(int i=0;i<mine_num;i++){ mine[x[i]][y[i]] = -1;} }public void initMine(){ int mine_around = 0; for(int i=1;i<=height;i++) { for(int j=1;j<=width;j++) {if(mine[i][j]!=-1){ //扫描周围的地雷的个数 for(int k=i-1;k<=i+1;k++)for(int l=j-1;l<=j+1;l++) if(mine[k][l]==-1) mine_around++; mine[i][j]=mine_around; mine_around = 0;} }}}}
/*用来测试的类*/public class test{public static void main(String[] args){ Mine m = new Mine(); m.createMine(); m.initMine(); for(int i=0;i<=m.height+1;i++) { for(int j=0;j<=m.width+1;j++) {if(m.mine[i][j]!=-1)System.out.print(" "+m.mine[i][j]+" ");elseSystem.out.print(m.mine[i][j]+" "); } System.out.println(""); }}}
并未自己写生成随机数的算法,而是利用了Java中的java.lang.Math.random()的静态方法。
该方法返回一个[0,1)范围内的的double数。
1)我们用一个二维数组mine[height+2][width+2]来表示地雷(初始化每一项为0),其中假定值为-1的项为地雷。且假定有count个地雷;
2)我们利用生成的随机数对(x,y),将其限制在mine[1,1]到mine[height,width]之间;
3)循环判断,生成count个不重复的随机数对;
4)在mine[][]中把随机数对作为地址标记出来;
5)扫描数组,将非-1且mine[1,1]到mine[height,width]间的项周围的地雷数存到该项中。
当然了,如果想要玩家可以自定义地雷个数及地雷区的长宽的话,不用将mine_num,width,height设为常量。
下面是运行时的截图:
小感慨一下,终于知道如何贴代码了!
- 扫雷游戏制作全过程01 地雷生成及表示
- 扫雷游戏制作全过程00
- 扫雷游戏制作全过程04 添加音乐
- 扫雷程序-地雷位置生成
- 扫雷游戏制作全过程02 之 JButton 弯路
- 扫雷游戏制作全过程02 之JLabel弯路
- 扫雷游戏制作全过程 03 时间伪动画
- 扫雷游戏制作全过程05 之最终话
- noi 14:扫雷游戏地雷数计算
- 14_扫雷游戏地雷数计算
- 14:扫雷游戏地雷数计算
- 扫雷程序-地雷位置生成(类库版)
- Unity制作扫雷游戏
- 扫雷程序-地雷位置生成(类库版)2
- 扫雷程序-地雷位置生成(类库版)3
- 简单的扫雷游戏制作
- android 扫雷游戏及源代码
- 用JAVA制作的扫雷游戏
- WinCE6.0 USB驱动架构分析
- c# 装箱与拆箱问题
- Perl 学习笔记 --- 03
- C#的性能到底有多差?
- 怎样打造高性能的移动用户体验
- 扫雷游戏制作全过程01 地雷生成及表示
- C#获取当前系统信息的类
- 使用Exchange 2007部署邮件记录管理
- 在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式
- sap 开发ftp功能需要的一些函数
- Expdp/Impdp 并行导入导出详细测试
- oracle中sql语句中判断blob的大小
- 早教:平板电脑的新妙用
- php mongoDB 的curd