1. 程式人生 > >掃雷遊戲製作全過程01 地雷生成及表示

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

下面是執行時的截圖:

  

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

相關推薦

掃雷遊戲製作全過程01 地雷生成表示

/*用來生成地雷的的類*/ public class Mine { //雷區的長和寬及雷的個數 final int width = 5; final int height = 4; final int mine_num = 6; //為了生成雷區方便 int[]

簡單的掃雷遊戲製作

WEB前端學習交流群21 598399936 <!DOCTYPE html> <html><head><meta charset="UTF-8"><title></title><style>

Construct2小遊戲製作體驗新手指南

Construct2小遊戲製作體驗及新手指南 遊戲展示 遊戲策劃 遊戲設計&製作 下載安裝遊戲 建立專案 佈局、背景及人物圖層等的建立 人物屬性行為等 建立事件

JavaStudy——0086:掃雷遊戲地雷數計算

總時間限制: 1000ms 記憶體限制: 65536kB 描述 掃雷遊戲是一款十分經典的單機小遊戲。它的精髓在於,通過已翻開格子所提示的周圍格地雷數,來判斷未翻開格子裡是否是地雷。 現在給出n行m列的雷區中的地雷分佈,要求計算出每個非地雷格的周圍格地雷數。 注:每個格子周圍格有八個:上、

RPG遊戲製作-03-人物行走A*尋路演算法

在遊戲中,可以控制人物的方法一般有:1.鍵盤 2.虛擬搖桿 3.滑鼠 4.手機觸碰。鍵盤一般是在PC端較為常用,如果在遊戲中使用wasd等操作人物的話,那麼在移植到安卓端時,就需要使用虛擬搖桿或虛擬按鈕來模擬鍵盤,以實現處理的統一性。滑鼠類似於手機的單點觸碰,而手機觸碰一般分

五子棋遊戲製作的詳細思路原理

五子棋設計思路文件 一、程式設計原理、目的以及演算法 運用java swing和awt框架實現五子棋的繪圖,按鈕的事件響應等功能。主要分為三個類:主要UI類、棋子類、以及棋盤類。在原有的五子棋的基礎上增加了四子棋和六子棋的擴充套件玩法,對於六子棋來說,玩家需要每人一次下兩顆

noi 14:掃雷遊戲地雷數計算

14:掃雷遊戲地雷數計算 檢視提交統計提問 總時間限制: 1000ms 記憶體限制: 65536kB 描述 掃雷遊戲是一款十分經典的單機小遊戲。它的精髓在於,通過已翻開格子所提示的周圍格

國服遊戲封包解密-外掛製作全過程

[軟體]國服遊戲-路尼亞戰記 [工具]OD,Wep,以及其它的一些文字工具 [目的]研究遊戲保護技術,深論協議級分析。 意在拋磚引玉,抵制遊戲外掛。我會在每個分析點做出一些保護上的思考。 開始正文。 一個多月前,有看過一些遊戲,DNF,路尼亞戰記。他

國家商用password(五)基於SM2的軟件授權碼生成校驗

clas 信息 ecp register 方法 序列號 mod 生成 pub 將公開密鑰算法作為軟件註冊算法的優點是Cracker非常難通過跟蹤驗證算法得到註冊機。以下。將介紹使用SM2國密算法進行軟件註冊的方法。 生成授權碼 選擇SM2橢圓曲線參數(P,a,b,N,

掃雷遊戲

align 出現 continue section 計算 掃雷遊戲 top urn 個數 掃雷遊戲 發布時間: 2017年8月15日 22:17 最後更新: 2017年8月15日 22:21 時間限制: 1000ms 內存限制: 128M 描述 掃雷遊戲是一款

print打印頁生成排版樣式更改的技巧

eight 更改 cti 實現 cst close tdi 排版 element <script>function myPrint(obj){ //註:可以在打印頁生成前前通過js更改樣式,來實現排版,打印頁生成後通過setTimeout延遲將頁面樣式變回去

洛谷P2670 掃雷遊戲

phi font 字符 clas 文件包含 遊戲 class size 一個 題目描述 掃雷遊戲是一款十分經典的單機小遊戲。在n行m列的雷區中有一些格子含有地雷(稱之為地雷格),其他格子不含地雷(稱之為非地雷格)。玩家翻開一個非地雷格時,該格將會出現一個數字——提示周圍格子

掃雷遊戲(NOIP2015 普及組第二題)

經典 計算 其他 包括 lba 數據 noip htm close 描述 掃雷遊戲是一款十分經典的單擊小遊戲。在n行m列的雷區中有一些格子含有地雷(稱之為地雷格),其他格子不含地雷(稱之為非地雷格)。玩家翻開一個非地雷格時,該格將會出現一個數字——提示周圍格子中有多少個是地

kali linux-01 更新系統安裝vmtools

kali一.更新系統1.1 添加更新源地址root@kali:~# vi /etc/apt/sources.list在文件結尾添加更新源地址,並輸入:wq保存deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contribdeb-sr

微信紅包牛牛掃雷遊戲開發制作

軟件開發 紅包遊戲 龍火科技已開發多種紅包遊戲平臺,你可以在這裏找到你??想要的紅包遊戲。主營:微信紅包遊戲、紅包牛牛遊戲、掃雷遊戲。二8杠遊戲、五人大戰等等。開發咨詢聯系電話李先生18300041725(同微信)QQ:1244948540 系統亮點: 1、後臺可自由設置紅包類型

JFinal極速開發框架使用筆記(四) _JFinalDemoGenerator實體類生成映射自動化

checked rem 獲取 fig res ner constant 生成器 項目 運行_JFinalDemoGenerator生成實體類和映射之前的項目結構: 運行之後: 生成和改變的文件: 實體類: package com.wazn.model; import

Lifeline功能介紹01——日歷時間軸的查看

圖1 列表顯示 課堂 下拉 body 支持 image lin png   “Lifeline功能介紹”系列博客主要介紹目前為止已經實現的網站功能,包括:日歷及時間軸的查看、個人事件的添加、課堂信息的查詢等。 本篇介紹——日歷及時間軸的查看 #用戶登陸後會進入主頁界面,為日

Vivado下生成燒寫MCS文件

water bits == xxx mat word arw onf art Jtag模式: 1、打開Open Hardware Manager 2、 Tools ->Auto Connect 3、TCL輸入: write_cfgmem -format MCS -si

wtforms-表單生成驗證

arch 屬性 方法 pymysql 我們 request ipad html5 .data 介紹 wtforms是一個支持多個web框架的form組件,主要用來做表單的驗證以及生成的, 安裝 pip install wtforms 使用 自定義一個類,繼承wtform

JAVA 多線程制作大球吃小球 一、實現球的自動生成運動 生產消費模型

生產者 tar thread ive 聯系 print random 線程 ram /*文章中用到的代碼只是一部分,需要源碼的可通過郵箱聯系我 [email protected]*/ 前幾天用多線程實現了創建小球並移動,想到大魚吃小魚,便突發奇想要寫一個大球吃小球。首先第一