扫雷游戏制作全过程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)扫描数组,将非-1mine[1,1]mine[height,width]间的项周围的地雷数存到该项中。

当然了,如果想要玩家可以自定义地雷个数及地雷区的长宽的话,不用将mine_numwidthheight设为常量。

下面是运行时的截图:

  

小感慨一下,终于知道如何贴代码了!

	
				
		
原创粉丝点击