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