畢業(yè)論文設計-基于C的掃雷游戲設計與實現_第1頁
畢業(yè)論文設計-基于C的掃雷游戲設計與實現_第2頁
畢業(yè)論文設計-基于C的掃雷游戲設計與實現_第3頁
畢業(yè)論文設計-基于C的掃雷游戲設計與實現_第4頁
畢業(yè)論文設計-基于C的掃雷游戲設計與實現_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、武漢理工大學C+課程設計 基于C+勺經典掃雷游戲程序設計目錄 TOC o 1-5 h z HYPERLINK l bookmark4 o Current Document 摘要31、引言4 HYPERLINK l bookmark10 o Current Document 1.1課題背景及意義4 HYPERLINK l bookmark12 o Current Document 1.2 Visual C+ 發(fā)展概況5 HYPERLINK l bookmark14 o Current Document 1.3關于本課題6 HYPERLINK l bookmark16 o Current Docu

2、ment 2、游戲的總體分析與設計7 HYPERLINK l bookmark18 o Current Document 2.1游戲功能簡介7 HYPERLINK l bookmark20 o Current Document 2.2設計構想7 HYPERLINK l bookmark22 o Current Document 2.3流程規(guī)劃8 HYPERLINK l bookmark24 o Current Document 3、掃雷游戲的具體實現過程9 HYPERLINK l bookmark26 o Current Document 3.1掃雷游戲模塊的實現9 HYPERLINK l b

3、ookmark28 o Current Document 3.1.1掃雷游戲主窗體的創(chuàng)建9 HYPERLINK l bookmark54 o Current Document 3.1.2主界面控制菜單的設計13 HYPERLINK l bookmark66 o Current Document 3.2掃雷游戲核心布雷算法設計13 HYPERLINK l bookmark84 o Current Document 3.3掃雷鼠標事件的處理20 HYPERLINK l bookmark88 o Current Document 3.4掃雷其它處理27 HYPERLINK l bookmark90

4、o Current Document 3.4.1難度設置菜單消息處理27 HYPERLINK l bookmark104 o Current Document 3.4.2背景音樂菜單消息處理28 HYPERLINK l bookmark114 o Current Document 3.4.3其它處理29 HYPERLINK l bookmark116 o Current Document 4、掃雷游戲程序的調試與運行29 HYPERLINK l bookmark122 o Current Document 5、掃雷游戲設計總結316、致謝31 HYPERLINK l bookmark126 o

5、 Current Document 7、參考文獻32摘要游戲業(yè)發(fā)展一日千里,該行業(yè)極大的影響和改變了人們的生活和娛樂方式,游戲為消 費者提供豐富多彩的虛擬空間,使消費者可以自由自在的享受虛擬世界的樂趣,實現自己 在現實生活著那個可能永遠不能實現的夢想,滿足了消費者的心理和精神需求。掃雷游戲是 Windows操作系統(tǒng)自帶的一個小游戲,過去的幾年里 Windows操作系統(tǒng) 歷經數次換代,變得越來越龐大、復雜,但這個可愛的小游戲在任何版本的Windows操作系統(tǒng)里去卻依然保持著原貌。但幾乎每個電腦使用者都接觸過它, 并且深愛著這款小游戲。掃雷游戲是比較經典的一款小游戲,實現它的方法很多,可以用很多不

6、同算法和語言實現,如C,C+,VB,JAVA等。本論文研究的是以Visual C+ 6.0為開發(fā)環(huán)境,設計并開發(fā) 一款掃雷游戲,其功能類似于Windows操作系統(tǒng)自帶的掃雷游戲。論文首先介紹了制作游 戲的整體思路及整個游戲設計的流程規(guī)劃,然后介紹了雷區(qū)的布置及地雷隨機產生的實現 方法;重點介紹了在游戲過程中各事件的處理,其中又以鼠標事件和清除未靠近地雷區(qū)方 塊這兩方面最為最要,鼠標事件是利用鼠標所發(fā)出的信息了解使用者的意圖,進而做出相 對應的動作,而清除未靠近地雷區(qū)方塊由于引進了遞歸”這個概念而使其簡單化。關鍵字:掃雷;Visual C+ 6.0;事件;遞歸AbstractGame in du

7、stry develops by leaps and boun ds,a nd it has a great impact on the way people live and entertainment, games provide consumers with a variety of virtual space, so that con sumers can enjoy the free fun of the virtual world, achieve the dream that may n ever achieve in real life, and satisfy the psy

8、chological and spiritual needs consumer.The Sweep Mine Game is a small game that the Windows operating system have. Over the past few years the Windows operating system has experieneed a number of chang,and become much larger and more complexed. However, this lovely game in any version of the Win do

