版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
游戲案例剖析
俄羅斯方塊游戲開(kāi)發(fā)C/C++語(yǔ)言程序設(shè)計(jì)龔尚福,賈澎濤主編《C/C++語(yǔ)言程序設(shè)計(jì)》西安電子科技大學(xué)出版社游戲說(shuō)明及規(guī)則俄羅斯方塊是由俄羅斯人阿列克謝·帕基特諾夫發(fā)明的。俄羅斯方塊原名是俄語(yǔ)Тетрис(英語(yǔ)是Tetris),這個(gè)名字來(lái)源于希臘語(yǔ)tetra,意思是“四”,而游戲的作者最喜歡網(wǎng)球(tennis)。于是,他把兩個(gè)詞tetra和tennis合而為一,命名為T(mén)etris,這也就是俄羅斯方塊名字的由來(lái)。游戲規(guī)則Tetris游戲在一個(gè)m*n的矩形框內(nèi)進(jìn)行。游戲開(kāi)始時(shí),矩形框的頂部會(huì)隨機(jī)出現(xiàn)一個(gè)由四個(gè)小方塊構(gòu)成的磚塊,每過(guò)一個(gè)很短的時(shí)間(我們稱(chēng)這個(gè)時(shí)間為一個(gè)tick),它就會(huì)下落一格,直到它碰到矩形框的底部,然后再過(guò)一個(gè)tick它就會(huì)固定在矩形框的底部,成為固定塊。接著再過(guò)一個(gè)tick頂部又會(huì)出現(xiàn)下一個(gè)隨機(jī)形狀,同樣每隔一個(gè)tick都會(huì)下落,直到接觸到底部或者接觸到下面的固定塊時(shí),再過(guò)一個(gè)tick它也會(huì)成為固定塊,再過(guò)一個(gè)tick之后會(huì)進(jìn)行檢查,發(fā)現(xiàn)有充滿(mǎn)方塊的行則會(huì)消除它,同時(shí)頂部出現(xiàn)下一個(gè)隨機(jī)形狀。直到頂部出現(xiàn)的隨機(jī)形狀在剛出現(xiàn)時(shí)就與固定塊重疊,表示游戲結(jié)束。操作說(shuō)明:‘a(chǎn)’或
‘4’
—左移
‘d’
或
‘6’
—右移
‘w’
或
‘8’
—旋轉(zhuǎn)
‘s’或‘5’
—快速下落
‘x’或‘2’
—快速下落項(xiàng)目規(guī)劃在做項(xiàng)目前一定要好好地構(gòu)思和規(guī)劃項(xiàng)目,根據(jù)需求規(guī)劃開(kāi)發(fā)流程。項(xiàng)目開(kāi)發(fā)流程圖功能分析:分析整個(gè)系統(tǒng)所需要的功能;模塊結(jié)構(gòu)規(guī)劃:規(guī)劃系統(tǒng)中所需要的功能模塊;總體設(shè)計(jì):分析系統(tǒng)處理流程,探索系統(tǒng)核心模塊的運(yùn)作;數(shù)據(jù)結(jié)構(gòu):設(shè)計(jì)系統(tǒng)中需要的數(shù)據(jù)結(jié)構(gòu);規(guī)劃函數(shù):預(yù)先規(guī)劃系統(tǒng)中需要的功能函數(shù);具體編碼:編寫(xiě)系統(tǒng)的具體實(shí)現(xiàn)代碼。功能分析做一個(gè)簡(jiǎn)單的項(xiàng)目規(guī)劃書(shū),整個(gè)規(guī)劃書(shū)分為兩個(gè)部分:系統(tǒng)需求分析;結(jié)構(gòu)規(guī)劃。系統(tǒng)需求分析(1)1) 游戲方塊的隨機(jī)生成功能
當(dāng)游戲運(yùn)行開(kāi)始或方塊成為固定塊后,應(yīng)能在游戲面板頂部隨機(jī)生成一個(gè)新方塊,這樣便于玩家提前進(jìn)行控制處理。2) 游戲方塊的控制功能
游戲玩家可以對(duì)出現(xiàn)的方塊進(jìn)行移動(dòng)處理,分別實(shí)現(xiàn)左移、右移、快速下移、自由下落和行滿(mǎn)自動(dòng)消除功能的效果。3) 更新游戲顯示
當(dāng)在游戲中移動(dòng)方塊時(shí),需要先消除先前的游戲方塊,然后在新坐標(biāo)位置重新繪制新方塊。系統(tǒng)需求分析(2)4)游戲速度設(shè)置和分?jǐn)?shù)更新通過(guò)游戲分?jǐn)?shù)能夠?qū)崿F(xiàn)對(duì)行數(shù)的劃分,例如,可以設(shè)置消除完整的一行為10分。當(dāng)達(dá)到一定數(shù)量后,需要給游戲者進(jìn)行等級(jí)上的升級(jí)。當(dāng)玩家級(jí)別升高后,方塊的下落速度將加快,從而游戲的難度就相應(yīng)地提高了。5)系統(tǒng)幫助
游戲玩家進(jìn)入游戲系統(tǒng)后,通過(guò)幫助了解游戲的操作提示。結(jié)構(gòu)規(guī)劃系統(tǒng)模塊結(jié)構(gòu)圖總體設(shè)計(jì)——1.方塊生成新游戲的方塊使用隨機(jī)函數(shù)rand()可以產(chǎn)生0-6之間的游戲方塊編號(hào)。2.游戲方塊控制處理:左移方塊的移動(dòng)控制是整個(gè)游戲的重點(diǎn)和難點(diǎn),具體信息如下。左移處理處理過(guò)程如下。(1)判斷是否能夠左移,判斷條件有兩個(gè):左移一位后方塊不能超越游戲底板的左邊線(xiàn),否則將越界;并且在游戲方塊有值(值為1)的位置,游戲底板不能是被占用的(占用時(shí)值為1)。(2)清除左移前的游戲方塊;(3)在左移一位的位置處,重新顯示此游戲的方塊??傮w設(shè)計(jì)——2.游戲方塊控制處理:右移右移處理處理過(guò)程如下。(1)判斷是否能夠右移,判斷條件有兩個(gè):右移一位后方塊不能超越游戲底板的右邊線(xiàn),否則將越界;游戲方塊有值位置,游戲底板不能被占用;(2)清除右移前的游戲方塊;(3)在右移一位的位置處,重新顯示此游戲的方塊??傮w設(shè)計(jì)——2.游戲方塊控制處理:下移3) 下移處理處理過(guò)程如下。(1) 判斷是否能夠下移,判斷條件有兩個(gè):下移一位后方塊不能超越游戲底板的底邊線(xiàn),否則將越界;游戲方塊有值位置,游戲底板不能被占用。滿(mǎn)足上述兩個(gè)條件后,可以被下移處理。(2) 清除下移前的游戲方塊;(3) 在下移一位的位置處,重新顯示此游戲的方塊??傮w設(shè)計(jì)——2.游戲方塊控制處理:旋轉(zhuǎn)4) 旋轉(zhuǎn)處理處理過(guò)程如下。(1) 判斷是否能夠旋轉(zhuǎn),判斷條件有兩個(gè):旋轉(zhuǎn)后方塊不能超越游戲底板的底邊線(xiàn)、左邊線(xiàn)和右邊線(xiàn),否則將越界;游戲方塊有值位置,游戲底板不能被占用;(2) 清除旋轉(zhuǎn)前的游戲方塊;總體設(shè)計(jì)——3.更新顯示
當(dāng)游戲中的方塊在進(jìn)行移動(dòng)處理時(shí),要清除先前的游戲方塊,用新坐標(biāo)重繪游戲方塊。當(dāng)消除滿(mǎn)行后,要重繪游戲底板的當(dāng)前狀態(tài)。總體設(shè)計(jì)——4.游戲速度和分?jǐn)?shù)更新處理當(dāng)行滿(mǎn)后,積分變量score會(huì)增加一個(gè)固定的值,然后將等級(jí)變量level和速度變量speed相關(guān)聯(lián),實(shí)現(xiàn)等級(jí)越高速度越快的效果。需要一個(gè)檢查一行是否填滿(mǎn)的函數(shù)數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)(1)1.Tetris游戲的矩形框——二維數(shù)組首先描述Tetris游戲的矩形框。數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)(2)2.游戲方塊結(jié)構(gòu)體/*■■■■■■■■■■■■■■■■■■■■■■■■■■■■*/staticintbrickX[7][4]={{0,1,2,3},{0,1,1,2},{2,1,1,0},{1,1,2,2},{0,0,1,2},{2,2,1,0},{0,1,1,2}};static intbrickY[7][4]={{0,0,0,0},{0,0,1,1},{0,0,1,1},{0,1,0,1},{0,1,1,1},{0,1,1,1},{0,0,1,0}};詳細(xì)設(shè)計(jì)voidWelcome(void);/*歡迎界面*/voidDisplay(intbinimage[20][10]);/*顯示游戲面板函數(shù)*/voidGotoXY(intx,inty);/*輸出定位函數(shù)*/voidPause(void);/*暫停*/voidBlock_Random();/*隨機(jī)生成一個(gè)磚塊*/intmove(intoffsetX,intoffsetY,intbinImage[20][10]);/*左移、右移、下移*/introtate(intbinImage[20][10]);/*旋轉(zhuǎn)函數(shù)*/voidoutput(intbinImage[20][10]);/*輸出到顯示面板*/unsignedintremoveFullLines();/*檢查是否有一行填滿(mǎn)*/voidcopyimage(intdestimage[20][10],intsourceimage[20][10]);/*拷貝數(shù)組*/游戲歡迎界面繪制游戲面板算法描述:定位輸出位置(1,1)根據(jù)面板對(duì)應(yīng)的二維數(shù)組繪制繪制面板界墻,為實(shí)心方格如果二維數(shù)組相應(yīng)位為0,繪制空格否則,繪制空心方格繪制游戲面板繪制游戲面板定位輸出位置函數(shù)voidGotoXY(intx,inty)//設(shè)定輸出位置{ COORDc; c.X=x-1; c.Y=y-1; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),c);}typedefstruct_COORD{ SHORTX; SHORTY;}COORD,*PCOORD;SetConsoleCursorPosition:Setsthecursorpositioninthespecifiedconsolescreenbuffer.BOOLWINAPISetConsoleCursorPosition(__in
HANDLEhConsoleOutput,__in
COORDdwCursorPosition);
隨機(jī)生成一個(gè)磚塊暫停移動(dòng)方塊——左移、右移、下移旋轉(zhuǎn)點(diǎn)P(x,y)到原點(diǎn)O繞O點(diǎn)逆時(shí)針旋轉(zhuǎn)角度θ后到點(diǎn)P′(x′,y′)。由三角函數(shù)的幾何意義,有x=r*cosα,y=r*sinα和x′=r*cos(α+θ),y′=r*sin(α+θ),推出:
x′=x*cosθ–y*sinθ
y′=y*cosθ+x*sinθ當(dāng)把旋轉(zhuǎn)點(diǎn)一般化為Q(x0,y0),得到:
x′=x0+(x-x0)cosθ-(y-y0)sinθ
y′=y0+(y-y0)cosθ+(x-x0)sinθ旋轉(zhuǎn)任意點(diǎn)(x,y)繞其中心(x0,y0)逆時(shí)針旋轉(zhuǎn)angle角度后,新的坐標(biāo)位置(x1,y1)的計(jì)算公式為:
x1=(x-x0)cosθ-(y-y0)sinθ+x0;
y1=(x-x0)sinθ+(y-y0)cosθ+y0;將坐標(biāo)(x,y)繞(x0,y0)順時(shí)針旋轉(zhuǎn)90度(相當(dāng)于逆時(shí)針-90度),得到的新坐標(biāo)(x1,y1),則滿(mǎn)足:x1=x0+y-y0y1=y0+x0-x旋轉(zhuǎn)輸出到游戲面板voidoutput(intbinImage[20][10]){inti; for(i=0;i<4;i++) binImage[y[i]][x[i]]=1;
}/*檢查是否有一行填滿(mǎn)*/游戲功能設(shè)計(jì)定義用于程序流程控制的變量一個(gè)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中考道德與法治一輪復(fù)習(xí)之民主與法治
- 美容行業(yè)美發(fā)技術(shù)培訓(xùn)心得
- 教研工作推動(dòng)學(xué)術(shù)進(jìn)步
- 電力系統(tǒng)通信(完整版)資料
- 時(shí)尚行業(yè)美工工作總結(jié)
- 電子行業(yè)電子設(shè)備維護(hù)培訓(xùn)總結(jié)
- 2024年管理部門(mén)安全管理制度
- 2025屆【首發(fā)】河北省衡水市棗強(qiáng)縣中考試題猜想生物試卷含解析
- 2025關(guān)于押運(yùn)服務(wù)合同書(shū)的范本
- 2024年度天津市公共營(yíng)養(yǎng)師之二級(jí)營(yíng)養(yǎng)師通關(guān)題庫(kù)(附帶答案)
- 陪診培訓(xùn)課件
- 專(zhuān)題3-6 雙曲線(xiàn)的離心率與常用二級(jí)結(jié)論【12類(lèi)題型】(解析版)-A4
- 醫(yī)療行業(yè)銷(xiāo)售內(nèi)勤工作匯報(bào)
- 光伏電站運(yùn)維課件
- 浙江省杭州市西湖區(qū)2023-2024學(xué)年九年級(jí)上學(xué)期期末考試語(yǔ)文試卷+
- 江蘇省蘇州市2023-2024學(xué)年高一上學(xué)期期末學(xué)業(yè)質(zhì)量陽(yáng)光指標(biāo)調(diào)研試題+物理 含解析
- 兼職客服簽約合同范例
- 【初中地理】《世界的聚落》課件-2024-2025學(xué)年湘教版地理七年級(jí)上冊(cè)
- 2鍋爐爐膛內(nèi)腳手架搭設(shè)及拆除施工方案
- 注冊(cè)安全工程師管理制度
- 2023年黑龍江民族職業(yè)學(xué)院招聘工作人員筆試真題
評(píng)論
0/150
提交評(píng)論