掃雷課程設計C+版本_第1頁
掃雷課程設計C+版本_第2頁
掃雷課程設計C+版本_第3頁
掃雷課程設計C+版本_第4頁
掃雷課程設計C+版本_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、掃雷學院名稱: 專業(yè)班級: 學生姓名: 指導教師姓名: 指導教師職稱: 2010 年 7 月目錄摘要2第一章 引言31.1 課題背景及意義31.2 Visual C+ 發(fā)展概況41.3關于本課題5第二章 游戲的總體分析與設計62.1 游戲功能簡介62.2設計構想72.3流程規(guī)劃8第三章 掃雷游戲的具體實現(xiàn)過程93.1 掃雷游戲模塊的實現(xiàn)93.1.1 掃雷游戲主窗體的創(chuàng)建103.1.2 主界面控制菜單的設計123.2掃雷游戲核心-布雷算法設計133.3 掃雷鼠標事件的處理163.4掃雷其它處理193.4.1 難度設置菜單消息處理193.4.2其它處理19第四章 掃雷游戲程序的調試與運行19第五章

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

3、和語言實現(xiàn),如C,C+,VB,JAVA等。本論文研究的是以Visual C+ 6.0為開發(fā)環(huán)境,設計并開發(fā)一款掃雷游戲,其功能類似于Windows操作系統(tǒng)自帶的掃雷游戲。論文首先介紹了制作游戲的整體思路及整個游戲設計的流程規(guī)劃,然后介紹了雷區(qū)的布置及地雷隨機產(chǎn)生的實現(xiàn)方法;重點介紹了在游戲過程中各事件的處理,其中又以鼠標事件和清除未靠近地雷區(qū)方塊這兩方面最為最要,鼠標事件是利用鼠標所發(fā)出的信息了解使用者的意圖,進而做出相對應的動作,而清除未靠近地雷區(qū)方塊由于引進了“遞歸”這個概念而使其簡單化。第一章 引言1.1 課題背景及意義 當前隨著計算機的深入普及,越來越多的人有了個人電腦,人們運用計算機

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

5、為一種招牌.明確的游戲產(chǎn)業(yè)分工的確有助于游戲產(chǎn)業(yè)的規(guī)模發(fā)展與進化,但也無形中讓游戲開發(fā)成本大增。為了降低游戲開發(fā)成本,開發(fā)娛樂性強成本低的游戲就成為當前的主要課題,在這種趨勢下各種小型的低成本的游戲軟件應運而生。在這其中,系統(tǒng)自帶的小游戲也占據(jù)了相當重要的地位,與那些網(wǎng)絡游戲和3D游戲相比,它有編寫簡單容易上手等特點,非常適合人們在完成工作的時候適當?shù)膴蕵芬?。這些小游戲大都是以益智和娛樂為目的,不僅給緊張工作的人們以放松,還可以讓人們的大腦得到開發(fā)。這些小游戲包括掃雷,彈球,紙牌等等。而本課題就是掃雷游戲的設計。1.2 Visual C+ 發(fā)展概況Visual C+是一個功能強大的可視化軟件