9、ws operat ing system has keep the orig inal appeara nceAlmost every computer users have come in to con tact with it, and love this game.The Sweep Mine Game is an classical little game, and there are many ways can achieveit,we can use many differe nt algorithms and Ian guages,such as C,C+,VB,JAVA and

10、 so on. This study is based on Visual C+ 6.0 to designed and made the sweep mine game,ifs function is similar to the game that the Windows operating system has. First we introduced the whole idea of making the game and the process planning of the game design,then introduced the method of the layout

11、of min efields and mines ran domly gen eratedA nd focuses on the process of deali ng with the incident in the game, among them, the mouse events and clearanee of unexploded landmines around the box are the two most important thing, the mouse events is to use the messagethat the mouse give to un ders

12、ta nd the the users intent, the n make the corresp onding action, and clearanee of unexploded landmines around the box has became simply with the introduction of the recursive.Key words: Sweep Mine, Visual C+ 6.0, Affairs, Recursio n1引言1.1課題背景及意義當前隨著計算機的深入普及,越來越多的人有了個人電腦,人們運用計算機完成許多重要的工作,計算機在人們的生活中變

13、的越來越來重要。隨著計算機的應用和發(fā)展計算機 已經不單純是一個工作工具,人們越來越重視計算機的娛樂性了,近年來游戲產業(yè)規(guī)模持 續(xù)成長,全球每年游戲業(yè)總產值已經突破 200億美金,遠遠超越好萊塢電影產業(yè)以及音樂 娛樂事業(yè),而成為目前娛樂事業(yè)的最大主流。不過游戲產業(yè)光鮮亮麗的背后,卻也隱含著 高風險、高成本的危機,顯示游戲產業(yè)慢慢步入“微利時代”。目前整個游戲產業(yè)的運作模式已經跟好萊塢電影產業(yè)的運作模式相同,電影產業(yè)有制片、發(fā)行、宣傳等分工,游戲產業(yè)亦同,由專業(yè)的游戲研發(fā)小組負責研發(fā)游戲,也有如微 軟、美商藝電這類國際級大廠負責游戲發(fā)行,甚至連“游戲制作人”也被培養(yǎng)成明星一樣 成為一種招牌,如任天

14、堂有王牌制作人宮本茂、SEGAt鈴木裕、KONAM有小島秀夫、CAPCOM 有三上真司、TECMO有板垣伴信 等,明確的游戲產業(yè)分工的確有助于游戲產業(yè)的規(guī)模發(fā) 展與進化,但也無形中讓游戲開發(fā)成本大增。為了降低游戲開發(fā)成本,開發(fā)娛樂性強成本 低的游戲就成為當前的主要課題,在這種趨勢下各種小型的低成本的游戲軟件應運而生。在這其中,系統(tǒng)自帶的小游戲也占據了相當重要的地位,與那些網絡游戲和3D游戲相比,它有編寫簡單容易上手等特點,非常適合人們在完成工作的時候適當的娛樂要求。這些小 游戲大都是以益智和娛樂為目的,不僅給緊張工作的人們以放松,還可以讓人們的大腦得 到開發(fā)。這些小游戲包括掃雷,彈球,紙牌等等

15、。而本課題就是掃雷游戲的設計。1.2 Visual C+發(fā)展概況Visual C+是一個功能強大的可視化軟件開發(fā)工具。自1993年Microsoft公司推出Visual C+1.0后,隨著其新版本的不斷問世,Visual C+已成為專業(yè)程序員進行軟件開發(fā)的首選工具。雖然微軟公司推出了 Visual C+.NET(Visual C+7.0),但它的應用的很大的局限 性,只適用于 Windows 2000,Windows XP和 Windows NT4.0。所以實際中,更多的 是以VisualC+6.0為平臺。Visual C+6.0不僅是一個 C+編譯器,而且是一個基于Windows操作系統(tǒng)的可

16、視化集成開發(fā)環(huán)境(integrated development environment,IDE )。Visual C+6.0 由許多 組件組成,包括編輯器、調試器以及程序向導AppWizard、類向導Class Wizard等開發(fā)工具。這些組件通過一個名為Developer Studio的組件集成為和諧的開發(fā)環(huán)境。Visual C+它大概可以分成三個主要的部分:1. Developer Studio,這是一個集成開發(fā)環(huán)境,我們日常工作的99%都是在它上面完成的,再加上它的標題赫然寫著“ Microsoft Visual C+,”所以很多人理所當然的認為,那就是 Visual C+ 了。其實不然

