俄羅斯方塊mfc實(shí)驗(yàn)報(bào)告

俄羅斯方塊mfc實(shí)驗(yàn)報(bào)告

ID:40504866

大小:248.48 KB

頁(yè)數(shù):20頁(yè)

時(shí)間:2019-08-03

俄羅斯方塊mfc實(shí)驗(yàn)報(bào)告_第1頁(yè)
俄羅斯方塊mfc實(shí)驗(yàn)報(bào)告_第2頁(yè)
俄羅斯方塊mfc實(shí)驗(yàn)報(bào)告_第3頁(yè)
俄羅斯方塊mfc實(shí)驗(yàn)報(bào)告_第4頁(yè)
俄羅斯方塊mfc實(shí)驗(yàn)報(bào)告_第5頁(yè)
資源描述:

《俄羅斯方塊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-

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫(huà)的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。