資源描述:
《掃雷程序的實(shí)現(xiàn)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、掃雷程序的實(shí)現(xiàn)2014年12月22日15:27一直說(shuō)寫個(gè)幾百行的小項(xiàng)目,于是我寫了一個(gè)控制臺(tái)的掃雷,沒(méi)有想到精簡(jiǎn)完了代碼才200行左右,不過(guò)考慮到這是我精簡(jiǎn)過(guò)后的,濃縮才是精華嘛,我就發(fā)出來(lái)大家一起學(xué)習(xí)啦,看到程序跑起來(lái)能玩,感覺(jué)還是蠻有成就感的~哈哈掃雷應(yīng)該屬于一款大眾游戲,從我初中使用計(jì)算機(jī)開(kāi)始,它就被集成到了windows系統(tǒng)中,雖然他是這么經(jīng)典,我還是要介紹一下他的玩法,然后再考慮在控制臺(tái)中怎么實(shí)現(xiàn)它。(掃雷界面如圖1)1游戲的主界面,是一個(gè)一個(gè)小方格,在小方格上單擊左鍵,可以翻開(kāi)小方格看看后面
2、有什么。2在這些小方格的背后隱藏著雷,如果不幸點(diǎn)中了雷,那么就GameOver了。2如果點(diǎn)中的不是一個(gè)雷,那么就是一塊空地,這個(gè)時(shí)候會(huì)出現(xiàn)兩種情況:1)用鼠標(biāo)點(diǎn)中的空地周圍八個(gè)點(diǎn)內(nèi)有雷,那么就顯示雷的個(gè)數(shù)分區(qū)游戲的第1頁(yè)2)用鼠標(biāo)點(diǎn)中的空地周圍沒(méi)有雷,這個(gè)時(shí)候就將周圍的空地全部顯示出來(lái),遇到該顯示數(shù)字的空地,就將數(shù)字顯示出來(lái)。(仔細(xì)觀察你會(huì)發(fā)現(xiàn),數(shù)字會(huì)將空地圍起來(lái),這是一句廢話,但是也值得想一想這是為什么)3在小方格上,點(diǎn)擊鼠標(biāo)的右鍵,可以將一個(gè)空地標(biāo)記為雷,當(dāng)然這個(gè)功能只是為了方便你記憶你之前確定是雷
3、的地方。(還有左右鍵都點(diǎn),和點(diǎn)擊右鍵出現(xiàn)?標(biāo)記,這里就不談啦)4當(dāng)空地上剩余的格子數(shù)和雷的個(gè)數(shù)一樣多,那么這個(gè)時(shí)候就應(yīng)該算是勝利啦。OK~游戲流程說(shuō)完了,這個(gè)時(shí)候該談?wù)勅绾螌?shí)現(xiàn)了。1首先需要一張地圖,一般情況下我們都可以用一個(gè)二維數(shù)組表示一個(gè)地圖,每一個(gè)元素代表著掃雷中的一個(gè)小方格。相應(yīng)元素存儲(chǔ)0,那么地圖上的這個(gè)位置就是空地,相應(yīng)元素存儲(chǔ)1,那么就代表這個(gè)位置就一顆雷。2在控制臺(tái)上依照二維數(shù)組長(zhǎng)度和寬度,打印相應(yīng)的小方塊。3然后就用鼠標(biāo)點(diǎn)擊那些小方塊,對(duì)于控制臺(tái)來(lái)講,在黑框框的區(qū)域中是有坐標(biāo)的,可以使
4、用一些函數(shù)捕獲到你點(diǎn)擊了屏幕的哪一個(gè)坐標(biāo)。4對(duì)于控制臺(tái)來(lái)說(shuō),打印一個(gè)字符,有的字符橫向占一個(gè)位置比如普通的字母數(shù)字,有的字符橫向占兩個(gè)位置比如一些圖形字符:①②③■◆等等,這點(diǎn)在控制臺(tái)編程的時(shí)候要注意。5當(dāng)點(diǎn)擊屏幕的時(shí)候,獲取到點(diǎn)擊的坐標(biāo)后,去二維數(shù)組中查看相應(yīng)的位置是雷還是空地,從而做相應(yīng)的處理。1)假如點(diǎn)擊到了雷,那么就控制游戲結(jié)束2)假如點(diǎn)擊到了空地有兩種情況1)點(diǎn)擊的空地周圍有雷,那么就將雷的個(gè)數(shù)顯示出來(lái)2)假如點(diǎn)擊的空地周圍沒(méi)有雷,那么就使用遞歸的方法去探測(cè)周圍的點(diǎn),探測(cè)出與其相連的所有周圍有
5、雷的點(diǎn)。這個(gè)是我實(shí)現(xiàn)的效果:分區(qū)游戲的第2頁(yè)下面就是代碼啦://saolei.cpp:定義控制臺(tái)應(yīng)用程序的入口點(diǎn)。//#include"stdafx.h"#include#include#include#defineBoom10inta[10][10]={0};COORDTempPos[100]={0};intnSign=0;/************************************函數(shù)名:WriteWchar函數(shù)作用:在控制臺(tái)相
6、應(yīng)的坐標(biāo)上顯示一串字符返回值:void參數(shù):intx橫坐標(biāo)參數(shù):inty縱坐標(biāo)參數(shù):charszString[]要顯示的字符串說(shuō)明:************************************/voidWriteWchar(intx,inty,charszString[]){HANDLEhOut=GetStdHandle(STD_OUTPUT_HANDLE);COORDpos={x*2,y};SetConsoleCursorPosition(hOut,pos);printf("%s",szS
7、tring);}/************************************函數(shù)名:DrawNumber函數(shù)作用:在相應(yīng)的坐標(biāo)上,根據(jù)傳入的數(shù)字,打印相應(yīng)的數(shù)字字符返回值:void參數(shù):COORDpos要打印的位置參數(shù):intnNumber要打印的數(shù)字說(shuō)明:************************************/voidDrawNumber(COORDpos,intnNumber){switch(nNumber){case1:WriteWchar(pos.X,pos.Y,
8、"①");break;case2:WriteWchar(pos.X,pos.Y,"②");分區(qū)游戲的第3頁(yè)WriteWchar(pos.X,pos.Y,"②");break;case3:WriteWchar(pos.X,pos.Y,"③");break;case4:WriteWchar(pos.X,pos.Y,"④");break;case5:WriteWchar(pos.X,pos.Y,"⑤");break;case6:WriteWcha