17、,雖然 Developer Studio提供了一個很好的 編輯器和很多Wizard,但實際上它沒有任何編譯和鏈接程序的功能,真正完成這些工作的幕后英雄后面會介紹。我們也知道,Developer Studio并不是專門用于 VC 的,它也同樣用于VB,VJ,VID等Visual Studio家族的其他同胞兄弟。所以不要把Developer Studio當成 Visual C+, 它充其量只是 Visual C+的一個殼子而已。這一 點請切記!2 . MFC,從理論上來講,MFC 也不是專用于Visual C+,Borland C+,C+Builder和Symantec C+同樣可以處理 MFC。

18、同時,用 Visual C+編寫代碼也并 不意味著一定要用MFC,只要愿意,用Visual C+來編寫SDK程序,或者使用STL,ATL,一樣沒有限制。不過,Visual C+本來就是為 MFC打造的,Visual C+中的許多特征和語言擴展也是為MFC而設計的,所以用 Visual C+而不用MFC就等于拋棄了 Visual C+中很大的一部分功能。但是,Visual C+也不等于 MFC。3. Platform SDK。這才是 Visual C+和整個 Visual Studio的精華和靈魂,雖然 我們很少能直接接觸到它。大致說來,Platform SDK是以Microsoft C/C+編

19、譯器為核心(不是 Visual C+,看清楚了),配合 MASM,輔以其他一些工具和文檔資料。 上面說到Developer Studio沒有編譯程序的功能,那么這項工作是由誰來完成的呢? 是CL,是NMAKE,和其他許許多多命令行程序,這些我們看不到的程序才是構成 Visual Studio的基石。Visual C+之所以具有如此廣泛的用途是因為它具有以下的特點:真正的面向對象編程,使開發(fā)人員不用加入太多的代碼,加快了系統(tǒng)開發(fā)的速度。 可視化的編程方法以及向導的功能,使開發(fā)人員不用加入太多的代碼就可以開發(fā)出標準的Windows程序。數據訪問的特性,允許對包括 Microsoft SQL Ser

20、ver和其他企業(yè)數據庫在內的大部 分數據庫格式建立數據庫和前端應用程序,以及可調整的服務器端部件等。通過ActiveX技術可使用其他應用程序提供的功能,例如Microsoft Word字處理器、 Microsoft Excel電子數據表及其他 Windows應用程序,甚至可直接使用 Visual Basic創(chuàng)建 的應用程序和對象。In ternet功能強大,使用戶很容易在應用程序內通過In ternet或企業(yè)內部網(In tra net) 訪問文檔和應用程序,或者創(chuàng)建In ternet服務器應用程序。 已完成的應用程序是真正的.exe文件,您可以自由發(fā)布。1.3關于本課題隨著世界經濟的長足發(fā)展

21、和計算機技術的日益成熟,計算機被應用到人類活動的各個 領域,各種應用軟件也相繼問世,這其中有相當一部分是游戲軟件。使用游戲軟件自然是 為了滿足人們對娛樂性的要求,而有些軟件大都采用 3D設計對系統(tǒng)配置的要求較高。在眾多游戲軟件中,也不乏一些小游戲的身影,它們對系統(tǒng)的配置要求較低。能夠滿 足人們對娛樂性的需求,是人們在完成工作娛樂時候的最好選擇?,F在越來越多的人投入 到這種小游戲的開發(fā)當中,它已經成為一類必不可少的游戲軟件。在各種操作系統(tǒng)中都附帶了一些小的游戲,而這些游戲也成為電腦用戶軟件中不可或缺的一部分。作為本系統(tǒng)的開發(fā)工具,Microsoft Visual C+ 6.0成為首選。它具有可視

22、化的編程界面、詳細的提示、以及完善的幫助文檔,使得軟件開發(fā)人員感到無比的親切感。2游戲的總體分析與設計2.1游戲功能簡介當前各種游戲軟件層出不窮。因為游戲的開發(fā)成本非常大,所以游戲的開發(fā)具有一定 的風險性,但是一些小游戲的開發(fā)具有成本小,編寫簡單的優(yōu)勢,所以這些小游戲在游戲 開發(fā)中也占有一席之地。在這類小游戲中包括益智類游戲,它以畫面精美游戲方法簡單等 特點得到大家的認可。成為人們在工作之余不可或缺的好伙伴。針對真種情況我用VB編寫了掃雷這款小游戲。下面對該游戲的功能做個簡單的介紹。掃雷游戲的基本功能:點擊鼠標左鍵于未知區(qū)域,如果未知區(qū)域有雷,游戲停止,顯 示所有的地雷。如果沒雷,則顯示周圍雷