6、開發(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。所以實際中,更多的是以Visual C+6.0為平臺。Visual C+6.0不僅是一個C+編譯器,而且是一個基于Windows操作系統(tǒng)的可視化集成開發(fā)環(huán)境(integrated development environment,IDE)。Visual C+6

7、.0由許多組件組成,包括編輯器、調試器以及程序向導AppWizard、類向導Class Wizard等開發(fā)工具。 這些組件通過一個名為Developer Studio的組件集成為和諧的開發(fā)環(huán)境。Visual C+ 之所以具有如此廣泛的用途是因為它具有以下的特點:(1) 真正的面向對象編程,使開發(fā)人員不用加入太多的代碼,加快了系統(tǒng)開發(fā)的速度。(2) 可視化的編程方法以及向導的功能,使開發(fā)人員不用加入太多的代碼就可以開發(fā)出標準的Windows程序。(3) 數(shù)據(jù)訪問的特性,允許對包括Microsoft SQL Server和其他企業(yè)數(shù)據(jù)庫在內(nèi)的大部分數(shù)據(jù)庫格式建立數(shù)據(jù)庫和前端應用程序,以及可調整的服

8、務器端部件等。(4) 通過ActiveX技術可使用其他應用程序提供的功能,例如Microsoft Word字處理器、Microsoft Excel電子數(shù)據(jù)表及其他Windows應用程序,甚至可直接使用Visual Basic創(chuàng)建的應用程序和對象。(5) Internet功能強大,使用戶很容易在應用程序內(nèi)通過Internet或企業(yè)內(nèi)部網(wǎng)(Intranet)訪問文檔和應用程序,或者創(chuàng)建Internet服務器應用程序。(6) 已完成的應用程序是真正的.exe文件,您可以自由發(fā)布。1.3關于本課題隨著世界經(jīng)濟的長足發(fā)展和計算機技術的日益成熟,計算機被應用到人類活動的各個領域,各種應用軟件也相繼問世,這

9、其中有相當一部分是游戲軟件。使用游戲軟件自然是為了滿足人們對娛樂性的要求,而有些軟件大都采用3D設計對系統(tǒng)配置的要求較高。在眾多游戲軟件中,也不乏一些小游戲的身影,它們對系統(tǒng)的配置要求較低。能夠滿足人們對娛樂性的需求,是人們在完成工作娛樂時候的最好選擇?,F(xiàn)在越來越多的人投入到這種小游戲的開發(fā)當中,它已經(jīng)成為一類必不可少的游戲軟件。在各種操作系統(tǒng)中都附帶了一些小的游戲,而這些游戲也成為電腦用戶軟件中不可或缺的一部分。作為本系統(tǒng)的開發(fā)工具,Microsoft Visual C+ 6.0成為首選。它具有可視化的編程界面、詳細的提示、以及完善的幫助文檔,使得軟件開發(fā)人員感到無比的親切感。第二章 游戲的

10、總體分析與設計2.1 游戲功能簡介 當前各種游戲軟件層出不窮。因為游戲的開發(fā)成本非常大,所以游戲的開發(fā)具有一定的風險性,但是一些小游戲的開發(fā)具有成本小,編寫簡單的優(yōu)勢,所以這些小游戲在游戲開發(fā)中也占有一席之地。在這類小游戲中包括益智類游戲,它以畫面精美游戲方法簡單等特點得到大家的認可。成為人們在工作之余不可或缺的好伙伴。針對真種情況我用VC編寫了掃雷這款小游戲。下面對該游戲的功能做個簡單的介紹。掃雷游戲的基本功能 : 點擊鼠標左鍵于未知區(qū)域,如果未知區(qū)域有雷,游戲停止,顯示所有的地雷。如果沒雷,則顯示周圍雷數(shù),如果周圍沒雷,則再查看周圍八個區(qū)域是否有雷直到有雷為止并顯示,這其實是一個遞歸過程。

11、 點擊鼠標右鍵于未知區(qū)域,則將其置為有雷而不管是否真的有雷。可選擇初、中、高三級并可自定義雷數(shù)和區(qū)域大小。雷區(qū)右下角顯示總雷數(shù)減去被標明有雷區(qū)域的數(shù)目。雷區(qū)右下角顯示掃雷的時間。將雷全部掃清后或失敗后顯示一對話框。2.2設計構想相信大多數(shù)使用Windows操作系統(tǒng)的使用者,對這款游戲都不陌生。這款游戲不止操作簡單,規(guī)則也不難,再加上游戲速度的控制機制得宜,讓整個游戲在操作過程中充滿了快樂與緊張的氣氛。除了游樂當中能帶給使用者快樂之外,游戲的設計內(nèi)容無形中也不斷訓練使用者的邏輯思考能力,對于依靠高度腦力工作的現(xiàn)代人,都可以通過這個游戲,不時的檢驗一下自己,所以我們不難發(fā)現(xiàn),在各種可攜帶的電子產(chǎn)品

12、上都有這款游戲的蹤影。在設計之前,我們先來了解這款游戲的規(guī)則:在不掀開任何藏有地雷的方塊情況下,以最快的速度找出所有的地雷。如果在掀開方塊的過程中,不小心翻開(踩到)藏有地雷的方塊,則宣告失?。ㄓ螒蚪Y束),惟有將所有不含地雷的方塊掀開,游戲才算成功。游戲的操作方面主要以鼠標為主,當鼠標指針對準未翻開的方塊按下左鍵時即表示翻開方塊,當鼠標指針對準未翻開的方塊按下右鍵時即表示標示或疑示地雷,反復按下右鍵則方塊會以未標示標示疑似三者關系不斷循環(huán)。游戲者可以通過地雷區(qū)內(nèi)的數(shù)字提示了解以數(shù)字為中心的其周邊八個方格內(nèi)所含的地雷數(shù),假若翻開的方塊顯示數(shù)字“3”,則表示以其為中心的周邊方塊內(nèi)藏有3個地雷。當按

