掃雷遊戲製作全過程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設爲常量。

下面是運行時的截圖:

  

小感慨一下,終於知道如何貼代碼了!






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