23、數,如果周圍沒雷,則再查看周圍八個區(qū)域是否有 雷直到有雷為止并顯示,這其實是一個遞歸過程。點擊鼠標右鍵于未知區(qū)域,則將其置為有雷而不管是否真的有雷??蛇x擇初、中、高 三級并可自定義雷數和區(qū)域大小。雷區(qū)上部左側顯示總雷數減被標明有雷區(qū)域的數目。雷區(qū)上部中間位置顯示一按鈕用于開局和顯示鼠標動作的結果。雷區(qū)上部右側顯示掃雷的時間。將雷全部掃清后,則顯示一對話框將你的姓名記入排行榜。2.2設計構想相信大多數使用 Windows操作系統(tǒng)的使用者,對這款游戲都不陌生。這款游戲不止操 作簡單,規(guī)則也不難,再加上游戲速度的控制機制得宜,讓整個游戲在操作過程中充滿了 快樂與緊張的氣氛。除了游樂當中能帶給使用者快

24、樂之外,游戲的設計內容無形中也不斷 訓練使用者的邏輯思考能力,對于依靠高度腦力工作的現代人,都可以通過這個游戲,不 時的檢驗一下自己,所以我們不難發(fā)現,在各種可攜帶的電子產品上都有這款游戲的蹤影。 在設計之前,我們先來了解這款游戲的規(guī)則。在不掀開任何藏有地雷的方塊情況下,以最快的速度找出所有的地雷。如果在掀開方 塊的過程中,不小心翻開(踩到)藏有地雷的方塊,則宣告失?。ㄓ螒蚪Y束),惟有將所 有不含地雷的方塊掀開,游戲才算成功。游戲的操作方面主要以鼠標為主,當鼠標指針對準未翻開的方塊按下左鍵時即表示翻 開方塊,當鼠標指針對準未翻開的方塊按下右鍵時即表示標示或疑示地雷,反復按下右鍵 則方塊會以未標

25、示一標示一疑似三者關系不斷循環(huán)。游戲者可以通過地雷區(qū)內的數字提示 了解以數字為中心的其周邊八個方格內所含的地雷數,假若翻開的方塊顯示數字“3”,則表示以其為中心的周邊方塊內藏有 3個地雷。當按下的方塊不是地雷,且周邊八個方塊也都沒有地雷時,方塊會以被翻開方塊的八個方 向將空白方塊翻開。2.3流程規(guī)劃流程規(guī)劃大致上可以分為三個部分,分別為:畫面初始、游戲者按下第一個方塊和為 非地雷方塊時展開。畫面初始時,以游戲者最后一次設定的地雷區(qū)大小為范圍畫出地雷區(qū),但此時并未產 生地雷。當游戲者按下第一個方塊時產生地雷資料并啟動定時器,為何在游戲者按下第一 個方塊才產生地雷資料呢?其主要的用意在于不要讓游戲

26、者第一次就踩到地雷,這樣在某 種程度上可以提高游戲者游玩的氣氛。接著就是如何判斷按下的方塊是非地雷時的處理, 這也是整個游戲的技術核心,我們可以通過遞歸的觀念來檢查周邊的方塊是否含有地雷及 是否繼續(xù)往外翻開?;谝陨纤悸罚L制功能圖如下:窗體加載3.掃雷游戲的具體實現過程3.1掃雷游戲模塊的實現掃雷游戲的開發(fā)主要包括兩大部分:一個部分是布雷,該部分主要將雷隨機布置在游 戲區(qū)域內,以避免出現相同的雷區(qū)布置地圖。另一部分是掃雷,該部分包括判斷鼠標左鍵 點擊某區(qū)域該區(qū)域是否是雷,如果是雷該如何操作,如果不是雷該如何操作,鼠標右鍵點 擊某區(qū)域時如果判斷該區(qū)域是雷則加以標記,如果不是雷也加以標記,以及當

