2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩35頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p>  編號(hào) </p><p><b>  畢業(yè)論文</b></p><p>  用VB實(shí)現(xiàn)一個(gè)簡(jiǎn)單的游戲</p><p><b>  摘要</b></p><p>  當(dāng)前,隨著計(jì)算機(jī)應(yīng)用及網(wǎng)絡(luò)的的深入普及,越來(lái)越多的政府部門、廠礦企業(yè)、學(xué)校等單位及個(gè)人都擁有了自己

2、的計(jì)算機(jī),計(jì)算機(jī)不僅在工作方面給人們以很大的幫助,還給人們帶來(lái)了多種的娛樂(lè)享受.,操作系統(tǒng)自帶的游戲也起到了很大的娛樂(lè)作用,而且它的開發(fā)成本小,所以小游戲的開發(fā)在這種形勢(shì)下就應(yīng)運(yùn)而生,它的開發(fā)主要采用VC++ ,VB 等編程語(yǔ)言. 本設(shè)計(jì)采用VB編寫,VB一直以來(lái)被認(rèn)為有以下優(yōu)缺點(diǎn):優(yōu)點(diǎn)是上手快、開發(fā)效率高;缺點(diǎn)是能力有限,運(yùn)行效率低.這正是有些軟件把VB做為首選語(yǔ)言,而有些軟件肯定不會(huì)用VB做的原因.而很多VC,DELPHI的

3、程序員都認(rèn)為VB里搞開發(fā)不自由.的確,簡(jiǎn)單和功能強(qiáng)大這兩者本身就是一對(duì)矛盾. 掃雷游戲是操作系統(tǒng)中的一個(gè)主要的益智類游戲. 用戶對(duì)鼠標(biāo)進(jìn)行操作,單擊鼠標(biāo)左鍵為踩雷,單擊鼠標(biāo)左鍵在標(biāo)記,疑問(wèn),空白三種狀態(tài)中循環(huán),同時(shí)單擊鼠標(biāo)左右鍵為踩單擊點(diǎn)在內(nèi)的周圍九格內(nèi)所有沒(méi)有標(biāo)記為已標(biāo)記的所有格子.同時(shí)程序從你單擊第一次時(shí)開始計(jì)時(shí),到勝利或引爆地雷終結(jié).結(jié)束后單擊開始按鈕重新開始游戲.這款游戲?qū)崿F(xiàn)了開發(fā)人類大腦思維的目的.關(guān)鍵詞 VB,掃雷游

4、戲 </p><p>  Realizes a simple game with VB</p><p>  AbstractFront, is applied along with the calculator and network of of the thorough universality, more and more governments section,

5、factory mineral business enterprise, school...etc. unit and individual all owned own calculator, the calculator is not only to give people in the aspects of working with the very big help, returning to people brought var

6、ious amusements enjoys., the operate system also rose from the game that take very big amusement function, and it of the cost of development is sma</p><p><b>  目 錄</b></p><p><b&g

7、t;  1引言1</b></p><p>  2 Visual Basic概況2</p><p>  2.1 VB簡(jiǎn)介2</p><p>  2.2 本設(shè)計(jì)運(yùn)用的技術(shù)2</p><p><b>  3可行性分析6</b></p><p><b>  4總體設(shè)計(jì)7&

8、lt;/b></p><p><b>  4.1設(shè)計(jì)構(gòu)想7</b></p><p><b>  4.2流程規(guī)劃7</b></p><p><b>  5詳細(xì)設(shè)計(jì)9</b></p><p><b>  5.1畫面規(guī)劃9</b></p>

9、;<p>  5.2 設(shè)計(jì)過(guò)程10</p><p>  5.2.1 添加菜單10</p><p>  5.2.2 自定義窗體設(shè)計(jì)10</p><p>  5.2.3 關(guān)于窗體設(shè)計(jì)11</p><p>  5.3 運(yùn)行界面12</p><p><b>  6系統(tǒng)測(cè)試13</b

10、></p><p><b>  結(jié)束語(yǔ)14</b></p><p><b>  參考文獻(xiàn)16</b></p><p><b>  附錄17</b></p><p><b>  1引言</b></p><p>  本論文研

11、究的是以Visual Basic 6.0為開發(fā)環(huán)境,設(shè)計(jì)并開發(fā)一款掃雷游戲,其功能類似于Windows操作系統(tǒng)自帶的掃雷游戲?論文首先介紹了制作游戲的整體思路及整個(gè)游戲設(shè)計(jì)的流程規(guī)劃,然后介紹了雷區(qū)的布置及地雷隨機(jī)產(chǎn)生的實(shí)現(xiàn)方法;重點(diǎn)介紹了在游戲過(guò)程中各事件的處理,其中又以鼠標(biāo)事件和清除未靠近地雷區(qū)方塊這兩方面最為重要,鼠標(biāo)事件是利用鼠標(biāo)所發(fā)出的信息了解使用者的意圖,進(jìn)而做出相對(duì)應(yīng)的動(dòng)作,而清除未靠近地雷區(qū)方塊由于引進(jìn)了“遞歸”這個(gè)概念

12、而使其簡(jiǎn)單化?</p><p>  掃雷游戲是WINDOWS系統(tǒng)自帶的一個(gè)娛樂(lè)性的小游戲,在玩掃雷游戲的過(guò)程中也可以很好的培養(yǎng)耐心和細(xì)心,同時(shí)在無(wú)聊得時(shí)候可以用以休閑娛樂(lè),如果我們自己也能動(dòng)手做一個(gè)小程序來(lái)實(shí)現(xiàn)這個(gè)功能,自然能樂(lè)在其中。</p><p>  本次設(shè)計(jì)只是完成了掃雷游戲的基本功能,在細(xì)節(jié)方面仍有待完善?</p><p>  2 Visual Basic

