版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上C+課程設(shè)計(jì)掃雷學(xué)院名稱(chēng): 專(zhuān)業(yè)班級(jí): 學(xué)生姓名: 指導(dǎo)教師姓名: 指導(dǎo)教師職稱(chēng): 2010 年 7 月目錄摘要游戲業(yè)發(fā)展一日千里,該行業(yè)極大的影響和改變了人們的生活和娛樂(lè)方式,游戲?yàn)橄M(fèi)者提供豐富多彩的虛擬空間,使消費(fèi)者可以自由自在的享受虛擬世界的樂(lè)趣,實(shí)現(xiàn)自己在現(xiàn)實(shí)生活著那個(gè)可能永遠(yuǎn)不能實(shí)現(xiàn)的夢(mèng)想,滿(mǎn)足了消費(fèi)者的心理和精神需求。掃雷游戲是Windows操作系統(tǒng)自帶的一個(gè)小游戲,過(guò)去的幾年里Windows操作系統(tǒng)歷經(jīng)數(shù)次換代,變得越來(lái)越龐大、復(fù)雜,但這個(gè)可愛(ài)的小游戲在任何版本的Windows操作系統(tǒng)里去卻依然保持著原貌。但幾乎每個(gè)電腦使用者都接觸過(guò)它,并且深?lèi)?ài)著這款
2、小游戲。掃雷游戲是比較經(jīng)典的一款小游戲,實(shí)現(xiàn)它的方法很多,可以用很多不同算法和語(yǔ)言實(shí)現(xiàn),如C,C+,VB,JAVA等。本論文研究的是以Visual C+ 6.0為開(kāi)發(fā)環(huán)境,設(shè)計(jì)并開(kāi)發(fā)一款掃雷游戲,其功能類(lèi)似于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è)概念而使其簡(jiǎn)單化。第一章 引言1.1 課題背
3、景及意義 當(dāng)前隨著計(jì)算機(jī)的深入普及,越來(lái)越多的人有了個(gè)人電腦,人們運(yùn)用計(jì)算機(jī)完成許多重要的工作,計(jì)算機(jī)在人們的生活中變的越來(lái)越來(lái)重要。隨著計(jì)算機(jī)的應(yīng)用和發(fā)展計(jì)算機(jī)已經(jīng)不單純是一個(gè)工作工具,人們?cè)絹?lái)越重視計(jì)算機(jī)的娛樂(lè)性了,近年來(lái)游戲產(chǎn)業(yè)規(guī)模持續(xù)成長(zhǎng),全球每年游戲業(yè)總產(chǎn)值已經(jīng)突破200億美金,遠(yuǎn)遠(yuǎn)超越好萊塢電影產(chǎn)業(yè)以及音樂(lè)娛樂(lè)事業(yè),而成為目前娛樂(lè)事業(yè)的最大主流。不過(guò)游戲產(chǎn)業(yè)光鮮亮麗的背后,卻也隱含著高風(fēng)險(xiǎn)、高成本的危機(jī),顯示游戲產(chǎn)業(yè)慢慢步入“微利時(shí)代”。目前整個(gè)游戲產(chǎn)業(yè)的運(yùn)作模式已經(jīng)跟好萊塢電影產(chǎn)業(yè)的運(yùn)作模式相同,電影產(chǎn)業(yè)有制片、發(fā)行、宣傳等分工,游戲產(chǎn)業(yè)亦同,由專(zhuān)業(yè)的游戲研發(fā)小組負(fù)責(zé)研發(fā)游戲,也
4、有如微軟這類(lèi)國(guó)際級(jí)大廠負(fù)責(zé)游戲發(fā)行,甚至連“游戲制作人”也被培養(yǎng)成明星一樣成為一種招牌.明確的游戲產(chǎn)業(yè)分工的確有助于游戲產(chǎn)業(yè)的規(guī)模發(fā)展與進(jìn)化,但也無(wú)形中讓游戲開(kāi)發(fā)成本大增。為了降低游戲開(kāi)發(fā)成本,開(kāi)發(fā)娛樂(lè)性強(qiáng)成本低的游戲就成為當(dāng)前的主要課題,在這種趨勢(shì)下各種小型的低成本的游戲軟件應(yīng)運(yùn)而生。在這其中,系統(tǒng)自帶的小游戲也占據(jù)了相當(dāng)重要的地位,與那些網(wǎng)絡(luò)游戲和3D游戲相比,它有編寫(xiě)簡(jiǎn)單容易上手等特點(diǎn),非常適合人們?cè)谕瓿晒ぷ鞯臅r(shí)候適當(dāng)?shù)膴蕵?lè)要求。這些小游戲大都是以益智和娛樂(lè)為目的,不僅給緊張工作的人們以放松,還可以讓人們的大腦得到開(kāi)發(fā)。這些小游戲包括掃雷,彈球,紙牌等等。而本課題就是掃雷游戲的設(shè)計(jì)。1.
5、2 Visual C+ 發(fā)展概況Visual C+是一個(gè)功能強(qiáng)大的可視化軟件開(kāi)發(fā)工具。自1993年Microsoft公司推出Visual C+1.0后,隨著其新版本的不斷問(wèn)世,Visual C+已成為專(zhuān)業(yè)程序員進(jìn)行軟件開(kāi)發(fā)的首選工具。雖然微軟公司推出了Visual C+.NET(Visual C+7.0),但它的應(yīng)用的很大的局限性,只適用于Windows 2000,Windows XP和Windows NT4.0。所以實(shí)際中,更多的是以Visual C+6.0為平臺(tái)。Visual C+6.0不僅是一個(gè)C+編譯器,而且是一個(gè)基于Windows操作系統(tǒng)的可視化集成開(kāi)發(fā)環(huán)境(integrated d
6、evelopment environment,IDE)。Visual C+6.0由許多組件組成,包括編輯器、調(diào)試器以及程序向?qū)ppWizard、類(lèi)向?qū)lass Wizard等開(kāi)發(fā)工具。 這些組件通過(guò)一個(gè)名為Developer Studio的組件集成為和諧的開(kāi)發(fā)環(huán)境。Visual C+ 之所以具有如此廣泛的用途是因?yàn)樗哂幸韵碌奶攸c(diǎn):(1) 真正的面向?qū)ο缶幊?,使開(kāi)發(fā)人員不用加入太多的代碼,加快了系統(tǒng)開(kāi)發(fā)的速度。(2) 可視化的編程方法以及向?qū)У墓δ?,使開(kāi)發(fā)人員不用加入太多的代碼就可以開(kāi)發(fā)出標(biāo)準(zhǔn)的Windows程序。(3) 數(shù)據(jù)訪問(wèn)的特性,允許對(duì)包括Microsoft SQL Server和
7、其他企業(yè)數(shù)據(jù)庫(kù)在內(nèi)的大部分?jǐn)?shù)據(jù)庫(kù)格式建立數(shù)據(jù)庫(kù)和前端應(yīng)用程序,以及可調(diào)整的服務(wù)器端部件等。(4) 通過(guò)ActiveX技術(shù)可使用其他應(yīng)用程序提供的功能,例如Microsoft Word字處理器、Microsoft Excel電子數(shù)據(jù)表及其他Windows應(yīng)用程序,甚至可直接使用Visual Basic創(chuàng)建的應(yīng)用程序和對(duì)象。(5) Internet功能強(qiáng)大,使用戶(hù)很容易在應(yīng)用程序內(nèi)通過(guò)Internet或企業(yè)內(nèi)部網(wǎng)(Intranet)訪問(wèn)文檔和應(yīng)用程序,或者創(chuàng)建Internet服務(wù)器應(yīng)用程序。(6) 已完成的應(yīng)用程序是真正的.exe文件,您可以自由發(fā)布。1.3關(guān)于本課題隨著世界經(jīng)濟(jì)的長(zhǎng)足發(fā)展和計(jì)算機(jī)
8、技術(shù)的日益成熟,計(jì)算機(jī)被應(yīng)用到人類(lèi)活動(dòng)的各個(gè)領(lǐng)域,各種應(yīng)用軟件也相繼問(wèn)世,這其中有相當(dāng)一部分是游戲軟件。使用游戲軟件自然是為了滿(mǎn)足人們對(duì)娛樂(lè)性的要求,而有些軟件大都采用3D設(shè)計(jì)對(duì)系統(tǒng)配置的要求較高。在眾多游戲軟件中,也不乏一些小游戲的身影,它們對(duì)系統(tǒng)的配置要求較低。能夠滿(mǎn)足人們對(duì)娛樂(lè)性的需求,是人們?cè)谕瓿晒ぷ鲓蕵?lè)時(shí)候的最好選擇?,F(xiàn)在越來(lái)越多的人投入到這種小游戲的開(kāi)發(fā)當(dāng)中,它已經(jīng)成為一類(lèi)必不可少的游戲軟件。在各種操作系統(tǒng)中都附帶了一些小的游戲,而這些游戲也成為電腦用戶(hù)軟件中不可或缺的一部分。作為本系統(tǒng)的開(kāi)發(fā)工具,Microsoft Visual C+ 6.0成為首選。它具有可視化的編程界面、詳細(xì)
9、的提示、以及完善的幫助文檔,使得軟件開(kāi)發(fā)人員感到無(wú)比的親切感。第二章 游戲的總體分析與設(shè)計(jì)2.1 游戲功能簡(jiǎn)介 當(dāng)前各種游戲軟件層出不窮。因?yàn)橛螒虻拈_(kāi)發(fā)成本非常大,所以游戲的開(kāi)發(fā)具有一定的風(fēng)險(xiǎn)性,但是一些小游戲的開(kāi)發(fā)具有成本小,編寫(xiě)簡(jiǎn)單的優(yōu)勢(shì),所以這些小游戲在游戲開(kāi)發(fā)中也占有一席之地。在這類(lèi)小游戲中包括益智類(lèi)游戲,它以畫(huà)面精美游戲方法簡(jiǎn)單等特點(diǎn)得到大家的認(rèn)可。成為人們?cè)诠ぷ髦嗖豢苫蛉钡暮没锇?。針?duì)真種情況我用VC編寫(xiě)了掃雷這款小游戲。下面對(duì)該游戲的功能做個(gè)簡(jiǎn)單的介紹。掃雷游戲的基本功能 : 點(diǎn)擊鼠標(biāo)左鍵于未知區(qū)域,如果未知區(qū)域有雷,游戲停止,顯示所有的地雷。如果沒(méi)雷,則顯示周?chē)讛?shù),如果周?chē)?/p>
10、沒(méi)雷,則再查看周?chē)藗€(gè)區(qū)域是否有雷直到有雷為止并顯示,這其實(shí)是一個(gè)遞歸過(guò)程。 點(diǎn)擊鼠標(biāo)右鍵于未知區(qū)域,則將其置為有雷而不管是否真的有雷??蛇x擇初、中、高三級(jí)并可自定義雷數(shù)和區(qū)域大小。雷區(qū)右下角顯示總雷數(shù)減去被標(biāo)明有雷區(qū)域的數(shù)目。雷區(qū)右下角顯示掃雷的時(shí)間。將雷全部掃清后或失敗后顯示一對(duì)話框。2.2設(shè)計(jì)構(gòu)想相信大多數(shù)使用Windows操作系統(tǒng)的使用者,對(duì)這款游戲都不陌生。這款游戲不止操作簡(jiǎn)單,規(guī)則也不難,再加上游戲速度的控制機(jī)制得宜,讓整個(gè)游戲在操作過(guò)程中充滿(mǎn)了快樂(lè)與緊張的氣氛。除了游樂(lè)當(dāng)中能帶給使用者快樂(lè)之外,游戲的設(shè)計(jì)內(nèi)容無(wú)形中也不斷訓(xùn)練使用者的邏輯思考能力,對(duì)于依靠高度腦力工作的現(xiàn)代人,都可
11、以通過(guò)這個(gè)游戲,不時(shí)的檢驗(yàn)一下自己,所以我們不難發(fā)現(xiàn),在各種可攜帶的電子產(chǎn)品上都有這款游戲的蹤影。在設(shè)計(jì)之前,我們先來(lái)了解這款游戲的規(guī)則:在不掀開(kāi)任何藏有地雷的方塊情況下,以最快的速度找出所有的地雷。如果在掀開(kāi)方塊的過(guò)程中,不小心翻開(kāi)(踩到)藏有地雷的方塊,則宣告失敗(游戲結(jié)束),惟有將所有不含地雷的方塊掀開(kāi),游戲才算成功。游戲的操作方面主要以鼠標(biāo)為主,當(dāng)鼠標(biāo)指針對(duì)準(zhǔn)未翻開(kāi)的方塊按下左鍵時(shí)即表示翻開(kāi)方塊,當(dāng)鼠標(biāo)指針對(duì)準(zhǔn)未翻開(kāi)的方塊按下右鍵時(shí)即表示標(biāo)示或疑示地雷,反復(fù)按下右鍵則方塊會(huì)以未標(biāo)示標(biāo)示疑似三者關(guān)系不斷循環(huán)。游戲者可以通過(guò)地雷區(qū)內(nèi)的數(shù)字提示了解以數(shù)字為中心的其周邊八個(gè)方格內(nèi)所含的地雷數(shù),
12、假若翻開(kāi)的方塊顯示數(shù)字“3”,則表示以其為中心的周邊方塊內(nèi)藏有3個(gè)地雷。當(dāng)按下的方塊不是地雷,且周邊八個(gè)方塊也都沒(méi)有地雷時(shí),方塊會(huì)以被翻開(kāi)方塊的八個(gè)方向?qū)⒖瞻追綁K翻開(kāi)。2.3流程規(guī)劃流程規(guī)劃大致上可以分為三個(gè)部分,分別為:畫(huà)面初始、游戲者按下第一個(gè)方塊和為非地雷方塊時(shí)展開(kāi)。畫(huà)面初始時(shí),以游戲者最后一次設(shè)定的地雷區(qū)大小為范圍畫(huà)出地雷區(qū),當(dāng)游戲者按下第一個(gè)方塊時(shí)產(chǎn)開(kāi)始計(jì)時(shí),接著就是如何判斷按下的方塊是非地雷時(shí)的處理,這也是整個(gè)游戲的技術(shù)核心,我們可以通過(guò)遞歸的觀念來(lái)檢查周邊的方塊是否含有地雷及是否繼續(xù)往外翻開(kāi),直到踩到雷或者游戲勝利為止。 第三章 掃雷游戲的具體實(shí)現(xiàn)過(guò)程3.1 掃雷游戲模塊的實(shí)現(xiàn)掃
13、雷游戲的開(kāi)發(fā)主要包括兩大部分:一個(gè)部分是布雷,該部分主要將雷隨機(jī)布置在游戲區(qū)域內(nèi),以避免出現(xiàn)相同的雷區(qū)布置地圖。另一部分是掃雷,該部分包括判斷鼠標(biāo)左鍵點(diǎn)擊某區(qū)域該區(qū)域是否是雷,如果是雷該如何操作,如果不是雷該如何操作,鼠標(biāo)右鍵點(diǎn)擊某區(qū)域時(shí)如果判斷該區(qū)域是雷則加以標(biāo)記,如果不是雷也加以標(biāo)記,以及當(dāng)鼠標(biāo)雙擊某區(qū)域時(shí),判斷與該區(qū)域相鄰的其它8個(gè)區(qū)域是否是雷并做一個(gè)標(biāo)記。下面首先介紹第一部分之一掃雷主窗體創(chuàng)建。3.1.1 掃雷游戲主窗體的創(chuàng)建啟動(dòng)Visual C+ 6.0后,選擇新建工程,Visual C+ 6.0提供了用戶(hù)可能需要的各種類(lèi)型的應(yīng)用程序模板。如果是這種情況,選擇MFC AppWizar
14、d(exe)項(xiàng)目,輸入工程名稱(chēng)和位置,將創(chuàng)建一個(gè)新的工程如下:選擇基于Single document:其它的默認(rèn),建立新的工程。下面介紹一下如何創(chuàng)建:1. 資源視圖中添加掃雷所需要的位圖2. 在窗口類(lèi)定義的前面添加下面兩個(gè)新建的類(lèi)/創(chuàng)建一個(gè)雷位類(lèi)class OneMinepublic:OneMine();void InitOneMine();/初始化一個(gè)雷位boolIsMine;/是否是雷boolOpened; /是否已經(jīng)打開(kāi)boolMark;/是否已經(jīng)被標(biāo)記shortAroundMines;/周邊的雷數(shù)shortstate; /顯示圖形號(hào)/創(chuàng)建雷區(qū)類(lèi) class Minespublic:bo
15、olGameOver;/掃雷是否結(jié)束shortTimes;/掃雷所用的時(shí)間shortRows,Cols;/雷區(qū)的行數(shù)、列數(shù)shortMinesCount;/布設(shè)雷的數(shù)量short MarkMines;/標(biāo)對(duì)雷的數(shù)量shortVirtualMines;/標(biāo)記為雷的數(shù)量OneMine *pos5232;/存放雷對(duì)象的數(shù)組指針Mines();Mines();void ReInitMine(short row,short col,short mines);/重新初始化雷區(qū)void LayOneMines();/布置一個(gè)地雷void CalculateAroundMine(int x,int y);/計(jì)
16、算每個(gè)雷周邊的雷數(shù)void ShowOneMine(int x,int y);/顯示一個(gè)雷位void ShowAllMine();/顯示所有雷位void OpenOneMine(int x,int y);/打開(kāi)一個(gè)雷位void MarkOneMine(int x,int y);/標(biāo)記一個(gè)雷位3.在窗口類(lèi)中添加雷區(qū)對(duì)象: Mines pMine;4.在OnDraw(CDC* pDC)函數(shù)中添加顯示雷區(qū)功能:if(pView=NULL)pView=this;/給窗口類(lèi)指針賦值pMine.ShowAllMine();/顯示雷區(qū)5.在窗體類(lèi)視圖上單擊鼠標(biāo)右鍵,選擇Add Windows Message
17、 Handler單擊WM_LButtonDown,然后再單擊“Add Handler”按鈕,添加鼠標(biāo)左鍵處理函數(shù)單擊WM_RButtonDown,然后再單擊“Add Handler”按鈕,添加鼠標(biāo)右鍵處理函數(shù)6.在鼠標(biāo)左鍵處理函數(shù)OnLButtonDown(UINT nFlags, CPoint point) 中添加下面代碼:int x=point.x/16+1,y=point.y/16+1; /計(jì)算坐標(biāo)pMine.OpenOneMine(x,y); /打開(kāi)該位置地雷7.在鼠標(biāo)右鍵處理函數(shù)OnRButtonDown(UINT nFlags, CPoint point)中添加下面代碼:int x
18、=point.x/16+1,y=point.y/16+1;/計(jì)算坐標(biāo)pMine.MarkOneMine(x,y); /該位置地雷做標(biāo)記3.1.2 主界面控制菜單的設(shè)計(jì)接下來(lái)回到資源編程界面,編寫(xiě)菜單資源,用來(lái)控制掃雷的過(guò)程,難度選定,以及自定義難度窗口等。(1) 設(shè)置菜單包含:開(kāi)始,初級(jí),中級(jí),高級(jí),自定義。(2)幫助菜單獲取該軟件的版本信息。如下:將菜單添加到主界面,至此主窗體基本創(chuàng)建完畢。運(yùn)行如下:3.2掃雷游戲核心-布雷算法設(shè)計(jì)再窗口代碼中添加如下代碼:/雷位構(gòu)造函數(shù)OneMine:OneMine()InitOneMine();/重新初始化一個(gè)雷位void OneMine:InitOne
19、Mine()IsMine=Opened=Mark=false;AroundMines=0;state=-1;/state=-1為該雷未打開(kāi),也未標(biāo)記,state=1到8為該雷位周邊地雷數(shù)/state=9 為該雷位做了標(biāo)記/state=10 為該雷位有疑問(wèn)/state=11 為該雷位標(biāo)錯(cuò)了地雷/state=13為真雷/雷區(qū)構(gòu)造函數(shù)Mines:Mines()for(int i=0;i<32;i+)for(int j=0;j<52;j+)posji=new OneMine();ReInitMine(12,20,30);/雷區(qū)析構(gòu)函數(shù)Mines:Mines()for(int i=0;i&l
20、t;32;i+)for(int j=0;j<52;j+)delete posji;/重新初始化雷區(qū)void Mines:ReInitMine(short row,short col,short mines)int i,j;GameOver=false;Times=0;Rows=row;Cols=col;MinesCount=mines;MarkMines=0;VirtualMines=0;for(i=1;i<=Rows;i+)/把所有的雷位地雷清除for(j=1;j<=Cols;j+)posji->InitOneMine();srand(unsigned)GetTick
21、Count();/初始化產(chǎn)生隨機(jī)數(shù)函數(shù)for(i=0;i<MinesCount;i+) LayOneMines();/布置地雷for(i=1;i<=Rows;i+)/計(jì)算每個(gè)雷位周邊的雷數(shù)for(j=1;j<=Cols;j+)CalculateAroundMine(j,i);/布一個(gè)地雷void Mines:LayOneMines()int m,n;do m=rand()%Cols+1; n=rand()%Rows+1;/隨機(jī)產(chǎn)生雷位坐標(biāo)while(posmn->IsMine);posmn->IsMine=true;當(dāng)然,還得添加代碼用來(lái)在游戲區(qū)域顯示隨機(jī)布置的雷
22、和周邊情況,在函數(shù)中添加如下代碼:/計(jì)算一個(gè)雷位周邊的地雷數(shù)void Mines:CalculateAroundMine(int x,int y)int mines=0;for(int i=x-1;i<=x+1;i+)for(int j=y-1;j<=y+1;j+)mines=mines+posij->IsMine;posxy->AroundMines=mines; /顯示一個(gè)雷位圖void Mines:ShowOneMine(int x,int y)CBitmap bmp;bmp.LoadBitmap(posxy->state+1000);CDC dcMemor
23、y,*dc;dc=pView->GetDC();/在內(nèi)存中創(chuàng)建一個(gè)位圖兼容設(shè)備dcMemory.CreateCompatibleDC(dc);dcMemory.SelectObject(&bmp);/將圖片選入兼容設(shè)備/將兼容設(shè)備的內(nèi)容copy到屏幕設(shè)備中,實(shí)現(xiàn)真正的Paintdc->BitBlt(x*16-16,y*16-16,16,16,&dcMemory,0,0,SRCCOPY);/顯示所有雷位圖void Mines:ShowAllMine()for(int i=1;i<=Rows;i+)for(int j=1;j<=Cols;j+)ShowOne
24、Mine(j,i);3.3 掃雷鼠標(biāo)事件的處理(1) 首先,設(shè)計(jì)雷區(qū)和非雷區(qū)的判斷算法。掃雷時(shí)需要判斷每個(gè)格子的狀態(tài),可事先為格子設(shè)定一些狀態(tài),使之對(duì)應(yīng)不同的BOOL值或整數(shù)值。在二維、三維游戲里,有一種簡(jiǎn)單的構(gòu)造地圖的方法,即將地圖劃分為m*n的規(guī)格格子,使每一個(gè)格子對(duì)應(yīng)二維數(shù)組中的一項(xiàng),當(dāng)鼠標(biāo)單擊時(shí),通過(guò)找出鼠標(biāo)點(diǎn)擊區(qū)域,找到相應(yīng)的格子,判斷格子狀態(tài)來(lái)替換相應(yīng)的位圖。 具體算法思想如下: A. 在應(yīng)用程序的客戶(hù)區(qū)劃分一塊區(qū)域,將該區(qū)域劃分為n*m相同大小的格子;B. 將每一個(gè)格子的狀態(tài)對(duì)應(yīng)到二維數(shù)組的相應(yīng)項(xiàng)上;C. 當(dāng)鼠標(biāo)點(diǎn)擊某一塊區(qū)域時(shí),首先判斷是否在各種區(qū)域,然后再通過(guò)鼠標(biāo)的坐標(biāo)找到相
25、應(yīng)的格子;D. 查詢(xún)格子的狀態(tài),從而調(diào)用相應(yīng)的位圖進(jìn)行位圖替換;(2) 鼠標(biāo)左鍵事件的處理。分兩種情況:A. 當(dāng)相應(yīng)區(qū)域不是雷區(qū)時(shí),挖開(kāi)區(qū)域,并且若能據(jù)此判斷周?chē)鷧^(qū)域也不是雷區(qū)則將周?chē)鄳?yīng)區(qū)域也挖開(kāi);B. 當(dāng)區(qū)域是雷區(qū)時(shí),則界面中所有的雷區(qū)同時(shí)“炸開(kāi)“:第一步先顯示一個(gè)提示框,第二部當(dāng)提示框關(guān)閉時(shí),所有非雷區(qū)顯示出來(lái)。C. 鼠標(biāo)在笑臉圖片上,單擊可以重新開(kāi)始。(3) 對(duì)單擊鼠標(biāo)右鍵事件處理第一次用右鍵單擊某個(gè)區(qū)域時(shí),改區(qū)域上插上一面小紅旗,此時(shí)單擊左鍵沒(méi)有任何變化,第二次用右鍵單擊時(shí)恢復(fù)原狀。(4) 雙擊左鍵事件處理在展開(kāi)的區(qū)域,并且已經(jīng)確定了周?chē)睦讛?shù),雙擊可以疊加展開(kāi)非雷區(qū)域,以減少用戶(hù)的
26、單擊操作?;谝陨系乃枷耄赩C+ 6.0中進(jìn)行“掃雷”的主要編碼如下:/打開(kāi)一個(gè)雷位void Mines:OpenOneMine(int x,int y)OneMine *p=posxy;if(x>Cols|x<1|y>Rows|y<1)return;/如果點(diǎn)的位置不在雷區(qū),則返回if(GameOver)return;/如果掃雷結(jié)束,則返回if(p->Opened)return;/如果該位置已經(jīng)打開(kāi),則返回if(p->Mark)return;/如果該位置已經(jīng)標(biāo)記了,則返回 if(p->IsMine)/如果該雷位是地雷for(int i=1;i<
27、=Rows;i+)/找出所有的地雷,并顯示出來(lái)for(int j=1;j<=Cols;j+)if(posji->IsMine) posji->state=12;ShowOneMine(j,i);else if(posji->state=9) posji->state=11;ShowOneMine(j,i);p->state=13;ShowOneMine(x,y);GameOver=true;return;else/如果該雷位不是地雷p->Opened=true;p->state=p->AroundMines;ShowOneMine(x,y)
28、;if(p->AroundMines=0)/*如果該雷位周邊的雷數(shù)為零,打開(kāi)周邊的雷位,采用遞歸調(diào)用的方法*/if(x!=1)OpenOneMine(x-1,y);/打開(kāi)左邊if(x!=Cols)OpenOneMine(x+1,y);/打開(kāi)右邊if(y!=1)OpenOneMine(x,y-1);/打開(kāi)上邊if(y!=Rows)OpenOneMine(x,y+1);/打開(kāi)下邊if(x!=1&&y!=1)OpenOneMine(x-1,y-1);/打開(kāi)左上if(x!=1&&y!=Rows)OpenOneMine(x-1,y+1);/打開(kāi)左下if(x!=Col
29、s&&y!=1)OpenOneMine(x+1,y-1);/打開(kāi)右上if(x!=Cols&&y!=Rows)OpenOneMine(x+1,y+1);/打開(kāi)右下/標(biāo)記一個(gè)雷位void Mines:MarkOneMine(int x,int y)OneMine *p=posxy;if(x>Cols|x<1|y>Rows|y<1)return;/如果點(diǎn)的位置不在雷區(qū),則返回if(GameOver)return;/如果掃雷結(jié)束,則返回if(p->Opened)return;/如果該位置已經(jīng)打開(kāi),則返回switch(p->state)
30、case -1:p->state=9;p->Mark=true;VirtualMines+;if(p->IsMine) MarkMines+;break;case 9:p->state=10;p->Mark=true;VirtualMines-;if(p->IsMine) MarkMines-;break;case 10:p->state=-1;p->Mark=false;break;ShowOneMine(x,y);if(MarkMines=MinesCount):MessageBox(NULL,"恭喜您,掃雷成功了!",&
31、quot;提示信息",MB_OK);this->GameOver=true; 3.4掃雷其它處理3.4.1 難度設(shè)置菜單消息處理菜單項(xiàng)中包含掃雷難度設(shè)置,如初級(jí)、中級(jí)、高級(jí)的菜單消息處理:A. 初級(jí)設(shè)置如下:10行12列,雷數(shù)設(shè)置為20B. 中級(jí)設(shè)置如下:20行20列,雷數(shù)設(shè)置為60C. 高級(jí)設(shè)置如下:30行20列,雷數(shù)設(shè)置為80主要編碼如下:void CMyView:Onchuji() / TODO: Add your command handler code here row=10; col=12; mines=30; pMine.ReInitMine(row,col,mines);this->Invalidate(true);中級(jí)和高級(jí)代碼雷同,在此從略。3.4.2其它處理這里主要就是代碼的優(yōu)化以及其它界面美化的處理,代碼從略。第四章 掃雷游戲程序的調(diào)試與運(yùn)行由于本程序中包含了很多消息處理,難免出現(xiàn)很多錯(cuò)誤,不過(guò)在不懈努力之下,總是成功運(yùn)行:首先啟動(dòng)程序:然后選擇
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 桶裝水環(huán)保包裝2025年度合作協(xié)議3篇
- 2025年度母子公司風(fēng)險(xiǎn)管理與內(nèi)部控制合作協(xié)議4篇
- 2025藝術(shù)培訓(xùn)家長(zhǎng)監(jiān)督協(xié)議書(shū)3篇
- 2025版木工傳統(tǒng)技藝保護(hù)與勞務(wù)傳承合同4篇
- 2025年度綠色節(jié)能地板磚生產(chǎn)與承包合作協(xié)議4篇
- 2025年度儲(chǔ)油罐清潔生產(chǎn)合同(清潔生產(chǎn)技術(shù)指導(dǎo))3篇
- 2025年度新媒體運(yùn)營(yíng)個(gè)人勞務(wù)合同模板3篇
- 2025年化藥制劑項(xiàng)目申請(qǐng)報(bào)告模板
- 2025年中國(guó)各單位干部休養(yǎng)所行業(yè)市場(chǎng)發(fā)展前景及發(fā)展趨勢(shì)與投資戰(zhàn)略研究報(bào)告
- 2025年中國(guó)多速電機(jī)行業(yè)發(fā)展監(jiān)測(cè)及投資前景展望報(bào)告
- 2024版?zhèn)€人私有房屋購(gòu)買(mǎi)合同
- 2024爆炸物運(yùn)輸安全保障協(xié)議版B版
- 《食品與食品》課件
- 讀書(shū)分享會(huì)《白夜行》
- 光伏工程施工組織設(shè)計(jì)
- DB4101-T 121-2024 類(lèi)家庭社會(huì)工作服務(wù)規(guī)范
- 化學(xué)纖維的鑒別與測(cè)試方法考核試卷
- 2024-2025學(xué)年全國(guó)中學(xué)生天文知識(shí)競(jìng)賽考試題庫(kù)(含答案)
- 臨床微生物檢查課件 第2章細(xì)菌的生理
- 作品著作權(quán)獨(dú)家授權(quán)協(xié)議(部分授權(quán))
- 取水泵站施工組織設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論