27、鼠標雙擊某 區(qū)域時,判斷與該區(qū)域相鄰的其它 8個區(qū)域是否是雷并做一個標記。下面首先介紹第一部 分之一掃雷主窗體創(chuàng)建。3.1.1掃雷游戲主窗體的創(chuàng)建啟動Visual C+ 6.0 后,選擇新建工程,Visual C+ 6.0 提供了用戶可能需要的各 種類型的應用程序模板。如果是這種情況,選擇 MFCAppWizard(exe)項目,輸入工程名稱 和位置,將創(chuàng)建一個新的工程如下:FilesPiteijitisWuirkspatEE!: | Other DaEumerit!;uljAfL COM AppWizardRJCIusIcr Resource Type Wizard ICnsInm Ap(i

28、Wizard ipUdiabase Project DevStudlo Add-In Wizard Fxtcndnri Slnrnd Pmc Wizard-ItidPII txteniion Wi呈酊BitBlt(0,0,600,600,&memdc,O,O,SRCCOPY);主要是美化運行界面,如下:DrawChessBoard()接下來要繪制鼠標操作區(qū)域,即游戲區(qū)域。添加繪制棋盤函數 如下:void CShaoLeiDlg:DrawChessBoard()CDC* pDC = GetDC();CPe n pen( PS_SOLID,1,RGB(0,0,0); pDC-SelectObjec

29、t(&pe n);for (i nt i = 0; iMoveTo(x+cx*(i),y);pDC-L in eTo(x+cx*(i),y+row*cy);for (i nt j = 0; jMoveTo(x,y+(j)*cy); pDC-Li neTo(x+col*cx,y+(j)*cy);然后的運行結果如下:應.WJVj003.1.2主界面控制菜單的設計接下來回到資源編程界面,編寫菜單資源,用來控制掃雷的過程,以及難度選定,和才匕旦左廠廠 冃景曰樂等?!霸O置菜單“包含:開始,初級,中級,高級,音樂開,音樂關,退出 其中,音樂開 包含 默認的音樂和打開本地音樂兩個子菜單項?!皫椭安藛潍@取該

30、軟件的版本信息。如下::工i由W設始級級煩樂樂山 開初中高音音邏-.于助將菜單添加到主界面,至此主窗體基本創(chuàng)建完畢。3.2掃雷游戲核心布雷算法設計(1)掃雷游戲是由很多相同大小的格子組成的,一般計算機中自帶的游戲格子規(guī)格為9*9 ,16*15和30*16 (第一個數字代表函數,第二個數字代表列數)。規(guī)格不同,需要埋 的地雷數目就 不同,這就會涉及到隨機埋雷算法,最簡單的是一下兩種函數的結合:void srand(unsigned int seed);/seed 為隨機種子一般這樣使用該函數:srand(unsigned) time(NULL);/即利用系統(tǒng)時間作為隨機種子,因為系統(tǒng)內置的時鐘是

31、在時刻變化的。然后使用如下函數產生隨機數:int rand( void)/可嘗試(0, RAND_MAX )之間的隨機整數,RAND_MAX 為十六進制的0X7fff可進行一些算術運算,使之產生所需要的任意隨機數。(2)掃雷游戲還要求在沒有雷的地方被點擊后就會顯示一個數字表示它周圍有幾個雷,這里分析實現這個功能的算法。把整個游戲區(qū)看成一個二維數組mi nefieldij:11111415161718192122232425262728293132333435363738394142柯444546474K4951525?545556575859要知道m(xù)inefield26周圍有幾個雷,只要去檢測

32、如下8個網格是否有雷即可。min efield15,mi nefield1 6,mi nefield17mi nefield25,mi nefield27min efield35,mi nefield3 6,mi nefield37將上面的8個網格的位置關系與minefield26進行比較,不難發(fā)現它們之間存在一定的數 學關系,抽象看來就是:minefieldij周圍雷的個數是由如下8個位置處的雷的總合決定的。mi nefieldi-1j-1,mi nefieldi-1j,mi nefieldi-1j+1min efieldij-1,mi nefieldij+1min efieldi+1j-1

33、,mi nefieldi+1j,m in efieldi+1j+1上面幾個位置可能超出了邊界,因此需要根據實際情況給變量i與j設置范圍。根據以上的分析,設計布雷算法的代碼,添加BuLei()函數用于隨機布雷。void BuLei()/ 隨機布雷武漢理工大學C+課程設計 武漢理工大學C+課程設計m_NodeListk1-1k2+1.m_Type=n cNUMBER; int k1,k2;srand( (unsigned)time( NULL );for(i nt i=O;i=0)&( k2-1=0)&(m_NodeListk1-1k2-1.m_Type!=ncLEI)/ m_NodeListk1

34、-1k2-1.m_Type=n cNUMBER; m_NodeListk1-1k2-1.m_Arou nd+=1;if(k1-1=0)&m _NodeListk1-1k2.m_Type!=ncLEI)/ 上方m_NodeListk1-1k2.m_Type=n cNUMBER;m_NodeListk1-1k2.m_Arou nd+=1;左上方右上方if(k1-1=0)&( k2+1=0)&m _NodeListk1k2-1.m_Type!=ncLEI)/ 左方m_NodeListk1k2-1.m_Type=ncNUMBER;m_NodeListk1k2-1.m_Arou nd+=1;if(k2+

35、1col)&m _NodeListk1k2+1.m_Type!=ncLEI)/ 右方m_NodeListk1k2+1.m_Type=ncNUMBER;m_NodeListk1k2+1.m_Arou nd+=1;if(k1+1=0)&m _NodeListk1+1k2-1.m_Type!=ncLEI)/左下方m_NodeListk1+1k2-1.m_Type=n cNUMBER; m_NodeListk1+1k2-1.m_Arou nd+=1;if(k1+1row )&m _NodeListk1+1k2.m_Type!=ncLEI)/ 下方m_NodeListk1+1k2.m_Type=ncNU

