資源描述:
《俄羅斯方塊mfc實驗報告》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、程序設(shè)計實踐設(shè)計報告課題名稱:俄羅斯方塊(MFC版)學(xué)生姓名:黃嘉慧班級:2012211113班內(nèi)序號:27學(xué)號:2012210389日期:2014.6.11.實驗概述1.1課題目標和主要內(nèi)容。本課題的主要內(nèi)容是用MFC實現(xiàn)經(jīng)典游戲俄羅斯方塊的編寫。目標是能夠正常運行,并且無過于嚴重的問題。使用的平臺為MFC(基于對話框)。1.2當分數(shù)>=50*等級開始游戲1.2DIAN升級并重新開始游戲結(jié)束游戲采用計分升級制來進行游戲。當一次消去一行時,得一分,一次兩行得4分,一次3行,得9分,一次4行,得16分。每50分為一個等級,得分足夠則升級并重新開始游戲。2.程序設(shè)計2.1系統(tǒng)總體
2、框架用一個4維數(shù)組DiamondStruct[7][4][4][4]來表示所有的方塊,用一個POINT類型的DiamondPos來表示方塊當前的位置,然后通過一個二維數(shù)組BlockPanel[][],來表示整個游戲界面,同時進行障礙的添加。游戲過程中,通過改變DiamondPos來進行方塊的下降以及左右移動,通過DiamondStruct[7][4][4][4]中第二個參數(shù)的改變來進行方塊的變換。2.2系統(tǒng)詳細設(shè)計【1】模塊劃分圖及描述菜單控制結(jié)束游戲重新開始暫停游戲【2】類關(guān)系圖及描述CWinApp與CDialog為基類。其它為添加的類?!?】程序流程圖及描述開始消行操作生
3、成新的下墜物將新的下墜物代替舊的下墜物將舊的下墜物作為當前下墜物到達底部消行操作游戲結(jié)束處理下降一個單位否是否是到達底部到達頂部游戲結(jié)束結(jié)束【4】存儲結(jié)構(gòu),內(nèi)存分配主要存儲結(jié)構(gòu)為數(shù)組。同時分配內(nèi)存的有,畫筆,Diamond類的指針,Panel類的指針,Block類的指針,Mill類的指針,Manager類的指針。2.3關(guān)鍵算法分析【1】boolDiamond::FullLine(){boolIsFull,Full=false;pManager->SeriesLine=0;for(intiy=0;iy<=pPanel->nVGridNum;iy++){IsFull=true;f
4、or(intix=0;ix<=pPanel->nHGridNum;ix++){if(!pBlock->BlockPanel[ix][iy])IsFull=false;}if(IsFull){Full=true;pManager->SeriesLine++;for(intjy=iy;jy>0;jy--){Sleep(10);for(intjx=0;jx<=pPanel->nHGridNum;jx++){pBlock->BlockPanel[jx][jy]=pBlock->BlockPanel[jx][jy-1];}}}}pManager->LineNumber+=pManage
5、r->SeriesLine;pManager->Result+=pManager->SeriesLine*pManager->SeriesLine;if(Full)returntrue;elsereturnfalse;}該算法實現(xiàn)的功能為,判斷是否已經(jīng)滿行,并且若是滿行,進行消行,加分的操作。該算法的時間復(fù)雜度為O(n)=【(nVGridNum)^2*nHGridNum.】/2【2】boolDiamond::overlap(){boolbTuFa=false;POINTTexPos;for(intiy=3;iy>=0;iy--){for(intix=0;ix<4;ix++){
6、if(DiamondStruct[DiamondType][DiamondState][ix][iy]){TexPos.x=ix+DiamondPos.x;TexPos.y=iy+DiamondPos.y;pPanel->PanelPosToPos(TexPos);TexPos.y+=pPanel->GridSize.cy;if(TexPos.xPanelRect.left
7、
8、TexPos.x>pPanel->PanelRect.right
9、
10、TexPos.y>pPanel->PanelRect.bottom)bTuFa=true;if(pBlock->Bl
11、ockPanel[DiamondPos.x+ix][DiamondPos.y+iy])bTuFa=true;}}}if(bTuFa)returntrue;return0;}該算法的功能為實現(xiàn)判斷方塊是否與邊界或者已有障礙重疊,若是重疊,則返回值0,若沒有重疊,返回值1。算法的時間復(fù)雜度為O(1)【3】voidBlock::AddBlock(){for(intiy=0;iy<4;iy++)for(intix=0;ix<4;ix++){if(pDiamond->DiamondStruct[pDiamond-