13、概況</p><p><b>  2.1 VB簡(jiǎn)介</b></p><p>  VISUAL BASIC是微軟公司出品的一個(gè)快速可視化程序開發(fā)工具軟件。借助微軟在操作系統(tǒng)和辦公自動(dòng)化軟件的壟斷地位,VB在短短的幾年內(nèi)風(fēng)靡全球。VB是極具特色和功能強(qiáng)大的軟件,主要表現(xiàn):所見即所得的界面設(shè)計(jì),基于對(duì)象的設(shè)計(jì)方法,極短的軟件開發(fā)周期,較易維護(hù)的代碼。同時(shí)眾多的ACTIVE控

14、件,提高了軟件的使用效率??梢杂糜诳梢蚤_發(fā)多媒體、數(shù)據(jù)庫(kù)、網(wǎng)絡(luò)、圖形等方面的應(yīng)用程序。 VB應(yīng)用程序語(yǔ)言的基本特點(diǎn)[1]: 1 可視化界面設(shè)計(jì) VB為用戶提供大量的界面元素(在VB中稱為控件對(duì)象),這些控件對(duì)象對(duì)于熟悉WINDOWS應(yīng)用程序的用戶來(lái)說(shuō)是一點(diǎn)也不陌生,如“窗體”,“菜單”,“命令按扭”,“工具按扭”,“檢查框”等等,用戶只要利用鼠標(biāo)、鍵盤把這些控件對(duì)象拖動(dòng)到合適的位置,設(shè)置其大小、形狀、屬性等,就可以設(shè)計(jì)出所需

15、的應(yīng)用程序界面。 2 事件驅(qū)動(dòng)編程 在使用VB設(shè)計(jì)應(yīng)用程序是,必須首先確定應(yīng)用程序如何同用戶進(jìn)行交互。例如發(fā)生鼠標(biāo)單擊、鍵盤輸入等事件是,由用戶編寫代碼控制這些事件的響應(yīng),這就是所謂的事件驅(qū)動(dòng)編程。</p><p>  3 與數(shù)據(jù)庫(kù)的連接性 VISUAL BASIC提供了與底層數(shù)據(jù)庫(kù)系統(tǒng)緊密的連接。 VISUAL BASIC支持不同的關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)并充分發(fā)揮每一個(gè)數(shù)據(jù)庫(kù)的特長(zhǎng)。開發(fā)人員和利

16、用內(nèi)置的高性能數(shù)據(jù)庫(kù)引擎——JET生成獨(dú)立應(yīng)用或脫離服務(wù)器運(yùn)行的服務(wù)以上的應(yīng)用。 </p><p>  2.2 本設(shè)計(jì)運(yùn)用的技術(shù)</p><p>  這個(gè)游戲里運(yùn)用了VB里的組件及語(yǔ)法作為游戲運(yùn)算和顯示,其相關(guān)語(yǔ)法及組件如下表1所示:</p><p>  表1 使用的語(yǔ)法及組件</p><p><b>  詳細(xì)說(shuō)明如下:</b

17、></p><p>  1. For...Next循環(huán)應(yīng)用</p><p>  在游戲設(shè)計(jì)上,利用了兩個(gè)二維數(shù)組分別記錄地雷的分布狀況及地雷區(qū)及表面探測(cè)情形。利用數(shù)據(jù)循環(huán)的對(duì)比,不但速度快,而且在設(shè)計(jì)階段,程序的架構(gòu)比較清楚。</p><p>  2.Load及Unload動(dòng)態(tài)增加或刪除組件</p><p>  利用Load及Unloa

18、d指令,可動(dòng)態(tài)新增及刪除組件。在游戲的雷區(qū),依照使用者自定義的地圖類型,布置未探測(cè)的地雷方塊。加載組件后,通過(guò)Image組件的Move屬性,將組件布置于預(yù)定的位置。Move函數(shù)的原型如下:</p><p>  組件. Move X坐標(biāo),[Y坐標(biāo)],[組件寬度][組件高度] </p><p>  再配合雙循環(huán)的變量值,可以控制組件布置于窗體的方向及方式。</p><p&

19、gt;  3.MouseDown與MouseUp事件</p><p>  在游戲過(guò)程中,利用鼠標(biāo)所發(fā)出的信息了解使用者的意圖,進(jìn)而做出相應(yīng)的動(dòng)作。在MouseDown與MouseUp事件中,可以捕捉鼠標(biāo)所按下或放開的按鍵為何、鼠標(biāo)光標(biāo)在該組件上的坐標(biāo)及是否同時(shí)按下輔助鍵等。用Button參數(shù)值表示鼠標(biāo)上的按鈕數(shù)值。其意義如下:</p><p><b>  1:左鍵</b&g

20、t;</p><p><b>  2:右鍵</b></p><p><b>  4:中央鍵</b></p><p>  若同時(shí)按下不止一個(gè)按鍵時(shí),則傳回?cái)?shù)值為按鍵數(shù)相加。例如同時(shí)按下左鍵及右鍵,則Button值為1+2=3.</p><p>  在本游戲中,利用右鍵的MouseDown事件標(biāo)示“已標(biāo)

21、示”方塊,利用左鍵的MouseDown事件,標(biāo)示使用者準(zhǔn)備按下的方塊,利用左鍵的MouseUp事件確定翻開的方塊。</p><p>  4. ImageList組件</p><p>  利用Imagelist可以存儲(chǔ)顯示方塊的圖形[2]。將組件布置于窗體上后編輯組件屬性,通過(guò)【插入圖片】按鈕和【刪除圖片】按鈕即可編輯組件內(nèi)所存放的圖片。如圖1所示。因?yàn)橐粋€(gè)Imagelist組件內(nèi)必須存儲(chǔ)大

22、小相同的圖片,所在這款游戲設(shè)計(jì)中,顯示的圖片共分為三個(gè)部分:游戲狀態(tài)圖形、數(shù)字計(jì)數(shù)圖形和地雷區(qū)標(biāo)示圖形。</p><p>  圖1 ImageList組件屬性</p><p>  利用ListImage集合對(duì)象的Picture方法,即可將ListImage組件內(nèi)的圖片指定給圖形顯示組件,語(yǔ)法如下:</p><p>  Set 圖形組件. Picture=Imagel