36、MBER;m_NodeListk1+1k2.m_Arou nd+=1;if(k1+1row )&(k2+1col)&m _NodeListk1+1k2+1.m_Type!=ncLEI)/右下方m_NodeListk1+1k2+1.m_Type=ncNUMBER;m_NodeListk1+1k2+1.m_Arou nd+=1;武漢理工大學C+課程設計else if(m_NodeListij.m_Arou nd=8) 武漢理工大學C+課程設計else if(m_NodeListij.m_Arou nd=3) 當然,還得添加繪圖代碼用來在游戲區(qū)域顯示隨機布置的雷和周邊情況,在On Pa int函數中

37、添加如下代碼:void On Pai nt()for(i nt i=0;irow;i+)for(i nt j=0;jBitBlt(m_NodeListij.m_Poi nt.x-cx/2,m_NodeListij.m_Poi nt.y-cy/2,20,20,&memdc,0,0,SRCCOPY);elseif(m_NodeListij.m_Arou nd=1)memdc.SelectObject(&bmp_1); pDC-BitBlt(m_NodeListij.m_Poi nt.x-cx/2,m_NodeListij.m_Poi nt.y-cy/2,20,20,&m emdc,0,0,SRCC

38、OPY);else if(m_NodeListij.m_Arou nd=2)memdc.SelectObject(&bmp_2); pDC-BitBlt(m_NodeListij.m_Poi nt.x-cx/2,m_NodeListij.m_Poi nt.y-cy/2,20,20,&m emdc,0,0,SRCCOPY);memdc.SelectObject(&bmp_3);pDC-BitBlt(m_NodeListij.m_Poi nt.x-cx/2,m_NodeListij.m_Poi nt.y-cy/2,20,20,&memdc,O,O,SRCCOPY);else if(m_NodeLi

39、stij.m_Ar oun d=4)memdc.SelectObject(&bmp_4);pDC-BitBlt(m_NodeListij.m_Poi nt.x-cx/2,m_NodeListij.m_Poi nt.y-cy/2,20,20,&memdc,0,0,SRCCOPY);else if(m_NodeListij.m_Aro un d=5)memdc.SelectObject(&bmp_5);pDC-BitBlt(m_NodeListij.m_Poi nt.x-cx/2,m_NodeListij.m_Poi nt.y-cy/2,20,20,&memdc,0,0,SRCCOPY);else

40、 if(m_NodeListij.m_Arou nd=6)memdc.SelectObject(&bmp_6);pDC-BitBlt(m_NodeListij.m_Poi nt.x-cx/2,m_NodeListij.m_Poi nt.y-cy/2,20,20,&memdc,0,0,SRCCOPY);else if(m_NodeListij.m_Aro un d=7)memdc.SelectObject(&bmp_7);pDC-BitBlt(m_NodeListij.m_Poi nt.x-cx/2,m_NodeListij.m_Poi nt.y-cy/2,20,20,&memdc,0,0,SR

41、CCOPY);武漢理工大學C+課程設計 memdc.SelectObject(&bmp_8); pDC-BitBlt(m_NodeListij.m_Poi nt.x-cx/2,m_NodeListij.m_Poi nt.y-cy/2,20,20,&memdc,O,O,SRCCOPY);隨機布雷效果比較如下:第一次運行:laal- 111-!1_1 *工11 I* I *-1 41114111HI 113.- - laa 1111a三總:二 L1* W0J343K 一審44A li .3.5.3 2 it -* 工 t 藥活*芥3蘭1工 :L 一 1111*1111!*111 停蘭 mllilf

42、ll1工3壬12*153*1:434三一1*2015211.33331一TT箜:- 1111 * N?苕 1 工21 L 一 HlJ11*;!*111 IT二二一1aaal.l.aNN2*1 - - 111- it 峑二一 一!:!lw:l:2:第二次運行:一帝一43Jd3*.4.*4a直哥a.卷塞 3*-3*12 * 1- - 1 *1.1 H3S申丄1*:.*.*峑23.3.*m -2ana22 -11111m-#-21101ll_uuT113 3 *1 1 .3alll M lla.a.433aall11110T1 *L1+1111如上看來,隨機布雷成功3.3掃雷鼠標事件的處理(1)首先

43、,設計雷區(qū)和非雷區(qū)的判斷算法。掃雷時需要判斷每個格子的狀態(tài),可事先 為格子設定一些狀態(tài),使之對應不同的 BOOL值或整數值。在二維、三維游戲里,有一種 簡單的構造地圖的方法,即將地圖劃分為m*n的規(guī)格格子,使每一個格子對應二維數組中 的一項,當鼠標單擊時,通過找出鼠標點擊區(qū)域,找到相應的格子,判斷格子狀態(tài)來替換 相應的位圖。具體算法思想如下:在應用程序的客戶區(qū)劃分一塊區(qū)域,將該區(qū)域劃分為n*m相同大小的格子;將每一個格子的狀態(tài)對應到二維數組的相應項上;當鼠標點擊某一塊區(qū)域時,首先判斷是否在各種區(qū)域,然后再通過鼠標的坐標找到相 應的格子;查詢格子的狀態(tài),從而調用相應的位圖進行位圖替換;說明:Wi

44、ndows的消息響應機制對于編寫一些小游戲是非常方便的,當編寫大型2D或3D游戲時,Windows API就顯得有些不足,此時應使用 DirectX或OpenGL等大型圖 形庫來進行設計及編碼。鼠標左鍵事件的處理。分兩種情況:當相應區(qū)域不是雷區(qū)時,挖開區(qū)域,并且若能據此判斷周圍區(qū)域也不是雷區(qū)則將周圍 相應區(qū)域也挖開;當區(qū)域是雷區(qū)時,則界面中所有的雷區(qū)同時“炸開“:第一步先顯示一個提示框,第 二部當提示框關閉時,所有非雷區(qū)顯示出來。鼠標在笑臉圖片上,單擊可以重新開始。對單擊鼠標右鍵事件處理第一次用右鍵單擊某個區(qū)域時,改區(qū)域上插上一面小紅旗,此時單擊左鍵沒有任何變 化,第二次用右鍵單擊時恢復原狀。

45、雙擊左鍵事件處理在展開的區(qū)域,并且已經確定了周圍的雷數,雙擊可以疊加展開非雷區(qū)域,以減少用 戶的單擊操作?;谝陨系乃枷?,在 VC+ 6.0中的核心編碼如下:On LButto nUp(UINT nFlags, CPoi nt poi nt)/ TODO: Add your message han dler code here an d/or call defaultint num;On Lei(po in t);OnNu mber(poi nt);On Bla nk(poi nt);num=0;for(i nt a=0;arow;a+)for(i nt b=0;b=row*col)m_Fac

46、e=2;Inv alidate();MessageBox(你真聰明!,掃雷,MBCONWARNING|MB_OKCANCEL);CDialog:O nLButt on Up( nF lags, poin t);其中的 OnLei(), OnNumber(). OnBlank()函數分別如下:void CShaoLeiDlg:O nLei(CPoi nt poi nt)for (int i = 0 ;irow;i+)for (i nt j = 0; jcol;j+)tmp = m_NodeListij.m_Poi nt;CRect rect(tmp.x-10,tmp.y-10,tmp.x+10,

47、tmp.y+10);if (rect.PtI nRect(poi nt)if(m_NodeListij.msUsed=TRUE&m _NodeListij.m_I sSig n=FALSE)if(m_NodeListij.m_Type=ncLEI)for (int m = 0 ;mrow;m+)for (int n= 0; n col; n+)if(m_NodeListm n.m_Type=n cLEI)m_NodeListm n.msUsed=FALSE; m_NodeListm n.msSig n=FALSE;elseif(m_NodeListm n.msUsed=TRUE) m_Node

48、Listm n.msSig n=TRUE;if(m_NodeListm n.msUsed=FALSE& m_NodeListm n.msSig n=TRUE) m_NodeListm n.msUsed=TRUE;m_Face=1;In validate。;BaoZha();MessageBox(你還差了點,不服重來 川T掃雷,武漢理工大學C+課程設計 武漢理工大學C+課程設計 MBCONWARNING|MB_OKCANCEL);void CShaoLeiDlg:O nNu mber(CPoi nt poi nt)CPoi nt tmp;for (int i = 0 ;irow;i+)for (

49、i nt j = 0; jcol;j+)tmp = m_NodeListij.m_Poi nt;CRect rect(tmp.x-10,tmp.y-10,tmp.x+10,tmp.y+10);if (rect.PtI nRect(poi nt)if(m_NodeListij.msUsed=TRUE&m_NodeListij.msSig n=FALSE)if(m_NodeListij.m_Type=ncNUMBER)m_NodeListij.msUsed=FALSE;m_NodeListij.msSig n=FALSE;In validate();void CShaoLeiDlg:O nBla

50、nk(CPoi nt poi nt)CPoi nt tmp;for (int i = 0 ;irow;i+)for (i nt j = 0; j=0)&(j-1=0)m_NodeListi-1j-1.msUsed=FALSE;if(m_NodeListi-1j-1.m_Type=ncBLANK)if(i-1-1=0)&(j-1-1=0)&m_NodeListi-1-1j-1-1.m_Type!=ncLEI) m_NodeListi-1-1j-1-1.msUsed=FALSE;if(j-1-1=0)&m _NodeListi-1j-1-1.m_Type!=ncLEI)m_NodeListi-1j

51、-1-1.msUsed=FALSE;if(i-1-1=0)&m _NodeListi-1-1j-1.m_Type!=ncLEI)m_NodeListi-1-1j-1.msUsed=FALSE;if(i-1-1=0)&m_ NodeListi-1-1j.m_Type!=ncLEI)m_NodeListi-1-1j.msUsed=FALSE;if(i-1=0)m_NodeListi-1j.msUsed=FALSE;if(i-1=0)&(j+1=0)&m _NodeListi-1-1j+1.m_Type!=ncLEI)m_NodeListi-1-1j+1.m_IsUsed=FALSE;if(i-1-

52、1=0)&(j+1+1col)&m_NodeListi-1-1j+1+1.m_Type!=ncLEI) m_NodeListi-1-1j+1+1.m_IsUsed=FALSE; if(j+1+1col)&m _NodeListi-1j+1+1.m_Type!=ncLEI) m_NodeListi-1j+1+1.m_IsUsed=FALSE;if(j+1+1=0)m_NodeListij-1.msUsed=FALSE;if(j+1col)m_NodeListij+1.msUsed=FALSE;if(i+1=0)m_NodeListi+1j-1.msUsed=FALSE;if(i+1+1row)&

