版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
益智游戲程序的開發(fā)參考資料:【1】網站《計算機實習》中的“游戲軟件開發(fā)技術”北京電子科技學院計算機科學與技術系章小莉分析游戲類實習任務游戲類任務2.翻牌游戲(難度系數:3級)3.開窗游戲(難度系數:3級)4.DOS界面下的簡單洗發(fā)紙牌(難度系數:2級)5.五子棋游戲(難度系數:5級)6.DOS界面下的多種游戲的洗發(fā)紙牌(難度系數:3級)7.配對游戲(難度系數:4級)8.對對碰(難度系數:3級)9.連子游戲(難度系數:4級)10.連圖游戲(難度系數:3級)12.走迷宮(難度系數:4級)14.丟炸彈(難度系數:3級)目錄益智游戲的特點益智游戲開發(fā)的難點益智游戲核心的構建(不變內容)游戲狀態(tài)的變化益智游戲操作界面的設計與實現(要因環(huán)境而變);游戲狀態(tài)的顯示(DOS版【C語言-OOP/OOB】,Windows版【VB,C++語言<API,MFC>】)游戲交互的實現以上內容以“俄羅斯方塊”游戲的開發(fā)為例1益智游戲的特點掃雷;俄羅斯方塊游戲;空當接龍;連連看;……從一個狀態(tài)走向另一個狀態(tài)游戲開發(fā)就是2益智游戲開發(fā)的難點如何記錄狀態(tài)信息?如何顯示狀態(tài)信息?如何接收(鍵盤、鼠標、游戲操縱桿等)交互?如何根據交互改變狀態(tài)??3益智游戲核心的構建(不變內容)3.1狀態(tài)信息的記錄(1)狀態(tài)信息的數據結構很多情況下都是用數組來存儲狀態(tài)信息;例如:俄羅斯方塊例如:俄羅斯方塊下墜物7種下墜物形狀如下所示:typedefstructdot{intx,y;}DOT每個下墜物是一個二維坐標(x,y)//4坐標點取值DOTActiveStatus[4];DOTNextStatus[4];下墜物可以向左右下移動,形狀不變逆時針旋轉,形狀變化7種下墜物點陣信息的記錄:DOTSourceData[7][4][4];7種下墜物4種形狀4個坐標點注意每個形狀其實只有4個坐標有值。Q:其中發(fā)生了信息冗余?是什么?為什么?參考資料陳強編<<編程大講壇:C語言核心開發(fā)技術從入門到精通>>電子出版2009-8(TC)structSHAPEshapes[MAX_BOX]={/*口口口口口口口*口口口口口口*口口口*/{0x88,0xc0,CYAN,1},{0xe8,0x0,CYAN,2},{0xc4,0x40,CYAN,3},{0x2e,0x0,CYAN,0},/*口口口口口口*口口口口*口口口口口口*/{0x44,0xc0,MAGENTA,5},{0x8e,0x0,MAGENTA,6},{0xc8,0x80,MAGENTA,7},{0xe2,0x0,MAGENTA,4},/*口*口口口口*口口口*/{0x8c,0x40,YELLOW,9},{0x6c,0x0,YELLOW,8},/*口口口*口口口口*口*/{0x4c,0x80,BROWN,11},{0xc6,0x0,BROWN,10},/*口口口*口口口口口口口口口口*口口口*/{0x4e,0x0,WHITE,13},{0x8c,0x80,WHITE,14},{0xe4,0x0,WHITE,15},{0x4c,0x40,WHITE,12},/*口*口*口口口口口*口*/{0x88,0x88,RED,17},{0xf0,0x0,RED,16},/*口口*口口*/{0xcc,0x0,BLUE,18}}游戲區(qū)域intm_StatusMap[MAX_R*MAX_C];intm_AvtiveStatus[4*4];intm_NextStatus[4*4];狀態(tài)值對于m_AvtiveStatus和m_NextStatus0-不占用,非0-占用m_StatusMap0-不占用,1-占用且靜態(tài),2-占用且動態(tài)Q:基于設計,界面上游戲區(qū)、活動塊、下一塊的狀態(tài)數組取值是什么?3.2狀態(tài)信息的顯示涉及到具體的外設,這與開發(fā)環(huán)境有很大關系。C語言printf語句就是根據m_StatusMap、m_AvtiveStatus[4*4]、m_NextStatus[4*4]狀態(tài)取值輸出信息VB版VC版用Label控件是否顯示,展示狀態(tài)信息用畫出的矩形,展示狀態(tài)信息3.3交互(鍵盤、鼠標、游戲操縱桿等)涉及到具體的外設,這與開發(fā)環(huán)境有很大關系。C語言輸入語句
scanf,getchar,getch等由于游戲中輸入是控制狀態(tài)變化,并不需要顯示輸入的是什么,所以選擇getch()函數交互控制代碼框架(C語言)switch(KeyAscii){case74:case106://按J或j鍵,向左移動下墜物左移下墜物一格;
刷新狀態(tài)顯示;break;
case75:case107://按K或k鍵,逆時針旋轉下墜物旋轉下墜物;
刷新狀態(tài)顯示;break;
case76:case108://按L或l鍵,向右移動下墜物按了L鍵,右移下墜物一格;
刷新狀態(tài)顯示;break;
case73:case105://按I或i鍵,向下移動下墜物下移下墜物一格;if(沉底?)
沉底處理;else{
下移一格;
刷新狀態(tài)顯示;
}
break;case27://按下ESC鍵 報告成績; 結束游戲;
}VB版就是開發(fā)Form窗體的按鍵過程代碼。PrivateSubForm_KeyPress(KeyAsciiAsInteger)SelectCaseKeyAsciicase74,106:‘按J或j鍵,向左移動下墜物左移下墜物一格;
刷新狀態(tài)顯示;
case75,107:'按K或k鍵,逆時針旋轉下墜物旋轉下墜物;
刷新狀態(tài)顯示;
case76,108:‘按L或l鍵,向右移動下墜物按了L鍵,右移下墜物一格;
刷新狀態(tài)顯示;
case73,105:’按I或i鍵,向下移動下墜物下移下墜物一格;If(沉底?)Then
沉底處理;Else
下移一格;
刷新狀態(tài)顯示;
EndIf
case27:'按下ESC鍵 報告成績; 結束游戲;EndSelectWindows(API版)就是開發(fā)WndProc主窗口過程中的相應鍵盤事件LRESULTWINAPIWndProc(HWNDhWnd,
UINTmsg,WPARAMwParam,
LPARAMlParam)switch(msg){caseWM_KEYDOWN:
switch(wParam){
caseVK_LEFT://按左移鍵左移下墜物一格;
觸發(fā)刷新屏幕;return0;
caseVK_UP://按向上鍵,做逆時針旋轉旋轉下墜物;
觸發(fā)刷新屏幕;
return0;
caseVK_RIGHT://按右移鍵
按了L鍵,右移下墜物一格;
觸發(fā)刷新屏幕;
return0;caseVK_DOWN://按向下鍵下移下墜物一格;if(沉底?)
沉底處理;else{
下移一格;
觸發(fā)刷新屏幕; }
return0;caseVK_ESCAPE://按下ESC鍵 報告成績; 觸發(fā)程序結束;}//mParam……}//WM_KEYDOWNWindows(MFC版)就是開發(fā)單文檔的按鍵消息WM_KeyDown的OnKeyDown相應鍵盤事件voidCElsGameMFCView::
OnKeyDown(UINTnChar,UINTnRepCnt,UINTnFlags)switch(nChar){
caseVK_LEFT://按左移鍵左移下墜物一格;
觸發(fā)刷新屏幕;break;
caseVK_UP://按向上鍵,做逆時針旋轉旋轉下墜物;
觸發(fā)刷新屏幕;
break;
caseVK_RIGHT://按右移鍵
按了L鍵,右移下墜物一格;
觸發(fā)刷新屏幕;break;caseVK_DOWN://按向下鍵下移下墜物一格;if(沉底?)
沉底處理;else{
下移一格;
觸發(fā)刷新屏幕; }break;caseVK_ESCAPE://按下ESC鍵 報告成績; 觸發(fā)程序結束;}3.4根據交互改變狀態(tài)就是交互代碼框架中的操作的具體實現。boolIsLeft是最左否?是,返回true,否則,falseboolIsRight是最右?是,返回true,否則,falseboolIsBottom是最底否?是,返回true,否則,falseboolIsRotate是否可旋轉?是,返回true,否則,falseboolIsGameEnd游戲結束否?是,返回true,否則,falsevoidMoveLeft活動塊左移一格voidMoveRight活動塊右移一格voidMoveDown活動塊下移一格voidMoveBottom置底處理。含銷行,活動塊轉靜態(tài),是否結束判斷,激活下一個下墜物,選新的下個下墜物VoidDestoryLine銷行,即判斷某行全為1否,是,消除該行交互代碼框架中的問題解決最左、最右、沉底如何判斷??第一種形狀最左判斷點第一種形狀最右判斷點第二種形狀最左判斷點第一種形狀沉底判斷點(2,1)(3,2)(2,3)(2,3)(3,2)(2,1)(3,2)(1,2)(2,2)(3,2)……定義以下數組存儲邊界判斷數據:DOTLeftEdge[7][4][4];DOTRightEdge[7][4][4];DOTBottomEdge[7][4][4];判斷函數就是判斷相應點的左(右或下)邊位置占用否?其他代碼開發(fā)FlushMap根據m_StatusMap狀態(tài)數組取值,重新繪制游戲區(qū)域FlushNext根據m_NextStatus狀態(tài)數組取值,重新繪制下一個下墜物FlushActive根據m_ActiveStatus狀態(tài)數組取值,重新繪制當前下墜物FlushInfo顯示當前用去的時間、積分等其他文字信息刷新游戲界面初始化InitStatus()清空游戲狀態(tài)數組m_StatusMap[MAX_R*MAX_C]=0InitShape(anyStatus)初始化參數anyStatus數組,數組取值=0。可用于清空當前下墜物,即m_ActiveStatus[16]=0;下一個下墜物,m_NextActive[16]=0游戲函數Operate(charch)交互操作過程輔助函數LoadShape(DOT*currStatus,DOTSourceData[7][4][4],intNo,intkind)取第No個下墜物的第kind種形狀的左標點值,存入currStatus備用DrawShape(intanyStatus[],DOTDotData[],intcurrRow,intcurrCol,introwNum,intValue)依據DotData[]的坐標點修改anyStatus[]狀態(tài)數組的取值。這里anyStatus[]可以是m_StatusMap,m_ActiveStatus,m_NextStatus,即可以修改游戲區(qū)、當前下墜物、下一個下墜物的狀態(tài)數據。currRow,CurrCol指定左上角坐標點,rowNum說明狀態(tài)數組最大列數,Value=0/1/2。小結開發(fā)游戲程序的流程:第一步:用熟悉的環(huán)境開發(fā)游戲;明確游戲的游戲規(guī)則;設計游戲的狀態(tài)數組,即建立初步的數據結構;用自己熟悉的方法實現一個簡單的狀態(tài)顯示;依據游戲規(guī)則建立游戲交互操作代碼框架;完善數據結構設計;逐步實現交互代碼;第二步:移植到希望的環(huán)境;處理狀態(tài)顯示;移植其他代碼;面向過程與面向對象的區(qū)別Procedure-OrientedprogrammingVSObject-Orientedprogramming閱讀以下代碼,判斷實現功能voidchicken(intn,int&k,intg[],intm[],ints[]){inti,j,a,b,c;k=0;i=n/5;j=n/3;for(a=0;a<n;a++){for(b=0;b<=j;b++){c=n-a-b;if((5*a+3*b+c/3==n)&&(c%3==0)){g[k]=a;m[k]=b;s[k]=c;k++;}}}}publicclassbuy_chicken{publicstaticvoidmain(String[]args){inta,b,c;floatsum;cock_classcock=newcock_class;hen_classhen=newhen_class;chick_classchick=newchick_class;for(a=1;a<100;a++){for(b=1;b<100;b++){cock.num(a);hen_num(b);chick_num(100-a-b);
sum=cock.amount(cock.num)+hen.amount(hen.num)+chick.amount(chick.num);
if((cock.num+hen.num+chick.num=100)&&(sum=100)&&(chick_num%3=0))System.out.println(“公雞”+cock.num+
“母雞”+hen.num+“小雞”+chick.num);}}}}閱讀代碼,判斷實現功能面向過程程序編程思想的特點“面向過程”是一種以事件為中心的編程思想。用面向過程語言編程時,重點是理解待處理問題的處理步驟,然后分別描述處理對象(數據)以及處理過程(程序),之后執(zhí)行程序,實現問題求解。特點站在計算機角度,定義數據與數據處理流程;參看“百錢百雞”問題的求解過程,會發(fā)現求解過程已經很難看出實際中的原問題,即數據與處理相分離。面向對象程序編程思想的特
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度牙齒矯正前后口腔護理指導服務合同3篇
- 2025年度玻璃陽光房原材料供應合同3篇
- 西藏藏醫(yī)藥大學《橋梁工程》2023-2024學年第一學期期末試卷
- 中國石油大學(華東)《C語言程序課程設計》2023-2024學年第一學期期末試卷
- 山東水利職業(yè)學院《演講與口才》2023-2024學年第一學期期末試卷
- 邢臺應用技術職業(yè)學院《管理經濟學(雙語)》2023-2024學年第一學期期末試卷
- 《昆蟲備忘錄》核心素養(yǎng)公開課一等獎創(chuàng)新教學設計
- (湖南卷)2025年中考地理第二次模擬考試(全解全析)
- 山西旅游職業(yè)學院《英語寫作Ⅰ》2023-2024學年第一學期期末試卷
- 江西科技學院《計算方法實驗》2023-2024學年第一學期期末試卷
- 2024年東南亞工業(yè)氣瓶市場深度研究及預測報告
- 棉花良種選育與遺傳育種
- 城市生命線安全…監(jiān)測預警指揮平臺建設方案
- 六年級數學《圓柱的體積》教案(一等獎)
- 2024CSCO惡性腫瘤患者營養(yǎng)治療指南解讀
- 常見化學專業(yè)詞匯英文翻譯
- 內科護理學智慧樹知到期末考試答案章節(jié)答案2024年荊門職業(yè)學院
- (高清版)JTGT 5190-2019 農村公路養(yǎng)護技術規(guī)范
- 基于視覺果蔬識別的稱重系統(tǒng)設計
- 體育初中學生學情分析總結報告
- 2024氫氣長管拖車安全使用技術規(guī)范
評論
0/150
提交評論