23、ist. ListImage(圖片索引). Picture</p><p><b>  5.Image組件</b></p><p>  利用Image組件作為游戲執(zhí)行階段所有圖形的顯示。在游戲畫面中,計(jì)數(shù)數(shù)字、游戲狀態(tài)表情及地雷區(qū)方塊圖形等,都利用Image組件作為顯示組件,再搭配ImageList組件所存儲(chǔ)的圖形,便可在執(zhí)行階段在同一個(gè)Image組件上變換不同的圖片

24、。</p><p><b>  6.Timer組件</b></p><p>  在游戲中,地雷引爆的可能有2中,第一種為使用者翻開(踩到)地雷方塊,第二種為設(shè)定時(shí)間內(nèi)未探測(cè)完所有地雷而引爆。其中第二種的行為,可以通過(guò)Timer組件來(lái)加以控制。利用Timer組件在固定時(shí)間即會(huì)觸發(fā)事件的特性,在事件觸發(fā)時(shí)便將計(jì)數(shù)值加1,直到判斷計(jì)數(shù)值超過(guò)限定值時(shí),即引爆地雷。</p

25、><p>  7. PictureBox組件</p><p>  PictureBox為容器類型的組件,可以加入其它組件在內(nèi)[3]。在游戲中利用了PictureBox的兩個(gè)特性:容器特性和立體框架。分述如下:</p><p>  ●容器特性:只要容器本身顯示的行為改變,在容器內(nèi)的組件也會(huì)跟著改變。當(dāng)游戲初始時(shí),地雷區(qū)的顯示組件會(huì)循環(huán)執(zhí)行,逐一布置在畫面上,但由于執(zhí)行循環(huán)

26、時(shí)多個(gè)Image組件要顯示圖形,造成分時(shí)系統(tǒng)執(zhí)行頻率顯示上會(huì)出現(xiàn)不流暢的情形,若在循環(huán)之前,先將容器本身的Visible屬性設(shè)為False,在循環(huán)執(zhí)行完成后再將Visible屬性設(shè)為True,則顯示就會(huì)變得流暢許多。</p><p>  ●立體框架:通過(guò)組件本身立體框線的屬性設(shè)定,可以為游戲畫面的顯示上營(yíng)造出層次感。</p><p><b>  8.遞歸</b><

27、;/p><p>  遞歸就是一個(gè)程序能被自己所定義的語(yǔ)句調(diào)用。在游戲過(guò)程中,當(dāng)使用者按下非地雷方塊時(shí),方塊會(huì)沿四周八個(gè)方向向外翻開非地雷的方塊。程序執(zhí)行時(shí)必須判斷:以按下方塊為中心。檢查周圍八個(gè)方塊是否為非地雷方塊,若其中一個(gè)方塊是非地雷方塊時(shí),則又以其為中心,向外檢查周圍八個(gè)方塊是否為非地雷方塊,如此反復(fù)的行為即構(gòu)成了遞歸的使用條件。當(dāng)判斷方塊內(nèi)容為數(shù)字時(shí)(即在非地雷方塊周圍),即停止遞歸執(zhí)行。</p>

28、<p><b>  3可行性分析</b></p><p>  可行性研究的目的是用最小的代價(jià)在盡可能短的時(shí)間內(nèi)確定問(wèn)題是否能夠解決。也就是說(shuō)可行性研究的目的不是解決問(wèn)題,而是確定問(wèn)題是否值得去解,研究在當(dāng)前的具體條件下,是否具備必要的資源和其它條件。</p><p>  一般說(shuō)來(lái),應(yīng)從經(jīng)濟(jì)可行性、技術(shù)可行性、運(yùn)行可行性、和開發(fā)方案可行性等方面研究可行性。

29、</p><p><b>  可行性分析:</b></p><p>  1. 對(duì)于當(dāng)前條件下,完全可以達(dá)到該系統(tǒng)功能目標(biāo);2. 該系統(tǒng)功能在現(xiàn)有技術(shù)下,完全可以實(shí)現(xiàn);</p><p>  3 目標(biāo): 實(shí)現(xiàn)游戲的各類功能,如:初、中、高(自定義)各個(gè)游戲等級(jí).</p><p>  4 用戶的特點(diǎn);都是對(duì)掃雷游戲的喜好

30、者.</p><p><b>  4總體設(shè)計(jì)</b></p><p><b>  4.1設(shè)計(jì)構(gòu)想</b></p><p>  本游戲的功能類似于Windows操作系統(tǒng)自帶掃雷游戲,設(shè)計(jì)之前,先了解這款游戲的規(guī)則。</p><p>  在不掀開任何的情況下,以最快的速度找出所有的地雷。如果在掀開方塊的

31、過(guò)程中,不小心翻開(踩到)藏有地雷的方塊,則宣告失敗(死亡),惟有將所有不含地雷的方塊掀開,游戲才算成功(存活)。</p><p>  游戲的操作方面主要以鼠標(biāo)為主,當(dāng)鼠標(biāo)指針對(duì)準(zhǔn)未翻開的方塊按下左鍵時(shí)即表示翻開方塊,當(dāng)鼠標(biāo)指針對(duì)準(zhǔn)未翻開的方塊按下右鍵時(shí)即表示標(biāo)示或疑似地雷,反復(fù)按下右鍵則方塊會(huì)依未標(biāo)示→標(biāo)示→疑似三者關(guān)系不斷循環(huán)。使用者可以通過(guò)地雷區(qū)內(nèi)的數(shù)表示以其為中心的周邊八個(gè)方塊內(nèi)所含的地雷數(shù)。當(dāng)按下的方塊