53、m _NodeListi+1j-1.m_Type!=ncLEI)m_NodeListi+1j-1.msUsed=FALSE; if(i+1+1=0)&m_NodeListi+1+1j-1-1.m_Type!=ncLEI) m_NodeListi+1+1j-1-1.msUsed=FALSE; if(j-1-1=0)&m _NodeListi+1j-1-1.m_Type!=ncLEI) m_NodeListi+1j-1-1.msUsed=FALSE;if(j-1-1=0)&m _NodeListij-1-1.m_Type!=ncLEI)m_NodeListij-1-1.msUsed=FALSE;i

54、f(i+1row)m_NodeListi+1j.msUsed=FALSE;if(i+1row )&(j+1col)m_NodeListi+1j+1.msUsed=FALSE;if(j+1+1col)&m _NodeListi+1j+1+1.m_Type!=ncLEI)m_NodeListi+1j+1+1.msUsed=FALSE;if(i+1+1row)&(j+1+1col)&m_NodeListi+1+1j+1+1.m_Type!=ncLEI) m_NodeListi+1+1j+1+1.msUsed=FALSE;if(i+1+1row )&m _NodeListi+1+1j+1.m_Type

55、!=ncLEI) m_NodeListi+1+1j+1.msUsed=FALSE;if(i+1+1row)&m _NodeListi+1+1j.m_Type!=ncLEI)m_NodeListi+1+1j.msUsed=FALSE;In validate。;右鍵及雙擊左鍵處理代碼從略。3.4掃雷其它處理3.4.1難度設置菜單消息處理菜單項中包含掃雷難度設置,如初級、中級、高級的菜單消息處理:初級設置如下:10行10列,雷數設置為20中級設置如下:15行15列,雷數設置為40高級設置如下:20行20列,雷數設置為60主要編碼如下:void CShaoLeiDlg:O nChuji()/ TODO

56、: Add your comma nd han dler code hererow=10;col=10;m_Num=20;In itializeNode();中級和高級代碼雷同,在此從略。342背景音樂菜單消息處理本次仿微軟的掃雷游戲中添加了一項新功能,即背景音樂,讓玩家在游戲放松的同時 可以欣賞寧靜的音樂,徹底娛樂。打開默認的背景音樂,包含 Kiss The Rai n,S now Dream.可以打開本地音樂,滿足不同玩家的需求。主要代碼如下:void CShaoLeiDlg:O nMusic()/ TODO: Add your comma nd han dler code hereMCI_OPEN_PARMS mciOpe nParms;mciSe ndComma nd(m_mciDevlD, MCI_CLOSE, 0, NULL);/ mciOpe nParms.lpstrDeviceType = waveaudio;mciOpe nParms.lpstrDeviceType =MpegVideo;mciOpe nParms.lpstrEleme ntNam

溫馨提示

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

評論

0/150

提交評論