扫雷游戏制作全过程01 地雷生成及表示

/*用来生成地雷的的类*/
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]+"  ");
			else
			System.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设为常量。

下面是运行时的截图:

  

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






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章