VB掃雷游戲的設(shè)計與開發(fā)(論文+答辯PPT+系統(tǒng))
VB掃雷游戲的設(shè)計與開發(fā)(論文+答辯PPT+系統(tǒng)),VB,掃雷,游戲,設(shè)計,開發(fā),論文,答辯,PPT,系統(tǒng)
掃雷游戲的設(shè)計與掃雷游戲的設(shè)計與開發(fā)開發(fā) 指導(dǎo)教師:學(xué)生姓名:編寫目的編寫目的 在計算機逐步滲入社會生活各個層面的今天,計算機已經(jīng)成為人們?nèi)粘I囊徊糠?,越來越多的人使用計算機辦公、娛樂等等。掃雷游戲是Windows操作系統(tǒng)自帶的一款小游戲,在過去的幾年里,Windows操作系統(tǒng)歷經(jīng)數(shù)次換代更新,變得越來越龐大、復(fù)雜,功能也越來越強大,但是這款小游戲依然保持原來的容貌,可見這款小游戲受到越來越多人的喜愛。本次的畢業(yè)設(shè)計我將利用Visual Basic6.0作為開發(fā)工具,開發(fā)一款類似的“掃雷游戲”。用戶需求分析用戶需求分析 本系統(tǒng)的具體功能及其操作流程,是實際調(diào)研所得到的。具有一定的實用性和可用性,管理人員的負擔.節(jié)省時間,提高工作效率。權(quán)衡了現(xiàn)有的各種數(shù)據(jù)庫及其開發(fā)過程中的優(yōu)缺點,我們選用了VB6.0這一專業(yè)化的面向?qū)ο蟮目蛻?服務(wù)器前臺應(yīng)用開發(fā)工具。游戲規(guī)則游戲規(guī)則 流程規(guī)劃大致上可以分為三個部分,分別為:畫面初始、游戲者按下第一個方塊和為非地雷方塊時展開。畫面初始時,以游戲者最后一次設(shè)定的地雷區(qū)大小為范圍畫出地雷區(qū),但此時并未產(chǎn)生地雷。當游戲者按下第一個方塊時產(chǎn)生地雷資料并啟動定時器,為何在游戲者按下第一個方塊才產(chǎn)生地雷資料呢?其主要的用意在于不要讓游戲者第一次就踩到地雷,這樣在某種程度上可以提高游戲者游玩的氣氛。接著就是如何判斷按下的方塊是非地雷時的處理,這也是整個游戲的技術(shù)核心,我們可以通過遞歸的觀念來檢查周邊的方塊是否含有地雷及是否繼續(xù)往外翻開。運行環(huán)境運行環(huán)境 軟件環(huán)境:1.Windows Xp/200082.VB6.0 系統(tǒng)流程系統(tǒng)流程 界面設(shè)計界面設(shè)計說明如下:游戲窗口(Form)。為了避免因改變窗口大小而造成畫面呈現(xiàn)不美觀,在這里將BorderStyle屬性設(shè)定為3(雙線固定對話框),即無法以窗口邊緣進行窗口大小調(diào)整。:地雷數(shù)顯示區(qū)(PictureBox)。:游戲狀態(tài)(Image)。:游戲時間顯示區(qū)(PictureBox)。:計數(shù)及狀態(tài)區(qū)(PictureBox)。:地圖區(qū)圖樣(Image)。:地雷區(qū)(PictureBox)。:存儲圖片的組件,包括游戲狀態(tài)圖片、地雷區(qū)圖片、地雷數(shù)及秒數(shù)數(shù)字圖片(Imagelist)。:秒數(shù)控制(Timer)。鼠標事件鼠標事件 在本游戲中,我們利用右鍵的MouseDown事件來標示“已標示”方塊,利用左鍵的MouseDown事件,來標示游戲者準備按下的方塊,再利用左鍵的MouseUp事件來確定翻開的方塊。這樣的用意在于,假如游戲者發(fā)現(xiàn)按下的方塊是錯誤的,此時只要不松開左鍵,同時按下右鍵,該方塊就會被標示為“已標示”方塊,若再松開左鍵,則該方塊因為已成為“已標示”方塊,所以就無法翻開。地雷及雷區(qū)表面探測情況地雷及雷區(qū)表面探測情況 因為兩個數(shù)組維數(shù)皆為2,所以我們通過雙循環(huán)做數(shù)據(jù)的對比工作。另外,當游戲玩家按下非地雷的方塊時,程序必須自動將周邊非地雷的方塊翻開,這個動作我們也可以通過雙循環(huán)的方式檢查以按下的方塊為中心與周邊的8個方塊所形成的3*3的二維數(shù)組,鼠標指針所指即是代表按下的方塊,利用雙循環(huán)作數(shù)據(jù)的對比,不但速度快,而且在設(shè)計階段,程序的架構(gòu)也比較清楚。程序設(shè)計時雙循環(huán)常常搭配二維數(shù)組使用。游戲難度的選擇游戲難度的選擇 設(shè)置了“初級”,“中級”,“高級”以及“自定義”四個不同的難度級別,“初級”,“中級”,“高級”中的雷區(qū)大小和地雷總數(shù)是已經(jīng)設(shè)計好了的,如果玩家想要自己設(shè)置這些參數(shù),可單擊“游戲”“自定義”,然后在“設(shè)置”中輸入行數(shù),列數(shù)及地雷數(shù),在這里我對行數(shù)及列數(shù)做出了一個限定,及行數(shù)和列數(shù)的最大值分別為24和30,當在設(shè)置地雷數(shù)的時候,如果地雷數(shù)大于或等于行數(shù)和列數(shù)的乘積,或者地雷數(shù)小于零,地雷數(shù)都將自動的轉(zhuǎn)換為:地雷數(shù)=(行數(shù)-1)(列數(shù)-1)。判斷游戲成功完成 當在規(guī)定的時間內(nèi)將所有的雷都正確的標示出來,游戲就會有一個彈出框提示你在多長時間內(nèi)完成當前難度下的游戲。還有一種情況便是當只剩下地雷未探測的時候,及雷區(qū)方塊總數(shù)-已清除的方塊數(shù)=地雷總數(shù)的話,游戲也將成功完成。判斷游戲失敗 當鼠標左鍵按下的方塊為地雷方塊事,地雷將會被引爆,游戲立即結(jié)束。當在設(shè)定時間內(nèi)未探測完所有的地雷,地雷也將會引爆,對于這第二種行為,我們可以通過Timer組件來加以控制。利用Timer組件在固定時間即會觸發(fā)時間的特性,在事件觸發(fā)時便將計數(shù)值加一,直到判斷計數(shù)值超過限定值時,即地雷引爆。結(jié)結(jié) 論論 在老師的悉心幫助下,我完成了該論文。在此,我要深深感謝我的指導(dǎo)老師和所有幫助,饒力老師在我做課題期間所給予的大力支持,他的幫助保證了論文工作的順利完成。通過此管理信息系統(tǒng)的開發(fā),做到了理論聯(lián)系實際,將書本上學(xué)到的知識與具體實踐充分結(jié)合起來,進一步明確了開發(fā)管理信息系統(tǒng)的方法和思想;既加深了對管理信息系統(tǒng)的認識,又進一步鞏固了以前所學(xué)的計算機軟件開發(fā)方面的知識,提高了軟件開發(fā)的水平,從而為今后在實際工作中更好的應(yīng)用計算機進行信息管理打下了堅實的基礎(chǔ)。致致 謝謝 首先感謝在選題到成稿的過程中,導(dǎo)師*悉心指導(dǎo)與關(guān)懷,及在我完成論文的過程當中給予我?guī)椭膶W(xué)院的各位老師和同學(xué),是在他們的大力支持下我的論文才得以順利完成。再一次感謝各位老師的指導(dǎo)及幫助。掃雷游戲的設(shè)計與開發(fā)掃雷游戲的設(shè)計與開發(fā)摘摘 要要本論文研究的是以 Visual Basic 6.0 為開發(fā)環(huán)境,設(shè)計并開發(fā)一款掃雷游戲,其功能類似于 Windows 操作系統(tǒng)自帶的掃雷游戲。論文首先介紹了制作游戲的整體思路及整個游戲設(shè)計的流程規(guī)劃,然后介紹了雷區(qū)的布置及地雷隨機產(chǎn)生的實現(xiàn)方法;重點介紹了在游戲過程中各事件的處理,其中又以鼠標事件和清除未靠近地雷區(qū)方塊這兩方面最為最要,鼠標事件是利用鼠標所發(fā)出的信息了解使用者的意圖,進而做出相對應(yīng)的動作,而清除未靠近地雷區(qū)方塊由于引進了“遞歸”這個概念而使其簡單化。本次設(shè)計只是完成了掃雷游戲的基本功能,在細節(jié)方面仍有待以后完善。關(guān)鍵詞關(guān)鍵詞:掃雷;Visual Basic 6.0;事件;遞歸The Design and Development of Mine GameAbstractWhat my thesis research for is basic on the develop environment of Visual Basic 6.0 , design and develop a mine game,its function is similar to the mine games of the Windows Operating System .The thesis has introduced the layout of mined areas and the method of how to create the mines at random. It use vairies of components in Visual Basic 6.0 and the combination of some simple calculations; the thesis lays emphasis on introducing the processing of each event in the game. Among these events ,the mouse event and the event of clearance of the area which isnt close to the mine field are much more important.The theory of mouse event is that the intention of user is learned by the information sent out by the mouse and then the program runs according to the information .The other event is simplified by the introduction of the concept of recursion.This design has been completed the basic function of mine game. The details still need to be improved.Key words: Mine game, Visual Basic 6.0, Affairs, Recursion目目 錄錄論文總頁數(shù):18 頁1引言.11.1 課題背景及意義.11.2 開發(fā)工具的選用及介紹.12游戲的總體分析與設(shè)計.32.1 設(shè)計構(gòu)想.32.2 流程規(guī)劃.42.3 畫面規(guī)劃.53游戲的詳細設(shè)計.63.1 游戲初始化.63.2 雷區(qū)的布置.93.3 游戲中主要模塊的介紹與使用.103.3.1 鼠標事件.103.3.2 地雷及雷區(qū)表面探測情況.123.3.3 清除未靠近地雷的方塊.123.3.4 游戲難度的選擇.143.4 游戲的判斷.143.4.1 游戲成功完成.143.4.2 游戲失敗.144游戲測試結(jié)果.15結(jié) 論.15參考文獻.16致 謝.17聲 明.18第 1 頁 共 18 頁1 1 引言引言1.11.1課題背景課題背景及意義及意義在計算機逐步滲入社會生活各個層面的今天,計算機已經(jīng)成為人們?nèi)粘I囊徊糠郑絹碓蕉嗟娜耸褂糜嬎銠C辦公、娛樂等等。掃雷游戲是 Windows 操作系統(tǒng)自帶的一款小游戲,在過去的幾年里,Windows 操作系統(tǒng)歷經(jīng)數(shù)次換代更新,變得越來越龐大、復(fù)雜,功能也越來越強大,但是這款小游戲依然保持原來的容貌,可見這款小游戲受到越來越多人的喜愛。本次的畢業(yè)設(shè)計我將利用 Visual Basic6.0 作為開發(fā)工具,開發(fā)一款類似的“掃雷游戲” 。通過研究 Windows 操作系統(tǒng)自帶的掃雷游戲,我們可以發(fā)現(xiàn)在這個游戲中主要有以下兩個關(guān)鍵的地方:第一個是初始化問題,包括隨機產(chǎn)生本局游戲中雷的總數(shù),雷的分布對于每一個小區(qū)域如何獲取周圍地區(qū)分布的雷數(shù)等等。第二就是對鼠標事件的處理問題,既在游戲過程中對鼠標事件應(yīng)如何做出反應(yīng)。經(jīng)過四年的大學(xué)學(xué)習(xí),我對理論知識已經(jīng)有了一定的了解與認知,本次的畢業(yè)設(shè)計便是將書本上所學(xué)的理論知識與實際相結(jié)合,同時也是對所學(xué)知識的一種檢查,希望通過本次的畢業(yè)設(shè)計使自己在程序的開發(fā)和設(shè)計上有新的認識并能有所提高。本次畢業(yè)設(shè)計既鍛煉了我們的實際動手能力,又在老師的指導(dǎo)下進行了一次模擬實際產(chǎn)品的開發(fā),對于我們以后工作能力的培養(yǎng)具有重要意義。1.21.2 開發(fā)工具的選用及介紹開發(fā)工具的選用及介紹Visual Basic(VB)是一種由微軟公司開發(fā)的包含協(xié)助開發(fā)環(huán)境的事件驅(qū)動編程語言。從任何標準來說,VB 都是世界上使用人數(shù)最多的語言不僅是盛贊 VB 的開發(fā)者還是抱怨 VB 的開發(fā)者的數(shù)量。它源自于 BASIC 編程語言。VB擁有圖形用戶界面(GUI)和快速應(yīng)用程序開發(fā)(RAD)系統(tǒng),可以輕易的使用DAO、RDO、ADO 連接數(shù)據(jù)庫,或者輕松的創(chuàng)建 ActiveX 控件。程序員可以輕松的使用 VB 提供的組件快速建立一個應(yīng)用程序。1991 年,微軟公司推出了 Visual Basic 1.0 版。這在當時引起了很大的轟動。這個連接編程語言和用戶界面的進步被稱為 Tripod(有些時候叫做Ruby) ,最初的設(shè)計是由阿蘭庫珀(Alan Cooper)完成的。許多專家把 VB 的出現(xiàn)當做是軟件開發(fā)史上的一個具有劃時代意義的事件。其實,以我們現(xiàn)在的目光來看,VB1.0 的功能實在是太弱了;(不過最近 VB6.0, VB.NET 的功能相當大!) 。但在當時,它是第一個“可視”的編程軟件。這使得程序員欣喜之極,第 2 頁 共 18 頁都嘗試在 VB 的平臺上進行軟件創(chuàng)作。微軟也不失時機地在四年內(nèi)接連推出VB2.0,VB3.0,4.0 三個版本。并且從 VB3 開始,微軟將 ACCESS 的數(shù)據(jù)庫驅(qū)動集成到了 VB 中,這使得 VB 的數(shù)據(jù)庫編程能力大大提高。從 VB4 開始,VB 也引入了面向?qū)ο蟮某绦蛟O(shè)計思想。VB 功能強大,學(xué)習(xí)簡單。而且,VB 還引入了“控件”的概念,使得大量已經(jīng)編好的 VB 程序可以被我們直接拿來使用。VB1.0 的 DOS 版本 VB1.0 于 1991 年發(fā)布。這個連接編程語言和用戶界面的進步被稱為 Tripod(有些時候叫做 Ruby) ,最初的設(shè)計是由阿蘭庫珀(Alan Cooper)完成的。VB 2005 的“顯著”優(yōu)點是,可以直接編寫出 XP 風(fēng)格的按鈕,以及其他的控件。但是其編寫的小程序占用近 10MB 的內(nèi)存。通過幾年的發(fā)展,它已成為一種專業(yè)化的開發(fā)語言和環(huán)境。用戶可用 Visual Basic 快速創(chuàng)建 Windows 程序,現(xiàn)在還可以編寫企業(yè)水平的客戶端/服務(wù)器程序及強大的數(shù)據(jù)庫應(yīng)用程序。VB會吸引更多的贊譽和批評,也會繼續(xù)為廣大的用戶和程序員使用。它非常適合用來開發(fā)擁有友好界面的程序(比如針對終端的數(shù)據(jù)) ,但是不適合開發(fā)其它程序(比如聯(lián)合計算程序) 。一個典型的 VB 進程 VB 的中心思想就是要便于程序員使用,無論是新手或者專家。VB 使用了可以簡單建立應(yīng)用程序的 GUI 系統(tǒng),但是又可以開發(fā)相當復(fù)雜的程序。VB 的程序是一種基于窗體的可視化組件安排的聯(lián)合,并且增加代碼來指定組建的屬性和方法。因為默認的屬性和方法已經(jīng)有一部分定義在了組件內(nèi),所以程序員不用寫多少代碼就可以完成一個簡單的程序。過去的版本里面VB 程序的性能問題一直被放在了桌面上,但是隨著計算機速度的飛速增加,關(guān)于性能的爭論已經(jīng)越來越少。窗體控件的增加和改變可以用拖放技術(shù)實現(xiàn)。一個排列滿控件的工具箱用來顯示可用控件(比如文本框或者按鈕。每個控件都有自己的屬性和事件。默認的屬性值會在控件創(chuàng)建的時候提供,但是程序員也可以進行更改。很多的屬性值可以在運行時候隨著用戶的動作和修改進行改動,這樣就形成了一個動態(tài)的程序。舉個例子來說:窗體的大小改變事件中加入了可以改變控件位置的代碼,在運行時候每當用戶更改窗口大小,控件也會隨之改變位置。在文本框中的文字改變事件中加入相應(yīng)的代碼,程序就能夠在文字輸入的時候自動翻譯或者阻止某些字符的輸入。VB 的程序可以包含一個或多個窗體,或者是一個主窗體和多個子窗體,類似于操作系統(tǒng)的樣子。有很少功能的對話框窗口(比如沒有最大化和最小化按鈕的窗體)可以用來提供彈出功能。 VB 的組件既可以擁有用戶界面,也可以沒有。這樣一來服務(wù)器端程序就可以處理增加的模塊。 VB 使用參數(shù)計算的方法來進行垃圾收集,這個方法中包含有大量的對象,第 3 頁 共 18 頁提供基本的面向?qū)ο笾С?。因為越來越多組建的出現(xiàn),程序員可以選用自己需要的擴展庫。和有些語言不一樣,VB 對大小寫不敏感,但是能自動轉(zhuǎn)換關(guān)鍵詞到標準的大小寫狀態(tài),以及強制使得符號表入口的實體的變量名稱遵循書寫規(guī)則。默認情況下字符串的比較是對大小寫敏感的,但是可以關(guān)閉這個功能。 VB使得大量的外界控件有了自己的生存空間。大量的第三方控件針對 VB 提供。VB也提供了建立、使用和重用這些控件的方法,但是由于語言問題,從一個應(yīng)用程序創(chuàng)建另外一個并不簡單。在討論 Visual Basic 時,經(jīng)??梢月牭揭韵逻@些術(shù)語,因此對這些術(shù)語的基本理解十分有幫助。控件簡單的說,控件就是構(gòu)成或者說建造 Visual Basic 應(yīng)用程序的圖形化工具,包括窗體、按鈕、復(fù)選框、列表框、數(shù)據(jù)控件、表格控件和圖片控件等等.。事件由用戶或操作系統(tǒng)引發(fā)的動作。事件的示例有擊鍵、單擊鼠標(Click)、雙擊鼠標(DblClick)、一段時間的限制,或從端口接收數(shù)據(jù)。方法嵌入在對象定義中的程序代碼,它定義對象怎樣處理信息并響應(yīng)某事件。例如,數(shù)據(jù)庫對象有打開紀錄集并從一個記錄移動到另一個記錄的方法程序的基本元素,它含有定義其特征的屬性,定義其任務(wù)和識別它可以響應(yīng)的事件的方法??丶痛绑w是 Visual Basic 中所有對象的示例。對象一個控件、窗體等都可被看作一個對象。過程為完成某些特定的任務(wù)而編寫的代碼段,過程通常用于響應(yīng)特定的事件,也可以當作應(yīng)用程序的用戶自定義函數(shù)來使用。屬性屬性是組成用戶界面的各對象的性質(zhì)的具體描述。例如上述“對象”中所提到的尺寸、位置、顏色、寬度、高度等等都稱為控件的 屬性。屬性決定對象的外觀,有時也決定對象的行為。對象的屬性絕大部分是 VB 中已經(jīng)事先定義好的,但也有的屬性是需要在應(yīng)用 過程中才去定義的。屬性即可為對象提供數(shù)據(jù),也能從對象取回信息。隨著 Intemet 的迅猛發(fā)展,Microsoft 的 ActiveX 技術(shù)出現(xiàn)了,并被不失時機地加入到 Visual Basic 50 版本中(1997 年)。在 1998 年,Microsoft推出了 Visual Basic 60 版本,這一版本使 VB 得到了很大的擴充和增強。它還引入了使用部件編程的概念,實際上這是對面向?qū)ο缶幊趟枷氲臄U展。迄今為止,Visual Basic 已經(jīng)發(fā)展成為快速應(yīng)用程序開發(fā)(RAD,Rapid Application Development)工具的代表。第 4 頁 共 18 頁2 2游戲的總體分析與設(shè)計游戲的總體分析與設(shè)計2.12.1 設(shè)計構(gòu)想設(shè)計構(gòu)想相信大多數(shù)使用 Windows 操作系統(tǒng)的使用者,對這款游戲都不陌生。這款游戲不止操作簡單,規(guī)則也不難,再加上游戲速度的控制機制得宜,讓整個游戲在操作過程中充滿了快樂與緊張的氣氛。除了游樂當中能帶給使用者快樂之外,游戲的設(shè)計內(nèi)容無形中也不斷訓(xùn)練使用者的邏輯思考能力,對于依靠高度腦力工作的現(xiàn)代人,都可以通過這個游戲,不時的檢驗一下自己,所以我們不難發(fā)現(xiàn),在各種可攜帶的電子產(chǎn)品上都有這款游戲的蹤影。在設(shè)計之前,我們先來了解這款游戲的規(guī)則。在不掀開任何藏有地雷的方塊情況下,以最快的速度找出所有的地雷。如果在掀開方塊的過程中,不小心翻開(踩到)藏有地雷的方塊,則宣告失?。ㄓ螒蚪Y(jié)束) ,惟有將所有不含地雷的方塊掀開,游戲才算成功。游戲的操作方面主要以鼠標為主,當鼠標指針對準未翻開的方塊按下左鍵時即表示翻開方塊,當鼠標指針對準未翻開的方塊按下右鍵時即表示標示或疑示地雷,反復(fù)按下右鍵則方塊會以未標示標示疑似三者關(guān)系不斷循環(huán)。游戲者可以通過地雷區(qū)內(nèi)的數(shù)字提示了解以數(shù)字為中心的其周邊八個方格內(nèi)所含的地雷數(shù),假若翻開的方塊顯示數(shù)字“3” ,則表示以其為中心的周邊方塊內(nèi)藏有 3 個地雷。當按下的方塊不是地雷,且周邊八個方塊也都沒有地雷時,方塊會以被翻開方塊的八個方向?qū)⒖瞻追綁K翻開。2.22.2 流程規(guī)劃流程規(guī)劃流程規(guī)劃大致上可以分為三個部分,分別為:畫面初始、游戲者按下第一個方塊和為非地雷方塊時展開。畫面初始時,以游戲者最后一次設(shè)定的地雷區(qū)大小為范圍畫出地雷區(qū),但此時并未產(chǎn)生地雷。當游戲者按下第一個方塊時產(chǎn)生地雷資料并啟動定時器,為何在游戲者按下第一個方塊才產(chǎn)生地雷資料呢?其主要的用意在于不要讓游戲者第一次就踩到地雷,這樣在某種程度上可以提高游戲者游玩的氣氛。接著就是如何判斷按下的方塊是非地雷時的處理,這也是整個游戲的技術(shù)核心,我們可以通過遞歸的觀念來檢查周邊的方塊是否含有地雷及是否繼續(xù)往外翻開。流程規(guī)劃如圖 1 所示:第 5 頁 共 18 頁是是開始依照使用者初始設(shè)定等待按鍵左鍵鍵右鍵顯示方塊1 布置地圖2 啟動計時器顯示分數(shù)結(jié)束延按下方塊周圍展開非地雷方塊否否是是否是否第一次按下按下方塊是否為地圖第一次按下是否再玩圖 1 整體流程規(guī)劃圖2.32.3 畫面規(guī)劃畫面規(guī)劃畫面規(guī)劃如圖 2 所示:第 6 頁 共 18 頁 圖 2 規(guī)劃樣圖說明如下:游戲窗口(Form) 。為了避免因改變窗口大小而造成畫面呈現(xiàn)不美觀,在這里將 BorderStyle 屬性設(shè)定為 3(雙線固定對話框) ,即無法以窗口邊緣進行窗口大小調(diào)整。:地雷數(shù)顯示區(qū)(PictureBox) 。:游戲狀態(tài)(Image)。:游戲時間顯示區(qū)(PictureBox)。:計數(shù)及狀態(tài)區(qū)(PictureBox)。:地圖區(qū)圖樣(Image)。:地雷區(qū)(PictureBox)。:存儲圖片的組件,包括游戲狀態(tài)圖片、地雷區(qū)圖片、地雷數(shù)及秒數(shù)數(shù)字圖片(Imagelist)。:秒數(shù)控制(Timer)。3 3游戲的詳細設(shè)計游戲的詳細設(shè)計3.13.1 游戲初始化游戲初始化當玩家開始游戲時,游戲畫面如圖 3 所示:第 7 頁 共 18 頁圖 3 游戲初始畫面我們可以清楚的看到,游戲界面主要分為兩個主要部分:1. 計數(shù)及狀態(tài)區(qū);2.地雷區(qū)。首先我利用 PictureBox 組件,PictureBox 為容器類型的組件,因此可以加入其他組件在其內(nèi)。在游戲中我利用了 PictureBox 組件的兩個特性,分別為容器特性及立體框線,具體如下:(1)容器特性:只要容器本身顯示的行為改變,在容器內(nèi)的組件也會跟著改變。當游戲初始時,地雷區(qū)的顯示組件會循環(huán)執(zhí)行,逐一布置在畫面上,但由于執(zhí)行循環(huán)時多個 Image 組件要顯示圖形,造成分時系統(tǒng)執(zhí)行頻率顯示上會出現(xiàn)不流暢的情形,若在循環(huán)執(zhí)行前,先將容器本身的 Visable 屬性設(shè)為False,在循環(huán)執(zhí)行完成后再將 Visable 屬性設(shè)為 Ture,則顯示就會變得流暢許多。(2)立體框線:通過組件本身立體框線的屬性設(shè)定,可以為游戲畫面的顯示上營造出層次感。然后再利用 ImageList 組件來存儲游戲中將要使用的圖片,我們可以將組件布置于窗體后編輯組件屬性,如圖 4 所示:圖 4計數(shù)及狀態(tài)區(qū)地雷區(qū)第 8 頁 共 18 頁通過 InsertPicture 和 RemovePicture 按鈕即可編輯組件所存放的圖片。利用 ImageList 集合對象的 Picture 方法,即可將 ImageList 組件內(nèi)的圖片指定給圖形顯示組件,語法如下:Set 圖形組件. Picture=ImageList. ImageList(圖片索引). Picture因為一個 ImageList 組件內(nèi)必須存儲大小相同的圖片,所以在游戲中顯示的圖片共分為三個部分:1.數(shù)字計數(shù)圖形;2.游戲狀態(tài)圖形;3.地雷區(qū)表示圖形。所以我們使用了三個 ImageList 組件來存儲不同大小的圖片。接著便是對地雷區(qū)的初始化,這里我們利用 Load 及 UnLoad 指令,動態(tài)新增及刪除組件。在游戲的地雷區(qū),我們依照游戲者自定義的地圖類型,來布置未探測地雷方塊。假如設(shè)定的地圖大小為 2030 時,我們可以通過雙循環(huán)ForNext 及 Load 指令在程序執(zhí)行階段動態(tài)加載表示方塊的組件,程序片段如下:加載表示地圖資料的圖片F(xiàn)or y = 0 To 20 地雷區(qū)高For x = 0 To 30 地雷區(qū)寬Load 表示方塊組件(index) 設(shè)定組件位置Next xNext y經(jīng)過雙循環(huán)的運算,程序就會產(chǎn)生 2030=600 個組件,試想如果在程序設(shè)計階段,就把 600 個組件布置在窗體上,那將是多么沒有效率的事情,況且組件數(shù)量的多少,還要取決于游戲玩家設(shè)定的地雷區(qū)大小,所以利用 Load 指令對于大量加載同一組件的動作將有莫大的幫助。加載組件后必須將組件做適當?shù)牟贾?,我們可以通過 Image 組件的 Move屬性,將組件布置于預(yù)定的位置,Move 函數(shù)的原型如下:組件.Move X 坐標,Y 坐標,組件寬度,組件高度(其中括號內(nèi)表示可以省略)再配合雙循環(huán)的變量值,可以控制組件布置于窗體的方向及方式,例如以下程序片段:For y = 0 To 20 地雷區(qū)高For x = 0 To 30 地雷區(qū)寬Load 表示方塊組件(index) 設(shè)定組件位置第 9 頁 共 18 頁 組件(index).Move x *組件寬度,y *組件高度Next xNext y組件將呈現(xiàn)先由左至右,再由上至下布置。若將內(nèi)循環(huán)改為 y 值,同樣的 Move 指令,組件的布置方向?qū)⒂缮隙略儆勺笾劣?。布置方向的不同,會關(guān)聯(lián)到組件內(nèi)含的索引值不同,相對在程序執(zhí)行階段存取組件時,所定義的組件索引值就必須考慮組件不止的方向,這樣才不會造成組件存取的錯誤。以由左至右再由上而下的布置方式為例,我們可以利用以下公式,求得組件索引值:組件索引值=(X 坐標+Y 坐標*數(shù)組寬度)這樣,游戲界面的初始化工作就基本完成了,下面就是地雷的隨機產(chǎn)生。3.23.2 雷區(qū)的布置雷區(qū)的布置當游戲界面初始化完成后,這時在地雷區(qū)中并未產(chǎn)生地雷,只有當玩家在地雷區(qū)中第一次點下左鍵后,才會在地雷區(qū)中隨機的布置當前游戲難度下應(yīng)該產(chǎn)生的地雷總數(shù),其主要用意在于不讓玩家第一次就踩到地雷,這樣在某種程度上可以提高玩家游戲的氣憤。具體實現(xiàn)如下所示:判斷地雷區(qū)是否處于可動作狀態(tài) If isDie = False And isFinal = False Then xxx = index Mod MAP_X 標示動作圖片的坐標 yyy = index MAP_X 判斷為左鍵且該方塊為未探測狀態(tài) If Button = 1 And mapFaceArr(xxx, yyy) = 1 Then 判斷游戲是否等待啟動 If isStart = False Then cMINE_NUM = MINE_NUM isStart = True Timer1.Enabled = True 布置地雷 Do While cMINE_NUM 0 rX = Rnd() * (MAP_X - 1) rY = Rnd() * (MAP_Y - 1) 第 10 頁 共 18 頁 判斷數(shù)組中(rX,rY)為非地雷及 非點選的方塊坐標時 If mapArr(rX, rY) 9 And _ Not (rX = xxx And rY = yyy) Then cMINE_NUM = cMINE_NUM - 1 mapArr(rX, rY) = 9 地雷外圍數(shù)字各加一 For xx = rX - 1 To rX + 1 For yy = rY - 1 To rY + 1 If xx = 0 And xx = 0 And yy = MAP_Y Then If mapArr(xx, yy) 9 And _ Not (xx = rX And yy = rY) Then mapArr(xx, yy) = mapArr(xx, yy) + 1 End If End If Next yy Next xx End If Loop End If3.33.3 游戲游戲中主要模塊的介紹與使用中主要模塊的介紹與使用3.3.13.3.1 鼠標事件鼠標事件在游戲過程中,我們利用鼠標所發(fā)出的信息了解游戲者的意圖,進而作出相對應(yīng)的動作。在 MouseDown 與 MouseUp 事件中,可以捕捉鼠標所按下或放開的按鍵為何、鼠標光標在該組件上的坐標及是否同時按下輔助鍵等。函數(shù)原型如下:組件名稱_MouseDown(index As Integer, _Button As Integer, _Shift As Integer, _ x As Single, _y As Single)組件名稱_MouseUp(index As Integer, _Button As Integer, _Shift As Integer, _ x As Single, _y As Single)在參數(shù)列中,Button 參數(shù)值表示鼠標上的按狃數(shù)值。其意義如下:1:左鍵 2:右鍵第 11 頁 共 18 頁倘若同時按下不止一個按鍵時,則傳回數(shù)值為按鍵數(shù)值相加,例如同時按下左鍵及右鍵,則 Button 值為 1+2=3在本游戲中,我們利用右鍵的 MouseDown 事件來標示“已標示”方塊,利用左鍵的 MouseDown 事件,來標示游戲者準備按下的方塊,再利用左鍵的MouseUp 事件來確定翻開的方塊。這樣的用意在于,假如游戲者發(fā)現(xiàn)按下的方塊是錯誤的,此時只要不松開左鍵,同時按下右鍵,該方塊就會被標示為“已標示”方塊,若再松開左鍵,則該方塊因為已成為“已標示”方塊,所以就無法翻開。在窗口的軟件中,鼠標的應(yīng)用是不可或缺的,但鼠標固然好用,如果程序設(shè)計不當,也可能造成使用者的不便。通常鼠標在軟件的應(yīng)用上經(jīng)常使用MouseUp 事件來作為確定使用者的操作意圖,而只把 MouseDown 事件當做標示的用途(用意就如同前面所提) ,只是為給使用者一個反悔的機會。游戲的操作方面主要以鼠標為主,當鼠標指針對準未翻開的方塊按下左鍵時即表示翻開方塊:If Button = 1 Then 鼠標左鍵 If mapFaceArr(xxx, yyy) = 1 Then Call setMineImage(index, 10) Set iState.Picture = ilSmile.ListImages(3).Picture End If當鼠標指針對準未翻開的方塊按下右鍵時即表示標示或疑示地雷,反復(fù)按下右鍵則方塊會以“未標示”“標示”“疑似”三者關(guān)系不斷循環(huán):If Button = 2 Then 鼠標右鍵 If mapFaceArr(xxx, yyy) = 1 Then 未探測 mapFaceArr(xxx, yyy) = 2 MINE_NUM_LABEL = MINE_NUM_LABEL + 1 Call setMineImage(index, 13) Call setNowMines ElseIf mapFaceArr(xxx, yyy) = 2 Then 標示 mapFaceArr(xxx, yyy) = 3 MINE_NUM_LABEL = MINE_NUM_LABEL - 1 Call setMineImage(index, 14) Call setNowMines 第 12 頁 共 18 頁 ElseIf mapFaceArr(xxx, yyy) = 3 Then 疑似 mapFaceArr(xxx, yyy) = 1 Call setMineImage(index, 9) End If3.3.23.3.2 地雷及雷區(qū)表面探測情況地雷及雷區(qū)表面探測情況在游戲設(shè)計上,我利用了兩個二維數(shù)組分別記錄地雷的分布情況及雷區(qū)表面探測情形,如圖 5 和圖 6 所示:圖 5 標示地雷分布情況圖 6 標示地雷探測情況因為兩個數(shù)組維數(shù)皆為 2,所以我們通過雙循環(huán)做數(shù)據(jù)的對比工作。另外,當游戲玩家按下非地雷的方塊時,程序必須自動將周邊非地雷的方塊翻開,這個動作我們也可以通過雙循環(huán)的方式檢查以按下的方塊為中心與周邊的 8 個方塊所形成的 3*3 的二維數(shù)組,鼠標指針所指即是代表按下的方塊,利用雙循環(huán)作數(shù)據(jù)的對比,不但速度快,而且在設(shè)計階段,程序的架構(gòu)也比較清楚。程序設(shè)計時雙循環(huán)常常搭配二維數(shù)組使用。第 13 頁 共 18 頁3.3.33.3.3 清除未靠近地雷的方塊清除未靠近地雷的方塊這里先引入一個“遞歸”的概念, “遞歸”(Recursion)簡單的說,就是一個程序能被自己所定義的語句調(diào)用。遞歸在程序設(shè)計上是一種重要的數(shù)據(jù)結(jié)構(gòu)形態(tài),通過遞歸程序的編寫,在程序代碼上會變得相當簡潔,不過如果設(shè)計不當,會造成無窮循環(huán)或堆迭溢滿的情形,所以遞歸的程序中心必須含有 ifthen 或Select Case 等設(shè)計,以終止遞歸執(zhí)行。在游戲過程中,當游戲者按下非地雷方塊時,方塊會沿四周八個方向向外翻開非地雷的方塊。程序的執(zhí)行方面必須判斷:以按下方塊為中心,檢查周圍八個方塊是否為非地雷方塊,若其中有一個方塊是非地雷方塊時,則又以其為中心,向外檢查周圍八個方塊是否為非地雷方塊,如此反復(fù)的執(zhí)行即構(gòu)成遞歸的使用條件。前面已經(jīng)提到,遞歸必須設(shè)計終止的條件判斷,在本游戲的遞歸架構(gòu)中,當判斷方塊的內(nèi)容為數(shù)字時(即在非地雷方塊周圍) ,即立即停止遞歸程序。遞歸其實也不是萬能的,以本游戲做測試,當?shù)乩讌^(qū)范圍越大,且地雷數(shù)目不多時(一翻開非地雷方塊,幾乎全部方塊都會翻開) ,執(zhí)行遞歸就會變的非常緩慢,甚至造成堆迭溢滿(不足)的情形,所以在游戲設(shè)計上必須考慮地雷區(qū)的大小,以免造成執(zhí)行時錯誤中斷的情況發(fā)生。代碼部分如下所示:Private Sub doClear(ByVal x As Integer, _ ByVal y As Integer, _ ByVal index As Integer) MINE_NUM_CLEAR = MINE_NUM_CLEAR + 1 For xx = x - 1 To x + 1 For yy = y - 1 To y + 1 If xx = 0 And xx = 0 And yy = 0 And _ mapArr(xx, yy) = 8 Then mapFaceArr(xx, yy) = 0 Select Case mapArr(xx, yy) Case 0第 14 頁 共 18 頁 Call setMineImage(yy * MAP_X + xx), 10) Call doClear(xx, yy, (yy * MAP_X + xx) Case 1 To 8 MINE_NUM_CLEAR = MINE_NUM_CLEAR + 1 Call setMineImage(yy * MAP_X + xx), mapArr(xx, yy) End Select End If End If End If Next yy Next xxEnd Sub3.3.43.3.4 游戲難度的選擇游戲難度的選擇這里我設(shè)置了“初級” , “中級” , “高級”以及“自定義”四個不同的難度級別, “初級” , “中級” , “高級”中的雷區(qū)大小和地雷總數(shù)是已經(jīng)設(shè)計好了的,如果玩家想要自己設(shè)置這些參數(shù),可單擊“游戲”“自定義” ,然后在“設(shè)置”中輸入行數(shù),列數(shù)及地雷數(shù),在這里我對行數(shù)及列數(shù)做出了一個限定,及行數(shù)和列數(shù)的最大值分別為 24 和 30,當在設(shè)置地雷數(shù)的時候,如果地雷數(shù)大于或等于行數(shù)和列數(shù)的乘積,或者地雷數(shù)小于零,地雷數(shù)都將自動的轉(zhuǎn)換為:地雷數(shù)=(行數(shù)-1)(列數(shù)-1) 。3.43.4 游戲的判斷游戲的判斷3.4.13.4.1 游戲成功完成游戲成功完成當在規(guī)定的時間內(nèi)將所有的雷都正確的標示出來,游戲就會有一個彈出框提示你在多長時間內(nèi)完成當前難度下的游戲。還有一種情況便是當只剩下地雷未探測的時候,及雷區(qū)方塊總數(shù)-已清除的方塊數(shù)=地雷總數(shù)的話,游戲也將成功完成。3.4.23.4.2 游戲失敗游戲失敗當鼠標左鍵按下的方塊為地雷方塊事,地雷將會被引爆,游戲立即結(jié)束。當在設(shè)定時間內(nèi)未探測完所有的地雷,地雷也將會引爆,對于這第二種行為,我們可以通過 Timer 組件來加以控制。利用 Timer 組件在固定時間即會觸發(fā)時間的特性,在事件觸發(fā)時便將計數(shù)值加一,直到判斷計數(shù)值超過限定值時,即地雷引爆。具體代碼如下所示:第 15 頁 共 18 頁定時器Private Sub Timer1_Timer() TIME_COUNTER = TIME_COUNTER + 1 時間計數(shù)顯示 Call setNowTimer 設(shè)定狀態(tài)圖示 If TIME_COUNTER = 999 Then isDie = True Timer1.Enabled = False mapFaceArr(xxx, yyy) = 0 Call showMine 設(shè)定狀態(tài)圖示 Call setStateImage MsgBox 您探測地雷的時間已超過,地雷已引爆。, , 超時 End IfEnd Sub4 4 游戲測試結(jié)果游戲測試結(jié)果在程序代碼基本完成后,經(jīng)過不斷的調(diào)試與修改,最后測試本次所設(shè)計的掃雷游戲能夠正常運行,在基本功能與畫面上與 Windows 自帶的掃雷游戲沒有太大差別,沒有出現(xiàn)明顯的錯誤和漏洞,但是在一些細節(jié)方面仍然需要完善,比如在游戲中可以加入一些聲音的提示,在游戲完成和失敗的時候可以彈出一些小的 Flash 動畫,還有就是可以加入一個掃雷英雄榜等等??偟膩碚f本次設(shè)計在功能上已經(jīng)基本達到要求,其他細節(jié)方面有待以后完善。結(jié)結(jié) 論論畢業(yè)設(shè)計是本科學(xué)習(xí)階段一次非常難得的理論與實際相結(jié)合的機會,通過這次比較完整的一個程序的設(shè)計,我擺脫了單純的理論知識學(xué)習(xí)狀態(tài),和實際設(shè)計的結(jié)合鍛煉了我的綜合運用所學(xué)的專業(yè)基礎(chǔ)知識,解決實際問題的能力,同時也提高我查閱文獻資料、對程序整體的把握等其他能力水平,而且通過對整體的掌控,對局部的取舍,以及對細節(jié)的斟酌處理,都使我的能力得到了鍛煉,經(jīng)驗得到了豐富。這是我們都希望看到的也正是我們進行畢業(yè)設(shè)計的目的所在。雖然畢業(yè)設(shè)計內(nèi)容繁多,過程繁瑣但我的收獲卻更加豐富。各種組件的運用,各種算法的應(yīng)用,各種控件的利用我都是隨著設(shè)計的不斷深入而不斷熟悉第 16 頁 共 18 頁并逐步掌握的。和老師以及同學(xué)的溝通交流更使我對程序整體的規(guī)劃與設(shè)計有了新的認識也對自己提出了新的要求。提高是有限的但提高也是全面的,正是這一次設(shè)計讓我積累了許多實際經(jīng)驗,也必然會讓我在未來的工作學(xué)習(xí)中表現(xiàn)出更高的應(yīng)變能力和理解力。順利如期的完成本次畢業(yè)設(shè)計給了我很大的信心,但是也讓我看到了自己許多不足的地方,學(xué)習(xí)其實就是一個不斷完善的過程,正視自己的不足之處,在以后的工作和學(xué)習(xí)中不斷的彌補這些不足之處,在以后的生活中也要保持同樣的態(tài)度,不斷的完善自己。參考文獻參考文獻1 唐任仲.工程應(yīng)用軟件開發(fā)技術(shù)M.北京:化學(xué)工業(yè)出版社,1999。2 李懷明.Visual Basic 6.0 中文版 參考詳解M.北京:清華大學(xué)出版社,1999。3 李善茂.Visual Basic 6.0 高級編程技巧M.西安:電子工業(yè)出版社,1999。4 譚浩強.Visual Basic 6.0 中文版 提高與應(yīng)用M.西安:電子工業(yè)出版社,1999。5 馮鋒,王運堅.Visual Basic 程序設(shè)計基礎(chǔ)教程M.西安:電子工業(yè)出版社,1999。6 何斌,劉醒.Visual Basic 6.0 應(yīng)用指南M.成都:四川大學(xué)出版社,1998。7 伍俊良.VB 課程設(shè)計與系統(tǒng)開發(fā)案例M.北京:清華大學(xué)出版社,2002。第 17 頁 共 18 頁致致 謝謝本文是在劉永紅老師的熱情關(guān)心和指導(dǎo)下完成的,他淵博的知識和嚴謹?shù)闹螌W(xué)作風(fēng)使我受益匪淺,對順利完成本課題起到了極大的作用。在此向他表示我最衷心的感謝!在論文完成過程中,本人還得到了其他老師和許多同學(xué)的熱心幫助,本人向他們表示深深的謝意!最后向在百忙之中評審本文的各位專家、老師表示衷心的感謝!作者簡介姓 名:溫洋 性別: 男出生年月:1985 年 02 月 06 日 民族: 漢E-mail:第 18 頁 共 18 頁聲聲 明明本論文的工作是 2007 年 2 月至 2007 年 6 月在成都信息工程學(xué)院網(wǎng)絡(luò)工程系完成的。文中除了特別加以標注地方外,不包含他人已經(jīng)發(fā)表或撰寫過的研究成果,也不包含為獲得成都信息工程學(xué)院或其他教學(xué)機構(gòu)的學(xué)位或證書而使用過的材料。除非另有說明,本文的工作是原始性工作。關(guān)于學(xué)位論文使用權(quán)和研究成果知識產(chǎn)權(quán)的說明:本人完全了解成都信息工程學(xué)院有關(guān)保管使用學(xué)位論文的規(guī)定,其中包括:(1)學(xué)校有權(quán)保管并向有關(guān)部門遞交學(xué)位論文的原件與復(fù)印件。(2)學(xué)??梢圆捎糜坝?、縮印或其他復(fù)制方式保存學(xué)位論文。(3)學(xué)校可以學(xué)術(shù)交流為目的復(fù)制、贈送和交換學(xué)位論文。(4)學(xué)??稍试S學(xué)位論文被查閱或借閱。(5)學(xué)??梢怨紝W(xué)位論文的全部或部分內(nèi)容(保密學(xué)位論文在解密后遵守此規(guī)定) 。除非另有科研合同和其他法律文書的制約,本論文的科研成果屬于成都信息工程學(xué)院。特此聲明! 作者簽名: 2007 年 月 日
收藏