13、下的方塊不是地雷,且周邊八個方塊也都沒有地雷時,方塊會以被翻開方塊的八個方向將空白方塊翻開。2.3流程規(guī)劃流程規(guī)劃大致上可以分為三個部分,分別為:畫面初始、游戲者按下第一個方塊和為非地雷方塊時展開。畫面初始時,以游戲者最后一次設定的地雷區(qū)大小為范圍畫出地雷區(qū),當游戲者按下第一個方塊時產(chǎn)開始計時,接著就是如何判斷按下的方塊是非地雷時的處理,這也是整個游戲的技術核心,我們可以通過遞歸的觀念來檢查周邊的方塊是否含有地雷及是否繼續(xù)往外翻開,直到踩到雷或者游戲勝利為止。 第三章 掃雷游戲的具體實現(xiàn)過程3.1 掃雷游戲模塊的實現(xiàn)掃雷游戲的開發(fā)主要包括兩大部分:一個部分是布雷,該部分主要將雷隨機布置在游戲區(qū)

14、域內(nèi),以避免出現(xiàn)相同的雷區(qū)布置地圖。另一部分是掃雷,該部分包括判斷鼠標左鍵點擊某區(qū)域該區(qū)域是否是雷,如果是雷該如何操作,如果不是雷該如何操作,鼠標右鍵點擊某區(qū)域時如果判斷該區(qū)域是雷則加以標記,如果不是雷也加以標記,以及當鼠標雙擊某區(qū)域時,判斷與該區(qū)域相鄰的其它8個區(qū)域是否是雷并做一個標記。下面首先介紹第一部分之一掃雷主窗體創(chuàng)建。3.1.1 掃雷游戲主窗體的創(chuàng)建啟動Visual C+ 6.0后,選擇新建工程,Visual C+ 6.0提供了用戶可能需要的各種類型的應用程序模板。如果是這種情況,選擇MFC AppWizard(exe)項目,輸入工程名稱和位置,將創(chuàng)建一個新的工程如下:選擇基于Sin

15、gle document:其它的默認,建立新的工程。下面介紹一下如何創(chuàng)建:1. 資源視圖中添加掃雷所需要的位圖2. 在窗口類定義的前面添加下面兩個新建的類/創(chuàng)建一個雷位類class OneMinepublic:OneMine();void InitOneMine();/初始化一個雷位boolIsMine;/是否是雷boolOpened; /是否已經(jīng)打開boolMark;/是否已經(jīng)被標記shortAroundMines;/周邊的雷數(shù)shortstate; /顯示圖形號/創(chuàng)建雷區(qū)類 class Minespublic:boolGameOver;/掃雷是否結束shortTimes;/掃雷所用的時間s

16、hortRows,Cols;/雷區(qū)的行數(shù)、列數(shù)shortMinesCount;/布設雷的數(shù)量short MarkMines;/標對雷的數(shù)量shortVirtualMines;/標記為雷的數(shù)量OneMine *pos5232;/存放雷對象的數(shù)組指針Mines();Mines();void ReInitMine(short row,short col,short mines);/重新初始化雷區(qū)void LayOneMines();/布置一個地雷void CalculateAroundMine(int x,int y);/計算每個雷周邊的雷數(shù)void ShowOneMine(int x,int y)

17、;/顯示一個雷位void ShowAllMine();/顯示所有雷位void OpenOneMine(int x,int y);/打開一個雷位void MarkOneMine(int x,int y);/標記一個雷位3.在窗口類中添加雷區(qū)對象: Mines pMine;4.在OnDraw(CDC* pDC)函數(shù)中添加顯示雷區(qū)功能:if(pView=NULL)pView=this;/給窗口類指針賦值pMine.ShowAllMine();/顯示雷區(qū)5.在窗體類視圖上單擊鼠標右鍵,選擇Add Windows Message Handler單擊WM_LButtonDown,然后再單擊“Add Han

18、dler”按鈕,添加鼠標左鍵處理函數(shù)單擊WM_RButtonDown,然后再單擊“Add Handler”按鈕,添加鼠標右鍵處理函數(shù)6.在鼠標左鍵處理函數(shù)OnLButtonDown(UINT nFlags, CPoint point) 中添加下面代碼:int x=point.x/16+1,y=point.y/16+1; /計算坐標pMine.OpenOneMine(x,y); /打開該位置地雷7.在鼠標右鍵處理函數(shù)OnRButtonDown(UINT nFlags, CPoint point)中添加下面代碼:int x=point.x/16+1,y=point.y/16+1;/計算坐標pMin

19、e.MarkOneMine(x,y); /該位置地雷做標記3.1.2 主界面控制菜單的設計接下來回到資源編程界面,編寫菜單資源,用來控制掃雷的過程,難度選定,以及自定義難度窗口等。(1) 設置菜單包含:開始,初級,中級,高級,自定義。(2)幫助菜單獲取該軟件的版本信息。如下:將菜單添加到主界面,至此主窗體基本創(chuàng)建完畢。運行如下:3.2掃雷游戲核心-布雷算法設計再窗口代碼中添加如下代碼:/雷位構造函數(shù)OneMine:OneMine()InitOneMine();/重新初始化一個雷位void OneMine:InitOneMine()IsMine=Opened=Mark=false;AroundM