32、不是地雷,且周邊也沒(méi)有地雷時(shí),方塊會(huì)以被翻開的八個(gè)方向?qū)⒖瞻追綁K翻開。</p><p><b>  4.2流程規(guī)劃</b></p><p>  流程規(guī)劃分為三個(gè)部分,分別為:畫面初始、使用者按下第一個(gè)方塊和為非地雷方塊時(shí)展開。</p><p>  畫面初始時(shí),以使用者最后一次設(shè)定的地雷區(qū)大小為范圍畫出地雷區(qū),但此時(shí)并未產(chǎn)生地雷。當(dāng)使用者按下第一

33、個(gè)方塊時(shí)產(chǎn)生地雷并啟動(dòng)定時(shí)器,主要為了不讓使用者第一次就踩到地雷,這樣在某種程度上提高了游玩的氣氛。接著就是如何判斷按下的方塊為非地雷時(shí)的處理,這也是整個(gè)游戲的技術(shù)核心,可以通過(guò)遞歸的觀念來(lái)檢查周邊是否含有地雷及是否繼續(xù)往外翻開。</p><p>  流程規(guī)劃如圖2所示:</p><p><b>  圖2 流程規(guī)劃圖</b></p><p>&

34、lt;b>  5詳細(xì)設(shè)計(jì)</b></p><p><b>  5.1畫面規(guī)劃</b></p><p>  畫面規(guī)劃如圖3所示:</p><p><b>  圖3 畫面規(guī)劃圖</b></p><p><b>  說(shuō)明如下:</b></p><

35、p>  ●:游戲窗口(Form)。為了避免因改變窗口大小而造成畫面呈現(xiàn)不美觀,將BorderStyle屬性值設(shè)定為3(雙線固定對(duì)話框),即無(wú)法以窗口邊緣進(jìn)行窗口大小調(diào)整。</p><p>  ●:計(jì)數(shù)區(qū)(PictureBox)。</p><p>  ●:地雷數(shù)顯示區(qū)(PictureBox)。</p><p>  ●:游戲時(shí)間顯示區(qū)(PictureBox)。&l

36、t;/p><p>  ●:地雷區(qū)(PictureBox)。</p><p>  ●~:地雷數(shù)(Image)。</p><p>  ●:游戲狀態(tài)(Image)。</p><p>  ●~:經(jīng)過(guò)秒數(shù)(Image)。</p><p>  ●:地雷區(qū)圖樣(Image)。</p><p>  ●:游戲狀態(tài)圖片

37、(ImageList)。</p><p>  ●:地雷區(qū)圖片(ImageList)。</p><p>  ●:地雷數(shù)及秒數(shù)數(shù)字圖片(ImageList)。</p><p>  ●:秒數(shù)控制(Timer)。</p><p><b>  5.2 設(shè)計(jì)過(guò)程</b></p><p>  5.2.1 添加

38、菜單</p><p>  使用菜單編輯器編輯游戲的主菜單,點(diǎn)擊“工具”菜單上的“菜單編輯器”命令選項(xiàng),即可打開菜單編輯器。菜單控件在列表框中的位置決定了該控件是菜單標(biāo)題、菜單項(xiàng)、子菜單標(biāo)題,還是子菜單項(xiàng)。對(duì)于一些常用的菜單命令,可以設(shè)置“Alt+快捷鍵”組合來(lái)快速打開菜單。方法是在菜單編輯器中的Caption后面添加“(&R)”就可以了。</p><p><b>  圖4 菜單編

39、輯器</b></p><p>  5.2.2 自定義窗體設(shè)計(jì)</p><p>  打開主菜單游戲→自定義,可以顯示窗體,如圖5所示。通過(guò)這個(gè)窗體使用者可以自己設(shè)定行數(shù)、列數(shù)和地雷數(shù)。</p><p><b>  圖5 自定義窗體</b></p><p><b>  '設(shè)置參數(shù)</b&

40、gt;</p><p>  Private Sub Command1_Click()</p><p>  If tHeight.Text > 50 Or tHeight.Text < 0 Then</p><p>  tHeight.Text = 24</p><p><b>  End If</b><

41、/p><p>  If tWidth.Text > 50 Or tWidth.Text < 0 Then</p><p>  tWidth.Text = 30</p><p><b>  End If</b></p><p>  If tMines.Text > (tHeight.Text * tWidth

42、.Text) Or tMines.Text < 0 Then</p><p>  tMines.Text = (tHeight.Text - 1) * (tWidth.Text - 1)</p><p><b>  End If</b></p><p>  SaveSetting "Mine", "SET&q

43、uot;, "1", tWidth.Text</p><p>  SaveSetting "Mine", "SET", "2", tHeight.Text</p><p>  SaveSetting "Mine", "SET", "3", tMines

44、.Text</p><p><b>  Unload Me</b></p><p><b>  End Sub</b></p><p>  5.2.3 關(guān)于窗體設(shè)計(jì)</p><p>  打開主菜單幫助→關(guān)于掃雷,可以顯示如圖6所示。幫助使用者了解相關(guān)信息。</p><p> 

45、 Private Sub about_Click()</p><p>  aboutfrm.Show</p><p><b>  End Sub</b></p><p><b>  5.3 運(yùn)行界面</b></p><p>  執(zhí)行窗體時(shí)的界面如圖6所示:</p><p> 

46、 圖6 窗體運(yùn)行界面</p><p><b>  '窗體加載</b></p><p>  Private Sub Form_Load()</p><p>  Randomize '初始化隨機(jī)數(shù)產(chǎn)生器</p><p>  '加載為地雷區(qū)方塊圖片</p><p>  Set

47、iMine(0).Picture = ilMap.ListImages(9).Picture</p><p><b>  '參數(shù)初始設(shè)定</b></p><p>  Call setInit(GetSetting("Mine", "Level", "1", "0"))</p&

