掃雷游戲程序設計課程設計報告_第1頁
掃雷游戲程序設計課程設計報告_第2頁
掃雷游戲程序設計課程設計報告_第3頁
掃雷游戲程序設計課程設計報告_第4頁
掃雷游戲程序設計課程設計報告_第5頁
已閱讀5頁,還剩36頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

計設計題學生姓

掃雷游程序設計學

號專業(yè)班指導教

合肥工業(yè)大學程設計任務書設題

掃雷游程序設計

成課程設計主要內容

掃雷游戲是Windows操作系統(tǒng)自帶的一款小游戲,在過去的幾年里Windows操作系統(tǒng)歷經(jīng)數(shù)次換代更新,變得越來越龐大、復雜,功能也越來越強大,但是這款小游戲依然保持原來的容貌,可見這款小游戲受到越來越多人的喜愛。參考系統(tǒng)自帶的掃雷程序,自行開發(fā)設計一款掃雷游戲。要求:鼠標左擊排雷,右擊插小旗,打問號;方格里面的數(shù)字表示方格周圍的雷數(shù);能夠顯示未標記雷數(shù)和游戲用時;雷區(qū)上面的小臉可以變化,顯示微笑,驚訝,痛苦,勝利。在任何情況下單擊小臉可以重新開始游戲;可進行游戲難度的設定:包括預定義的難度級別(雷區(qū)行數(shù),列數(shù)和雷數(shù)),和自行定義雷區(qū)行數(shù),列數(shù)和雷數(shù)的功能;排行榜功能,掃雷成功時候,根據(jù)游戲用時更新排行榜。建議:從生的工作態(tài)度、工作、設計(論文)的造性、學術性、實用性及面表達能力等方面給出評。指導教師評語簽:200

日一.

設計任務鼠標左擊排雷,右擊插小旗,打問號;方格里面的數(shù)字表示方格周圍的雷數(shù);能夠顯示未標記雷數(shù)和游戲用時;雷區(qū)上面的小臉可以變化,顯示微笑,驚訝,痛苦,勝利。在任何情況下單擊小臉可以重新開始游戲;可進行游戲難度的設定:包括預定義的難度級別(雷區(qū)行數(shù),列數(shù)和雷數(shù)),和自行定義雷區(qū)行數(shù),列數(shù)和雷數(shù)的功能;排行榜功能,掃雷成功時候,根據(jù)游戲用時更新排行榜。二.具體設(一)設計思路掃雷游戲是很經(jīng)典也很有趣的一款游戲,這次的游戲程序設計要求設計出功能與原游戲相近的一款游戲,首先定義變量和類要畫出游戲方格以及位圖,設計游戲等級,等級越高方格越多雷數(shù)也越多;然后設置隨機布雷以保證每次重新開始游戲都有不同的雷區(qū)地圖;另外定義鼠標左擊掃雷,左擊標記周圍埋雷情況,右擊奇數(shù)次排雷偶數(shù)次取消上次排雷,以及掃雷第一次左擊不能掃到雷。(二、計表示類CMyViewLei

成類屬性方法屬性

類intintintintintintintintCBitmapCBitmapLeivoidvoidvoidvoidvoidvoidvoidvoidintintint

成名leinumrealnumsecondstartm_RowCountm_Bitmap[12]lei[50][50]OnTimer(UINTnIDEvent)OnLButtonDown(UINT,)OnMiddle()OnHard()shumu

描剩下雷數(shù)雷數(shù)定義格數(shù)結束真實雷數(shù)開始計時行列計時位圖數(shù)組按鈕數(shù)組最大雷區(qū)計時器函數(shù)左鍵按下消息開始函數(shù)左鍵抬起消息右鍵按下消息簡單模式函數(shù)中等模式函數(shù)困難模式函數(shù)創(chuàng)建窗口函數(shù)標志位圖標志狀態(tài)()、實現(xiàn)功能鼠標左擊排雷,右擊插小旗,打問號;方格里面的數(shù)字表示方格周圍的雷數(shù);能夠顯示未標記雷數(shù)和游戲用時;雷區(qū)上面的小臉可以變化,顯示微笑,驚訝,痛苦,勝利。在任何情況下單擊小臉可以重新開始游戲;可進行游戲難度的設定:包括預定義的難度級別(雷區(qū)行數(shù),列數(shù)和雷數(shù));6、任何時候開始游戲第一次點擊不會掃到雷。由于時間等原因未完成功能:排行榜和自行定義雷區(qū)行數(shù),列數(shù)和雷數(shù)功能。(四)詳細設計1、添位圖前十二幅是在雷區(qū)的,后四幅是按鈕。為了便于加載,必須各自保證其連續(xù)性。分別表示游戲進行的狀態(tài)、結果勝利或觸雷。、預等方數(shù)數(shù)化void/////////////////////////////初{行數(shù)列l(wèi)einum=10;SetTimer(1,50,NULL);//TODO:Addcommandsecond=0;//時secondstart=0;//1時始計時//num=0;leftnum=leinum;//余雷數(shù)時止int//初始化for(int{

for(intj=0;j<m_ColCount;j++){lei[i][j].shumu=0;}}//設置個雷//////////////////////////////////中{行列l(wèi)einum=40;SetTimer(1,50,NULL);//Addyourcommandsecond=0;//時secondstart=0;//1時始計時//num=0;leftnum=leinum;//余雷數(shù)時止int//初始化for(int{for(intj=0;j<m_ColCount;j++){lei[i][j].shumu=0;}}//設置個雷void///////////////////////////////////////////高{行數(shù)列l(wèi)einum=80;SetTimer(1,50,NULL);//TODO:Addcommandsecond=0;//時secondstart=0;//1時始計時//num=0;leftnum=leinum;//余雷數(shù)時止int//初始化for(int{for(intj=0;j<m_ColCount;j++){lei[i][j].shumu=0;}}//設置個雷{

