資源描述:
《俄羅斯方塊mfc實(shí)驗(yàn)報(bào)告》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、程序設(shè)計(jì)實(shí)踐設(shè)計(jì)報(bào)告課題名稱:俄羅斯方塊(MFC版)學(xué)生姓名:黃嘉慧班級(jí):2012211113班內(nèi)序號(hào):27學(xué)號(hào):2012210389日期:2014.6.11.實(shí)驗(yàn)概述1.1課題目標(biāo)和主要內(nèi)容。本課題的主要內(nèi)容是用MFC實(shí)現(xiàn)經(jīng)典游戲俄羅斯方塊的編寫(xiě)。目標(biāo)是能夠正常運(yùn)行,并且無(wú)過(guò)于嚴(yán)重的問(wèn)題。使用的平臺(tái)為MFC(基于對(duì)話框)。1.2當(dāng)分?jǐn)?shù)>=50*等級(jí)開(kāi)始游戲1.2DIAN升級(jí)并重新開(kāi)始游戲結(jié)束游戲采用計(jì)分升級(jí)制來(lái)進(jìn)行游戲。當(dāng)一次消去一行時(shí),得一分,一次兩行得4分,一次3行,得9分,一次4行,得16分。每50分為一個(gè)等級(jí),得分足夠則升級(jí)并重新開(kāi)始游戲。2.程序設(shè)計(jì)2.1系統(tǒng)總體
2、框架用一個(gè)4維數(shù)組DiamondStruct[7][4][4][4]來(lái)表示所有的方塊,用一個(gè)POINT類型的DiamondPos來(lái)表示方塊當(dāng)前的位置,然后通過(guò)一個(gè)二維數(shù)組BlockPanel[][],來(lái)表示整個(gè)游戲界面,同時(shí)進(jìn)行障礙的添加。游戲過(guò)程中,通過(guò)改變DiamondPos來(lái)進(jìn)行方塊的下降以及左右移動(dòng),通過(guò)DiamondStruct[7][4][4][4]中第二個(gè)參數(shù)的改變來(lái)進(jìn)行方塊的變換。2.2系統(tǒng)詳細(xì)設(shè)計(jì)【1】模塊劃分圖及描述菜單控制結(jié)束游戲重新開(kāi)始暫停游戲【2】類關(guān)系圖及描述CWinApp與CDialog為基類。其它為添加的類?!?】程序流程圖及描述開(kāi)始消行操作生
3、成新的下墜物將新的下墜物代替舊的下墜物將舊的下墜物作為當(dāng)前下墜物到達(dá)底部消行操作游戲結(jié)束處理下降一個(gè)單位否是否是到達(dá)底部到達(dá)頂部游戲結(jié)束結(jié)束【4】存儲(chǔ)結(jié)構(gòu),內(nèi)存分配主要存儲(chǔ)結(jié)構(gòu)為數(shù)組。同時(shí)分配內(nèi)存的有,畫(huà)筆,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;}該算法實(shí)現(xiàn)的功能為,判斷是否已經(jīng)滿行,并且若是滿行,進(jìn)行消行,加分的操作。該算法的時(shí)間復(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;}該算法的功能為實(shí)現(xiàn)判斷方塊是否與邊界或者已有障礙重疊,若是重疊,則返回值0,若沒(méi)有重疊,返回值1。算法的時(shí)間復(fù)雜度為O(1)【3】voidBlock::AddBlock(){for(intiy=0;iy<4;iy++)for(intix=0;ix<4;ix++){if(pDiamond->DiamondStruct[pDiamond-