48、gt;<p><b>  '計(jì)數(shù)區(qū)配置</b></p><p>  Call setCounterInit</p><p><b>  '地雷區(qū)配置</b></p><p>  Call setMapInit</p><p><b>  '設(shè)定窗體大小

49、</b></p><p>  Call setFormSize</p><p><b>  End Sub</b></p><p><b>  6系統(tǒng)測(cè)試</b></p><p>  掃雷游戲是WINDOWS系統(tǒng)自帶的一個(gè)娛樂(lè)性的小游戲,為了確保本游戲能夠正常運(yùn)行,需要在發(fā)布之后做一次

50、較全面的測(cè)試。</p><p>  掃雷游戲的目標(biāo)是盡快找到雷區(qū)中的所有地雷,而不許踩到地雷。如果挖開的是地雷,您將輸?shù)粲螒颉?lt;/p><p>  掃雷游戲在程序運(yùn)行后生成指定的地雷,在鼠標(biāo)左鍵點(diǎn)擊下尋找地雷,右鍵點(diǎn)擊下標(biāo)記地雷,點(diǎn)擊笑臉的標(biāo)記開始重新游戲,并給出勝利和失敗的條件:標(biāo)出所有的地雷和左鍵點(diǎn)中地雷。</p><p>  在游戲菜單上,單擊開局。單擊游戲區(qū)

51、中的任何方塊,要啟動(dòng)計(jì)時(shí)器。通過(guò)單擊即可挖開方塊。如果挖開的是地雷,則您輸?shù)粲螒?。如果方塊上出現(xiàn)數(shù)字,則表示在其周圍的八個(gè)方塊中共有多少顆地雷。要標(biāo)記您認(rèn)為可能有地雷的方塊,請(qǐng)右鍵單擊它。</p><p>  游戲區(qū)包括雷區(qū)、地雷計(jì)數(shù)器和計(jì)時(shí)器。</p><p>  經(jīng)過(guò)一些簡(jiǎn)單的步驟的測(cè)試,證明本游戲具有相當(dāng)?shù)姆€(wěn)定性。</p><p><b>  結(jié)束語(yǔ)

52、</b></p><p>  經(jīng)過(guò)一個(gè)星期的設(shè)計(jì)和開發(fā),以Visual Basic6.0為開發(fā)工具,掃雷小游戲基本開發(fā)完畢,基本功能能夠?qū)崿F(xiàn)。但是由于設(shè)計(jì)時(shí)間較短,所以該游戲還有許多不盡如人意的地方,有待進(jìn)一步改善。</p><p>  在游戲的設(shè)計(jì)過(guò)程中,學(xué)習(xí)了很多知識(shí)包括設(shè)計(jì)思想和對(duì)所學(xué)語(yǔ)言的應(yīng)用,加深了對(duì)Visual Basic6.0 的理解,還使我對(duì)各個(gè)控件有了更好的掌

53、握。能把所學(xué)的運(yùn)用到實(shí)踐中,提高了獨(dú)立思考和動(dòng)手能力。同時(shí)深深地體會(huì)到進(jìn)行軟件開發(fā)不是一件簡(jiǎn)單的事情,它需要設(shè)計(jì)者具有全面的專業(yè)知識(shí)、縝密的思維、嚴(yán)謹(jǐn)?shù)墓ぷ鲬B(tài)度以及較高的分析問(wèn)題解決問(wèn)題的能力,而我在很多方面還有欠缺。今后還要努力學(xué)習(xí)這方面的專業(yè)知識(shí),虛心請(qǐng)教他人的工作經(jīng)驗(yàn),來(lái)提高自身的分析問(wèn)題、解決問(wèn)題的能力。</p><p><b>  參考文獻(xiàn)</b></p><p

54、>  [1] 柴欣,武優(yōu)西.Visual Basic程序設(shè)計(jì)基礎(chǔ).中國(guó)鐵道出版社,2005,8(3):73-79</p><p>  [2] 劉瑞新,汪遠(yuǎn)佂.Visual Basic程序設(shè)計(jì)教程.機(jī)械工業(yè)出版社,2002,5:209-223</p><p>  [3] 譚浩強(qiáng).Visual Basic程序設(shè)計(jì)案例教程.清華大學(xué)出版社,2008,2(2):32-37</p&

55、gt;<p>  [4] 管麗娜 ,白海波.實(shí)用Visual Basic6 教程 .北京:清華大學(xué)出版社,2001</p><p>  [5] 段興. Visual Basic數(shù)據(jù)庫(kù)實(shí)用程序設(shè)計(jì)100例. 人民郵電出版社,2002</p><p>  [6] 王運(yùn)堅(jiān). VISUAL BASIC 6.0 應(yīng)用指南. 北京: 人民郵電出版社, 1998</p>&l

56、t;p><b>  致謝</b></p><p>  經(jīng)過(guò)一周的努力,我做的掃雷游戲終于完成。在課設(shè)的過(guò)程中遇到了很多問(wèn)題,在老師的指導(dǎo)下和同學(xué)的幫助下,把這些問(wèn)題一一解決了,按時(shí)的順利的完成了任務(wù)。</p><p>  由于學(xué)識(shí)疏淺,文中難免有失當(dāng)之處,敬請(qǐng)老師不吝賜教,以使本文能夠更加完善!</p><p>  在此,對(duì)老師和同學(xué)表示

57、衷心的感謝!</p><p><b>  附錄</b></p><p>  附上本程序完整代碼:</p><p>  Dim MAP_X As Integer '地圖的X軸長(zhǎng)</p><p>  Dim MAP_Y As Integer '地圖的Y軸長(zhǎng)</p><p>  Dim

58、MINE_NUM As Integer '地雷數(shù)</p><p>  Dim MINE_NUM_LABEL As Integer '地雷標(biāo)記數(shù)</p><p>  Dim MINE_NUM_CLEAR As Integer '方塊清除數(shù)</p><p>  Dim TIME_COUNTER As Integer '時(shí)間計(jì)數(shù)</p