intk=rand()%m_RowCount;intl=rand()%m_ColCount;if(lei[k][l].shumu!=-1){}3第一點不掃雷if(lei[a][b].weitu==0||lei[a][b].weitu==3){for(;n==0&&lei[a][b].shumu==-1;)//////////////踩到第一個雷{int//初始化for(inti=0;i<m_RowCount;i++){

lei[a][b].shumu++;}}4鼠右插旗打號j=0;j<m_ColCount;j++)

for(int{

第一次用右鍵單擊某個區(qū)域時區(qū)域上插上一面小紅旗時單擊左鍵沒有任何lei[i][j].shumu=0;}}{intk=rand()%m_RowCount;intif(lei[k][l].shumu!=-1){}//給方格賦值for(inta=0;a<m_RowCount;a++)for(intb=0;b<m_ColCount;b++)

變化,第二次用右鍵單擊時恢復原狀。//斷顯示什么位圖//weitu=1按下的數(shù)字區(qū)//weitu=2示旗//weitu=3示問號for(inta=0;a<m_RowCount;a++)for(intb=0;b<m_ColCount;b++){if(lei[a][b].weitu==1){);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);}if(lei[a][b].weitu==2){pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);if(lei[a][b].shumu==0)

{

for(int

}if(lei[a][b].weitu==3){Dc.SelectObject(m_Bitmap[10]);pDC->BitBlt(a*15+10,b*15+50,160,16for(intd=b-1;d<b+2;d++)if(c>=0&&c<m_RowCount&&d>=0&(五)調試及測試

0,&Dc,0,0,SRCCOPY);

}//結束經(jīng)運行測試之后,程序出現(xiàn)的問題有:1、第一次打開游戲時有時會出現(xiàn)不能計時的情況2、勝利的表情不能正常顯示(六)使用說明鼠標左擊排雷,右擊插小旗,打問號;方格里面的數(shù)字表示方格周圍的雷數(shù);在任何情況下單擊小臉可以重新開始游戲;D、

可進行游戲難度的設定:包括預定義的難度級別(雷區(qū)行數(shù),列數(shù)和雷數(shù)),和自行定義雷區(qū)行數(shù),列數(shù)和雷數(shù)的功能;E、掃雷成功時候,游戲用時更新排行榜(七)運行實例鼠標左擊排雷可翻開連片空格方格周圍數(shù)字表示周圍埋雷數(shù)目鍵單擊一次插小紅旗雙擊顯示問號表示雷數(shù)情況未知同時顯示剩余雷數(shù)以及游戲用時可從預設難度等級中選擇游戲難度戲方格數(shù)和雷數(shù)都有相應增加←初級←中級←高級觸雷時現(xiàn)出痛苦的表情,游戲結束將雷全部排出,勝利的吶喊?。。ò耍┰O計小結這個短短幾天的C++課程設計雖然為期不長,卻讓我們從實踐中學到了更多的C++編程知識,一開始看到示例中讓人眼花繚亂的程序代碼讓人很有放棄的沖動,可是最后還是堅持下來將代碼讀完并自己琢磨出一套代碼出來,在這中間也遇到不少的困難,一開始不知道位圖是怎么做的,那些看起來可愛的表情做起來卻并不簡單,還要在代碼里將這些表情的二維坐標對應起來,過程細致而繁雜,最終在與同學討論之后成功做出,大家還一起開玩笑涂鴉自定義表情,輕松的話語沖淡了寫代碼時的煩躁。還有在設定難度時要重新畫方格,右鍵單擊時出現(xiàn)不同的狀態(tài),第一次點擊的時候不能掃到雷等等難關,都被堅持不懈的毅力和耐力一一克服。直到最后看到各種功能在自己手下實現(xiàn),這時的成就感和喜悅是之前單獨實現(xiàn)一個個小功能所不能比的,不由更加感嘆程序編程的奇妙,讓我對程序員有了新的認識,也下定決心努力向他們看齊?。「戒洠撼绦?/wqq20112074View.cpp:implementationoftheclass//"wqq20112074.h""wqq20112074View.h"#ifdefDEBUG_NEW#undefcharTHIS_FILE[]=///////////////////////////////////////////////////////////////////////////////IMPLEMENT_DYNCREATE(CMywqq20112074View,CView)//{{AFX_MSG_MAP(CMywqq20112074View)

ON_WM_CREATE()ON_COMMAND(ID_START,ON_WM_LBUTTONUP()ON_WM_RBUTTONDOWN()ON_COMMAND(ID_EASY,OnMiddle)ON_COMMAND(ID_HARD,OnHard)//printingON_COMMAND(ID_FILE_PRINT_PREVIEW,END_MESSAGE_MAP()///////////////////////////////////////////////////////////////////////////////CMywqq20112074View::CMywqq20112074View(){//TODO:addconstructioncodeherefor(intm_Bitmap[ii].LoadBitmap(IDB_BITMAP14+ii);

for(intm_anniu[jj].LoadBitmap(IDB_ANNIU1+jj);second=0;//計時secondstart=0;//1時始計時m_RowCount=25;//數(shù)_ColCount=16;//數(shù)=0;//數(shù)leftnum=leinum;//余雷數(shù)時止int//初始化0for(int{for(intj=0;j<m_ColCount;j++){lei[i][j].shumu=0;}}//獲取當前時間CTimeint//獲取秒數(shù)//設置40個{//以當前秒數(shù)為產(chǎn)生隨機算法intintl=(rand()*s)%m_ColCount;if(lei[k][l].shumu!=-1){

}//給方格賦值,計算雷數(shù)for(inta=0;a<m_RowCount;a++)for(intb=0;b<m_ColCount;b++)if(lei[a][b].shumu==0){for(intc=a-1;c<a+2;c++)for(intd=b-1;d<b+2;d++)if(c>=0&&c<m_RowCount&&d>=0&&d<m_lei[a][b].shumu++;}}){}BOOLESTRUCT&cs){//TODO:theclassstylesbymodifying//the}///////////////////////////////////////////////////////////////////////////////voidCMywqq20112074View::OnDraw(CDC*{pDocGetDocument();ALID(pDoc);//TODO:adddrawfornative//畫背景CBrush));CRectpDC->FillRect(myrect1,&mybrush1);//畫黑框CBrushmybrush;mybrush.CreateSolidBrush(RGB(0,0,0));CRectpDC->FillRect(myrect,&mybrush);CRectmyrect2(325,10,375,40);pDC->FillRect(myrect2,&mybrush);CPenmypen;CPen*myoldPen;255));//畫黑框的白線pDC->MoveTo(20,40);

pDC->LineTo(70,40);pDC->LineTo(70,10);pDC->MoveTo(325,40);pDC->LineTo(375,40);pDC->LineTo(375,10);//畫雷區(qū)邊線for(intfor(intj=0;j<m_ColCount;j++){pDC->MoveTo(10+i*15,50+j*15+14);pDC->LineTo(10+i*15,50+j*15);}CPenCPen*myoldPen2;mypen2.CreatePen(PS_SOLID,1,RGB(0,0,0));myoldPen2=pDC->SelectObject(&mypen2);for(intii=0;ii<m_RowCount;ii++)for(int{pDC->MoveTo(10+ii*15,50+jj*15+14);pDC->LineTo(10+ii*15+14,50+jj*15+14);pDC->LineTo(10+ii*15+14,50+jj*15);}Dc;if(Dc.CreateCompatibleDC(pDC)==FALSE)AfxMessageBox("Can'tDC");//顯示按鈕Dc.SelectObject(m_anniu[0]);pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCOPY);//判斷顯示什么位圖//weitu=1已下的數(shù)字區(qū)//weitu=2顯旗//weitu=3顯問號for(inta=0;a<m_RowCount;a++)for(intb=0;b<m_ColCount;b++){if(lei[a][b].weitu==1){Dc.SelectObject(m_Bitmap[lei[a][b].shumu]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,}if(lei[a][b].weitu==2){pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,}if(lei[a][b].weitu==3){Dc.SelectObject(m_Bitmap[10]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,}//結束

if(jieshu==1&&lei[a][b].shumu==-1){Dc.SelectObject(m_Bitmap[11]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,Dc.SelectObject(m_anniu[3]);pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCO}}//顯示黑框里的數(shù)字intnOldDC=pDC->SaveDC();pDC->SetTextColor(RGB(255,0,0));if(0==font.CreatePointFont(160,"ComicMS")){AfxMessageBox("Can'tCreateFont");}str;if(leftnum<10)str.Format("00%d",leftnum);if(second<10)str.Format("00%d",second);pDC->TextOut(330,10,str);//////////////////////////////////////////////}///////////////////////////////////////////////////////////////////////////////BOOLnfo*pInfo){//defaultDoPreparePrinting(pInfo);}voidCMywqq20112074View::OnBeginPrinting(CDC*CPrintInfo*/*pInfo*/){//TODO:initializationbeforeprinting}voidCMywqq20112074View::OnEndPrinting(CDC*CPrintInfo*/*pInfo*/){//TODO:addcleanupprinting}////////////////////////////////////////////////////////////////////////////

///diagnostics#ifdefvoidCMywqq20112074View::AssertValid()const{CView::AssertValid();}voidCMywqq20112074View::Dump(CDumpContext&dc){}//is{ASSERT(m_pDocument->IsKindOf(RUNTIM}///////////////////////////////////////////////////////////////////////////////messagevoidnIDEvent){//TODO:Addhandlerand/orcalldefault//結束,返回return;//顯示個數(shù)為的方格leizero();//計時if(secondstart==20){second++;//重畫時間CRectrect3.left=325;rect3.top=10;InvalidateRect(&rect3);}}voidnFlags,{//TODO:Addhandlerand/orcalldefault//獲取指針Dc;if(Dc.CreateCompatibleDC(pDC)==FALSE)AfxMessageBox("Can'tDC");//顯示按下按鈕

{Dc.SelectObject(m_anniu[3]);pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCO})&&(point.y<=290)){return;//顯示張口按鈕Dc.SelectObject(m_anniu[1]);pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCOinta=(point.x-10)/15;intb=(point.y-50)/15;if(lei[a][b].weitu==0||lei[a][b].weitu==3){for(;n==0&&lei[a][b].shumu==-1;)//////////////踩到第一個雷{int//初始化0for(int{for(intj=0;j<m_ColCount;j++){lei[i][j].shumu=0;}}{intk=rand()%m_RowCount;intl=rand()%m_ColCount;if(lei[k][l].shumu!=-1){}//給方格賦值for(inta=0;a<m_RowCount;a++)for(intb=0;b<m_ColCount;b++)if(lei[a][b].shumu==0){for(intfor(intd=b-1;d<b+2;d++)if(c>=0&&c<m_RowCount&&d>=0&&d<m_lei[a][b].shumu++;}}

///////////////////////////////////如果第一個不是雷接下去部分if(lei[a][b].shumu==-1){jieshu=1;KillTimer(1);}if(leftnum==0){jieshu=2;KillTimer(1);Invalidate();}{lei[a][b].weitu=1;CRectrect;rect.left=a*15+10;rect.right=a*15+25;rect.bottom=b*15+65;}n++;///////////////////////////////////////////////n是靜態(tài)變量,每點一次左鍵加判第一個雷intfor(inta=0;a<m_RowCount;a++)for(intb=0;b<m_ColCount;b++){if(lei[a][b].weitu!=1){}}if(a1==leinum){jieshu=2;顯勝利按鈕(運行的時候出錯)Dc.SelectObject(m_anniu[4]);pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCOfor(inta=0;a<m_RowCount;a++)for(intb=0;b<m_ColCount;b++){if(lei[a][b].shumu==-1){lei[a][b].weitu=2;}}}}}CView::OnLButtonDown(nFlags,point);}int

{if//TODO:Addyourcode//SetTimer(1,50,NULL);0;}//掃描,如果是已經(jīng)被按下且雷數(shù)0,顯示它周圍的八個格,并重畫void{for(intfor(intj=0;j<m_ColCount;j++)if(lei[i][j].shumu==0&&lei[i][j].weitu==1){for(intn=i-1;n<i+2;n++)for(intm=j-1;m<j+2;m++)if(n>=0&&n<25&&m>=0&&m<m_ColCount)if(lei[n][m].shumu!=-1&&lei[n][m].weitu==0){CRectrect;rect.top=m*15+50;}}}voidCMywqq20112074View::OnStart(){SetTimer(1,50,NULL);//commandcodesecond=0;//計時secondstart=0;//1時始計時//剩雷數(shù)時止int//初始化0for(int{for(intj=0;j<m_ColCount;j++){lei[i][j].shumu=0;}}//設置40個{intk=rand()%m_RowCount;intl=rand()%m_ColCount;if(lei[k][l].shumu!=-1)

{}//給方格賦值for(inta=0;a<m_RowCount;a++)for(intb=0;b<m_ColCount;b++)if(lei[a][b].shumu==0){for(intc=a-1;c<a+2;c++)for(intd=b-1;d<b+2;d++)if(c>=0&&c<m_RowCount&&d>=0&&d<m_lei[a][b].shumu++;}}voidCMywqq20112074View::OnLButtonUp(UINTnFlags,{//TODO:Addhandlerand/orcalldefaultDc;if(Dc.CreateCompatibleDC(pDC)==FALSE)AfxMessageBox("Can'tDC");//顯示按鈕Dc.SelectObject(m_anniu[0]);pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCO{Dc.SelectObject(m_anniu[2]);pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCO}if(point.x>180&&point.x<210&&point.y>10&&point.y<40)CView::OnLButtonUp(nFlags,point);}voidCMywqq20112074View::OnRButtonDown(UINTnFlags,{Dc;if(Dc.CreateCompatibleDC(pDC)==FALSE)AfxMessageBox("Can'tDC");

if((point.x>=10)&&(point.x<=385)&&(point.y{return;inta=(point.x-10)/15;intb=(point.y-50)/15;if(lei[a][b].weitu==0){lei[a][b].weitu=2;if(lei[a][b].shumu==-1)realnum--;}if(lei[a][b].weitu==2){lei[a][b].weitu=3;leftnum++;if(lei[a][b].shumu==-1)realnum++;}if(lei[a][b].weitu==3)lei[a][b].weitu=0;CRectrect2.right=70;rect2.top=10;InvalidateRect(&rect2);//畫打擊格子CRectrect;rect.left=a*15+10;rect.right=a*15+25;rect.bottom=b*15+65;{jieshu=1;second=1;MessageBox("勝"}}point);}void/////////////////////////////初{行數(shù)10m_ColCount=10;//列數(shù)10leinum=10;SetTimer(1,50,NULL);//commandsecond=0;//計時

secondstart=0;//1時始計時//剩雷數(shù)時停止int//初始化for(int{for(intj=0;j<m_ColCount;j++){lei[i][j].shumu=0;}}//設置個雷{intk=rand()%m_RowCount;intl=rand()%m_Col

溫馨提示

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

最新文檔

評論

0/150

提交評論