20、ines=0;state=-1;/state=-1為該雷未打開,也未標記,state=1到8為該雷位周邊地雷數(shù)/state=9 為該雷位做了標記/state=10 為該雷位有疑問/state=11 為該雷位標錯了地雷/state=13為真雷/雷區(qū)構造函數(shù)Mines:Mines()for(int i=0;i32;i+)for(int j=0;j52;j+)posji=new OneMine();ReInitMine(12,20,30);/雷區(qū)析構函數(shù)Mines:Mines()for(int i=0;i32;i+)for(int j=0;j52;j+)delete posji;/重新初始化雷區(qū)vo

21、id 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;jInitOneMine();srand(unsigned)GetTickCount();/初始化產(chǎn)生隨機數(shù)函數(shù)for(i=0;iMinesCount;i+) LayOneMines();/布置地雷for(i=1;i=Rows;i+)/

22、計算每個雷位周邊的雷數(shù)for(j=1;jIsMine);posmn-IsMine=true;當然,還得添加代碼用來在游戲區(qū)域顯示隨機布置的雷和周邊情況,在函數(shù)中添加如下代碼:/計算一個雷位周邊的地雷數(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;jIsMine;posxy-AroundMines=mines; /顯示一個雷位圖void Mines:ShowOneMine(int x,int y)CBitmap bmp;bmp.LoadBitmap(posxy

23、-state+1000);CDC dcMemory,*dc;dc=pView-GetDC();/在內(nèi)存中創(chuàng)建一個位圖兼容設備dcMemory.CreateCompatibleDC(dc);dcMemory.SelectObject(&bmp);/將圖片選入兼容設備/將兼容設備的內(nèi)容copy到屏幕設備中,實現(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;jCols|xRows|yOpen

24、ed)return;/如果該位置已經(jīng)打開,則返回if(p-Mark)return;/如果該位置已經(jīng)標記了,則返回 if(p-IsMine)/如果該雷位是地雷for(int i=1;i=Rows;i+)/找出所有的地雷,并顯示出來for(int j=1;jIsMine) 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

25、-state=p-AroundMines;ShowOneMine(x,y);if(p-AroundMines=0)/*如果該雷位周邊的雷數(shù)為零,打開周邊的雷位,采用遞歸調用的方法*/if(x!=1)OpenOneMine(x-1,y);/打開左邊if(x!=Cols)OpenOneMine(x+1,y);/打開右邊if(y!=1)OpenOneMine(x,y-1);/打開上邊if(y!=Rows)OpenOneMine(x,y+1);/打開下邊if(x!=1&y!=1)OpenOneMine(x-1,y-1);/打開左上if(x!=1&y!=Rows)OpenOneMine(x-1,y+1)

26、;/打開左下if(x!=Cols&y!=1)OpenOneMine(x+1,y-1);/打開右上if(x!=Cols&y!=Rows)OpenOneMine(x+1,y+1);/打開右下/標記一個雷位void Mines:MarkOneMine(int x,int y)OneMine *p=posxy;if(xCols|xRows|yOpened)return;/如果該位置已經(jīng)打開,則返回switch(p-state)case -1:p-state=9;p-Mark=true;VirtualMines+;if(p-IsMine) MarkMines+;break;case 9:p-state=

27、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,恭喜您,掃雷成功了!,提示信息,MB_OK);this-GameOver=true; 3.4掃雷其它處理3.4.1 難度設置菜單消息處理菜單項中包含掃雷難度設置,如初級、中級、高級的菜單消息處理:A. 初級設置如下:10行12列,雷數(shù)設置為20B. 中級設置如下:20行20列,雷數(shù)設置為6

28、0C. 高級設置如下:30行20列,雷數(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);中級和高級代碼雷同,在此從略。3.4.2其它處理這里主要就是代碼的優(yōu)化以及其它界面美化的處理,代碼從略。第四章 掃雷游戲程序的調試與運行由于本程序中包含了很多消息處理,難免出現(xiàn)很多錯誤,不過在不懈努力之下,總是成功運行:首先啟動程序:然后選擇“開始”或者菜單中的“高級”“中級”可以改變級別。開始游戲,踩雷后:開始游戲,勝利后:第五章 掃雷游戲設計總結隨著掃雷游戲的開發(fā)完成,本游戲中預期的主要功能也基本實現(xiàn)。本系統(tǒng)以Visual C+

溫馨提示

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

評論

0/150

提交評論