59、><p>  Dim isStart As Boolean '游戲是否已進(jìn)行</p><p>  Dim isDie As Boolean '游戲是否呈結(jié)束狀態(tài)</p><p>  Dim isFinal As Boolean '游戲是否完成</p><p>  Dim mapArr() As Integer '地

60、雷區(qū)地雷分布情形</p><p>  Dim mapFaceArr() As Integer '地雷區(qū)方塊探測(cè)情形</p><p><b>  '窗體加載</b></p><p>  Private Sub Form_Load()</p><p>  Randomize '初始化隨機(jī)數(shù)產(chǎn)生器<

61、;/p><p>  '加載為地雷區(qū)方塊圖片</p><p>  Set iMine(0).Picture = ilMap.ListImages(9).Picture</p><p><b>  '參數(shù)初始設(shè)定</b></p><p>  Call setInit(GetSetting("Mine&q

62、uot;, "Level", "1", "0"))</p><p><b>  '計(jì)數(shù)區(qū)配置</b></p><p>  Call setCounterInit</p><p><b>  '地雷區(qū)配置</b></p><p&g

63、t;  Call setMapInit</p><p><b>  '設(shè)定窗體大小</b></p><p>  Call setFormSize</p><p><b>  End Sub</b></p><p>  '地雷區(qū)方塊按下事件</p><p> 

64、 Private Sub iMine_MouseDown(index As Integer, Button As Integer, Shift As Integer, x As Single, y As Single)</p><p>  Dim xxx As Integer '換算組件所代表的坐標(biāo)值</p><p>  Dim yyy As Integer</p&

65、gt;<p>  If isFinal = False And isDie = False Then</p><p>  xxx = index Mod MAP_X '標(biāo)示動(dòng)作圖片的坐標(biāo)</p><p>  yyy = index \ MAP_X</p><p>  If Button = 1 Then '鼠標(biāo)左鍵</p>

66、<p>  If mapFaceArr(xxx, yyy) = 1 Then</p><p>  Call setMineImage(index, 10)</p><p>  Set iState.Picture = ilSmile.ListImages(3).Picture</p><p><b>  End If</b><

67、/p><p>  ElseIf Button = 2 Then '鼠標(biāo)右鍵</p><p>  If mapFaceArr(xxx, yyy) = 1 Then '未探測(cè)</p><p>  mapFaceArr(xxx, yyy) = 2</p><p>  MINE_NUM_LABEL = MINE_NUM_LABEL + 1

68、</p><p>  Call setMineImage(index, 13)</p><p>  Call setNowMines</p><p>  ElseIf mapFaceArr(xxx, yyy) = 2 Then '標(biāo)示</p><p>  mapFaceArr(xxx, yyy) = 3</p><

69、p>  MINE_NUM_LABEL = MINE_NUM_LABEL - 1</p><p>  Call setMineImage(index, 14)</p><p>  Call setNowMines</p><p>  ElseIf mapFaceArr(xxx, yyy) = 3 Then '疑似</p><p>

70、  mapFaceArr(xxx, yyy) = 1</p><p>  Call setMineImage(index, 9)</p><p><b>  End If</b></p><p><b>  End If</b></p><p><b>  End If</b>

71、</p><p><b>  End Sub</b></p><p>  '地雷區(qū)方塊松開事件</p><p>  Private Sub iMine_MouseUp(index As Integer, _</p><p>  Button As Integer, _Shift As Integer, _x As

72、 Single, _y As Single)</p><p>  Dim xxx As Integer '換算組件所代表的坐標(biāo)值</p><p>  Dim yyy As Integer</p><p>  Dim rX As Integer '隨機(jī)數(shù)產(chǎn)生坐標(biāo)值</p><p>  Dim rY As Integer<

73、/p><p>  Dim cMINE_NUM As Integer '地雷數(shù)暫存值</p><p>  '判斷地雷區(qū)是否處于可動(dòng)作狀態(tài)</p><p>  If isDie = False And isFinal = False Then</p><p>  xxx = index Mod MAP_X '標(biāo)示動(dòng)作圖片的坐標(biāo)

74、</p><p>  yyy = index \ MAP_X</p><p>  '判斷為左鍵且該方塊為未探測(cè)狀態(tài)</p><p>  If Button = 1 And mapFaceArr(xxx, yyy) = 1 Then</p><p>  '判斷游戲是否等待啟動(dòng)</p><p>  If i

75、sStart = False Then</p><p>  cMINE_NUM = MINE_NUM</p><p>  isStart = True</p><p>  Timer1.Enabled = True</p><p><b>  '布置地雷</b></p><p>  Do

76、While cMINE_NUM > 0</p><p>  rX = Rnd() * (MAP_X - 1)</p><p>  rY = Rnd() * (MAP_Y - 1)</p><p>  '判斷數(shù)組中(rX,rY)為非地雷及</p><p>  '非點(diǎn)選的方塊坐標(biāo)時(shí)</p><p>

77、  If mapArr(rX, rY) <> 9 And _</p><p>  Not (rX = xxx And rY = yyy) Then</p><p>  cMINE_NUM = cMINE_NUM - 1</p><p>  mapArr(rX, rY) = 9</p><p>  '地雷外圍數(shù)字各加一<

78、;/p><p>  For xx = rX - 1 To rX + 1</p><p>  For yy = rY - 1 To rY + 1</p><p>  If xx >= 0 And xx <= MAP_X And _</p><p>  yy >= 0 And yy <= MAP_Y Then</p>

79、;<p>  If mapArr(xx, yy) <> 9 And _</p><p>  Not (xx = rX And yy = rY) Then</p><p>  mapArr(xx, yy) = mapArr(xx, yy) + 1</p><p><b>  End If</b></p>&

80、lt;p><b>  End If</b></p><p><b>  Next yy</b></p><p><b>  Next xx</b></p><p><b>  End If</b></p><p><b>  Loop<

