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

下載本文檔

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

文檔簡介

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

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

3、程序員都認為VB里搞開發(fā)不自由.的確,簡單和功能強大這兩者本身就是一對矛盾. 掃雷游戲是操作系統(tǒng)中的一個主要的益智類游戲. 用戶對鼠標進行操作,單擊鼠標左鍵為踩雷,單擊鼠標左鍵在標記,疑問,空白三種狀態(tài)中循環(huán),同時單擊鼠標左右鍵為踩單擊點在內(nèi)的周圍九格內(nèi)所有沒有標記為已標記的所有格子.同時程序從你單擊第一次時開始計時,到勝利或引爆地雷終結(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簡介2</p><p>  2.2 本設(shè)計運用的技術(shù)2</p><p><b>  3可行性分析6</b></p><p><b>  4總體設(shè)計7&

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

31、過程中,不小心翻開(踩到)藏有地雷的方塊,則宣告失?。ㄋ劳觯┯袑⑺胁缓乩椎姆綁K掀開,游戲才算成功(存活)。</p><p>  游戲的操作方面主要以鼠標為主,當鼠標指針對準未翻開的方塊按下左鍵時即表示翻開方塊,當鼠標指針對準未翻開的方塊按下右鍵時即表示標示或疑似地雷,反復(fù)按下右鍵則方塊會依未標示→標示→疑似三者關(guān)系不斷循環(huán)。使用者可以通過地雷區(qū)內(nèi)的數(shù)表示以其為中心的周邊八個方塊內(nèi)所含的地雷數(shù)。當按下的方塊

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

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

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

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

36、t;/p><p>  ●:地雷區(qū)(PictureBox)。</p><p>  ●~:地雷數(shù)(Image)。</p><p>  ●:游戲狀態(tài)(Image)。</p><p>  ●~:經(jīng)過秒數(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è)計過程</b></p><p>  5.2.1 添加

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

39、輯器</b></p><p>  5.2.2 自定義窗體設(shè)計</p><p>  打開主菜單游戲→自定義,可以顯示窗體,如圖5所示。通過這個窗體使用者可以自己設(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è)計</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 運行界面</b></p><p>  執(zhí)行窗體時的界面如圖6所示:</p><p> 

46、 圖6 窗體運行界面</p><p><b>  '窗體加載</b></p><p>  Private Sub Form_Load()</p><p>  Randomize '初始化隨機數(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>  '計數(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)測試</b></p><p>  掃雷游戲是WINDOWS系統(tǒng)自帶的一個娛樂性的小游戲,為了確保本游戲能夠正常運行,需要在發(fā)布之后做一次

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

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

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

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

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

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

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

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

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

59、><p>  Dim isStart As Boolean '游戲是否已進行</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ū)方塊探測情形</p><p><b>  '窗體加載</b></p><p>  Private Sub Form_Load()</p><p>  Randomize '初始化隨機數(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>  '計數(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 '換算組件所代表的坐標值</p><p>  Dim yyy As Integer</p&

65、gt;<p>  If isFinal = False And isDie = False Then</p><p>  xxx = index Mod MAP_X '標示動作圖片的坐標</p><p>  yyy = index \ MAP_X</p><p>  If Button = 1 Then '鼠標左鍵</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 '鼠標右鍵</p><p>  If mapFaceArr(xxx, yyy) = 1 Then '未探測</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 '標示</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 '換算組件所代表的坐標值</p><p>  Dim yyy As Integer</p><p>  Dim rX As Integer '隨機數(shù)產(chǎn)生坐標值</p><p>  Dim rY As Integer<

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

74、</p><p>  yyy = index \ MAP_X</p><p>  '判斷為左鍵且該方塊為未探測狀態(tài)</p><p>  If Button = 1 And mapFaceArr(xxx, yyy) = 1 Then</p><p>  '判斷游戲是否等待啟動</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>  '非點選的方塊坐標時</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>  '將該方塊坐標值設(shè)為0,表示為翻開狀態(tài)</p><p>  mapFaceArr(xxx, yyy) = 0</p><p>  '選擇地雷區(qū)數(shù)組判斷該坐標</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>  '檢查是否只剩下地雷未探測</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>  '按下表情圖案時</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>  '松開表情圖案時</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ā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 '儲存選擇</p><p><b>  End Sub</b&g

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

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

評論

0/150

提交評論