81、;/b></p><p><b>  End If</b></p><p>  '將該方塊坐標(biāo)值設(shè)為0,表示為翻開狀態(tài)</p><p>  mapFaceArr(xxx, yyy) = 0</p><p>  '選擇地雷區(qū)數(shù)組判斷該坐標(biāo)</p><p>  Select Ca

82、se mapArr(xxx, yyy)</p><p>  Case 0 '空白</p><p>  Call doClear(xxx, yyy, index)</p><p>  Call setMineImage(index, 10)</p><p>  Case 1 To 8 '數(shù)字</p><p&g

83、t;  MINE_NUM_CLEAR = MINE_NUM_CLEAR + 1</p><p>  Call setMineImage(index, mapArr(xxx, yyy))</p><p>  Case 9 '地雷</p><p>  isDie = True</p><p>  Timer1.Enabled = Fals

84、e</p><p>  Call showMine</p><p>  Call setMineImage(index, 12)</p><p>  End Select</p><p>  '檢查是否只剩下地雷未探測(cè)</p><p>  If MAP_X * MAP_Y - MINE_NUM_CLEAR =

85、MINE_NUM Then</p><p>  isFinal = True</p><p><b>  End If</b></p><p><b>  End If</b></p><p><b>  '設(shè)定狀態(tài)圖示</b></p><p>

86、  Call setStateImage</p><p><b>  End If</b></p><p><b>  End Sub</b></p><p>  '清除未靠近地雷的區(qū)塊</p><p>  Private Sub doClear(ByVal x As Integer, B

87、yVal y As Integer, </p><p>  ByVal index As Integer)</p><p>  MINE_NUM_CLEAR = MINE_NUM_CLEAR + 1</p><p>  For xx = x - 1 To x + 1</p><p>  For yy = y - 1 To y + 1</

88、p><p>  If xx >= 0 And xx <= MAP_X And _</p><p>  yy >= 0 And yy <= MAP_Y Then</p><p>  If Not (xx = x And yy = y) Then</p><p>  If mapFaceArr(xx, yy) = 1 And

89、_</p><p>  mapArr(xx, yy) >= 0 And _</p><p>  mapArr(xx, yy) <= 8 Then</p><p>  mapFaceArr(xx, yy) = 0</p><p>  Select Case mapArr(xx, yy)</p><p><

90、;b>  Case 0</b></p><p>  Call setMineImage((yy * MAP_X + xx), 10)</p><p>  Call doClear(xx, yy, (yy * MAP_X + xx))</p><p>  Case 1 To 8</p><p>  MINE_NUM_CLEAR

91、 = MINE_NUM_CLEAR + 1</p><p>  Call setMineImage((yy * MAP_X + xx), mapArr(xx, yy))</p><p>  End Select</p><p><b>  End If</b></p><p><b>  End If</

92、b></p><p><b>  End If</b></p><p><b>  Next yy</b></p><p><b>  Next xx</b></p><p><b>  End Sub</b></p><p>

93、;<b>  '按下表情圖案時(shí)</b></p><p>  Private Sub iState_MouseDown(Button As Integer, Shift As Integer, </p><p>  x As Single, y As Single)</p><p>  If Button = 1 Then</p&g

94、t;<p>  Set iState.Picture = ilSmile.ListImages(2).Picture</p><p><b>  End If</b></p><p><b>  End Sub</b></p><p><b>  '松開表情圖案時(shí)</b><

95、/p><p>  Private Sub iState_MouseUp(Button As Integer, Shift As Integer, </p><p>  x As Single, y As Single)</p><p>  If Button = 1 Then</p><p>  Set iState.Picture = ilSm

96、ile.ListImages(1).Picture</p><p><b>  Form_Load</b></p><p><b>  End If</b></p><p><b>  End Sub</b></p><p><b>  '設(shè)定狀態(tài)圖示<

97、/b></p><p>  Private Sub setStateImage()</p><p><b>  '狀態(tài)判斷</b></p><p>  If isDie = False Then</p><p>  If isFinal = True Then</p><p>  S

98、et iState.Picture = ilSmile.ListImages(5).Picture</p><p>  Call showFinal '顯示過(guò)關(guān)</p><p><b>  Else</b></p><p>  Set iState.Picture = ilSmile.ListImages(1).Picture</

99、p><p><b>  End If</b></p><p><b>  Else</b></p><p>  Set iState.Picture = ilSmile.ListImages(4).Picture</p><p><b>  End If</b></p>

100、<p><b>  End Sub</b></p><p><b>  '設(shè)定方塊圖片</b></p><p>  Private Sub setMineImage(m_index As Integer, il_index As Integer)</p><p>  Set iMine(m_index

101、).Picture = ilMap.ListImages(il_index).Picture</p><p><b>  End Sub</b></p><p><b>  '初始設(shè)定</b></p><p>  Private Sub setInit(index As Integer)</p>&l

102、t;p>  isStart = False</p><p>  isFinal = False</p><p>  isDie = False</p><p>  Timer1.Enabled = False</p><p>  TIME_COUNTER = 0</p><p>  MINE_NUM_LABEL

103、= 0</p><p>  MINE_NUM_CLEAR = 0</p><p>  Select Case index</p><p><b>  Case 0</b></p><p><b>  MAP_X = 9</b></p><p><b>  MAP_Y

104、 = 9</b></p><p>  MINE_NUM = 10</p><p><b>  Case 1</b></p><p>  MAP_X = 16</p><p>  MAP_Y = 16</p><p>  MINE_NUM = 40</p><p>

105、;<b>  Case 2</b></p><p>  MAP_X = 30</p><p>  MAP_Y = 16</p><p>  MINE_NUM = 99</p><p><b>  Case 3</b></p><p>  MAP_X = GetSetting(

106、"Mine", "SET", "1", "30")</p><p>  MAP_Y = GetSetting("Mine", "SET", "2", "24")</p><p>  MINE_NUM = GetSetting(&qu

107、ot;Mine", "SET", "3", "50")</p><p>  End Select</p><p>  For i = 0 To 3</p><p>  muGame_Level(i).Checked = False</p><p><b>  Ne

108、xt i</b></p><p>  muGame_Level(index).Checked = True</p><p>  SaveSetting "Mine", "Level", "1", index '儲(chǔ)存選擇</p><p><b>  End Sub</b&g

109、t;</p><p><b>  '計(jì)數(shù)區(qū)初始化</b></p><p>  Private Sub setCounterInit()</p><p>  Dim wid As Integer</p><p>  Dim hig As Integer</p><p><b>  

110、'地雷計(jì)數(shù)顯示</b></p><p>  Call setNowMines '顯示現(xiàn)在地雷數(shù)</p><p>  iMC1.Move 0, 0</p><p>  iMC2.Move iMC1.Left + iMC1.Width, 0</p><p>  iMC3.Move iMC2.Left + iMC2.Wi

111、dth, 0</p><p>  '設(shè)定地雷計(jì)數(shù)框大小</p><p>  wid = pMC.Width - pMC.ScaleWidth</p><p>  hig = pMC.Height - pMC.ScaleHeight</p><p>  pMC.Width = iMC1.Width * 3 + wid</p&g

112、t;<p>  pMC.Height = iMC1.Height + hig</p><p><b>  '時(shí)間計(jì)數(shù)顯示</b></p><p>  Call setNowTimer</p><p>  iTC1.Move 0, 0</p><p>  iTC2.Move iTC1.Left + i

113、TC1.Width, 0</p><p>  iTC3.Move iTC2.Left + iTC2.Width, 0</p><p>  '設(shè)定時(shí)間計(jì)數(shù)框大小</p><p>  wid = pTC.Width - pTC.ScaleWidth</p><p>  hig = pTC.Height - pTC.ScaleHeight&

114、lt;/p><p>  pTC.Width = iTC1.Width * 3 + wid</p><p>  pTC.Height = iTC1.Height + hig</p><p><b>  '計(jì)數(shù)區(qū)配置</b></p><p>  wid = pCounter.Width - pCounter.ScaleW

115、idth</p><p>  hig = pCounter.Height - pCounter.ScaleHeight</p><p>  pCounter.Move 150, _150, </p><p>  _iMine(0).Width * MAP_X + wid, </p><p>  _pMC.Height + 300 + hig&

116、lt;/p><p><b>  '設(shè)定組件位置</b></p><p>  Set iState.Picture = ilSmile.ListImages(1).Picture</p><p>  iState.Move (pCounter.ScaleWidth - iState.Width) / 2, 150</p><

117、;p>  pMC.Move 150, 150</p><p>  pTC.Move pCounter.ScaleWidth - 150 - pTC.Width, 150</p><p><b>  End Sub</b></p><p><b>  '地圖初始化</b></p><p>

118、;  Private Sub setMapInit()</p><p>  pMap.Visible = False</p><p>  '重新定義地圖數(shù)組大小</p><p>  ReDim mapArr(MAP_X, MAP_Y)</p><p>  ReDim mapFaceArr(MAP_X, MAP_Y)</p>

119、<p><b>  '地圖中小方塊長(zhǎng)寬</b></p><p>  Dim iWid As Integer</p><p>  Dim iHig As Integer</p><p>  iWid = iMine(0).Width</p><p>  iHig = iMine(0).Height&l

120、t;/p><p><b>  '設(shè)定地圖數(shù)組數(shù)據(jù)</b></p><p>  '并加載表示地圖數(shù)據(jù)之圖片</p><p>  For y = 0 To MAP_Y - 1</p><p>  For x = 0 To MAP_X - 1</p><p>  mapArr(x, y) =

121、 0</p><p>  mapFaceArr(x, y) = 1</p><p>  Call setMineImage(y * MAP_X + x, 9)</p><p>  iMine(y * MAP_X + x).Move x * iWid, y * iHig</p><p>  iMine(y * MAP_X + x).Visibl

122、e = True</p><p>  iMine(y * MAP_X + x).ZOrder</p><p>  If iMine.Count < (MAP_X * MAP_Y) Then</p><p>  Load iMine(iMine.Count)</p><p><b>  End If</b></

123、p><p><b>  Next x</b></p><p><b>  Next y</b></p><p>  '設(shè)定地圖區(qū)大小位置</p><p>  Dim wid As Integer</p><p>  Dim hig As Integer</p>

124、<p>  wid = pMap.Width - pMap.ScaleWidth</p><p>  hig = pMap.Height - pMap.ScaleHeight</p><p>  pMap.Move 150, _</p><p>  pCounter.Height + 300, _</p><p>  MAP_X

125、 * iWid + wid, _</p><p>  MAP_Y * iHig + hig</p><p>  pMap.Visible = True</p><p><b>  End Sub</b></p><p><b>  '設(shè)定窗體大小</b></p><p&g

126、t;  Private Sub setFormSize()</p><p>  Dim wid As Integer</p><p>  Dim hig As Integer</p><p>  wid = Me.Width - Me.ScaleWidth</p><p>  hig = Me.Height - Me.ScaleHeight&

127、lt;/p><p>  Me.Width = pMap.Width + 300 + wid</p><p>  Me.Height = pMap.Height + pCounter.Height + 450 + hig</p><p><b>  End Sub</b></p><p><b>  '顯示現(xiàn)

128、在地雷數(shù)</b></p><p>  Private Sub setNowMines()</p><p>  Dim intNM As Integer</p><p>  intNM = MINE_NUM - MINE_NUM_LABEL</p><p>  If intNM < 0 Then intNM = 0</p

129、><p>  Set iMC1.Picture = _</p><p>  ilCounter.ListImages((intNM Mod 1000) \ 100 + 1).Picture</p><p>  Set iMC2.Picture = _</p><p>  ilCounter.ListImages((intNM Mod 100) \

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論