版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
益智游戏程序的开发参考资料:【1】网站《计算机实习》中的“游戏软件开发技术”北京电子科技学院计算机科学与技术系章小莉分析游戏类实习任务游戏类任务2.翻牌游戏(难度系数:3级)3.开窗游戏(难度系数:3级)4.DOS界面下的简单洗发纸牌(难度系数:2级)5.五子棋游戏(难度系数:5级)6.DOS界面下的多种游戏的洗发纸牌(难度系数:3级)7.配对游戏(难度系数:4级)8.对对碰(难度系数:3级)9.连子游戏(难度系数:4级)10.连图游戏(难度系数:3级)12.走迷宫(难度系数:4级)14.丢炸弹(难度系数:3级)目录益智游戏的特点益智游戏开发的难点益智游戏核心的构建(不变内容)游戏状态的变化益智游戏操作界面的设计与实现(要因环境而变);游戏状态的显示(DOS版【C语言-OOP/OOB】,Windows版【VB,C++语言<API,MFC>】)游戏交互的实现以上内容以“俄罗斯方块”游戏的开发为例1益智游戏的特点扫雷;俄罗斯方块游戏;空当接龙;连连看;……从一个状态走向另一个状态游戏开发就是2益智游戏开发的难点如何记录状态信息?如何显示状态信息?如何接收(键盘、鼠标、游戏操纵杆等)交互?如何根据交互改变状态??3益智游戏核心的构建(不变内容)3.1状态信息的记录(1)状态信息的数据结构很多情况下都是用数组来存储状态信息;例如:俄罗斯方块例如:俄罗斯方块下坠物7种下坠物形状如下所示:typedefstructdot{intx,y;}DOT每个下坠物是一个二维坐标(x,y)//4坐标点取值DOTActiveStatus[4];DOTNextStatus[4];下坠物可以向左右下移动,形状不变逆时针旋转,形状变化7种下坠物点阵信息的记录:DOTSourceData[7][4][4];7种下坠物4种形状4个坐标点注意每个形状其实只有4个坐标有值。Q:其中发生了信息冗余?是什么?为什么?参考资料陈强编<<编程大讲坛:C语言核心开发技术从入门到精通>>电子出版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}}游戏区域intm_StatusMap[MAX_R*MAX_C];intm_AvtiveStatus[4*4];intm_NextStatus[4*4];状态值对于m_AvtiveStatus和m_NextStatus0-不占用,非0-占用m_StatusMap0-不占用,1-占用且静态,2-占用且动态Q:基于设计,界面上游戏区、活动块、下一块的状态数组取值是什么?3.2状态信息的显示涉及到具体的外设,这与开发环境有很大关系。C语言printf语句就是根据m_StatusMap、m_AvtiveStatus[4*4]、m_NextStatus[4*4]状态取值输出信息VB版VC版用Label控件是否显示,展示状态信息用画出的矩形,展示状态信息3.3交互(键盘、鼠标、游戏操纵杆等)涉及到具体的外设,这与开发环境有很大关系。C语言输入语句
scanf,getchar,getch等由于游戏中输入是控制状态变化,并不需要显示输入的是什么,所以选择getch()函数交互控制代码框架(C语言)switch(KeyAscii){case74:case106://按J或j键,向左移动下坠物左移下坠物一格;
刷新状态显示;break;
case75:case107://按K或k键,逆时针旋转下坠物旋转下坠物;
刷新状态显示;break;
case76:case108://按L或l键,向右移动下坠物按了L键,右移下坠物一格;
刷新状态显示;break;
case73:case105://按I或i键,向下移动下坠物下移下坠物一格;if(沉底?)
沉底处理;else{
下移一格;
刷新状态显示;
}
break;case27://按下ESC键 报告成绩; 结束游戏;
}VB版就是开发Form窗体的按键过程代码。PrivateSubForm_KeyPress(KeyAsciiAsInteger)SelectCaseKeyAsciicase74,106:‘按J或j键,向左移动下坠物左移下坠物一格;
刷新状态显示;
case75,107:'按K或k键,逆时针旋转下坠物旋转下坠物;
刷新状态显示;
case76,108:‘按L或l键,向右移动下坠物按了L键,右移下坠物一格;
刷新状态显示;
case73,105:’按I或i键,向下移动下坠物下移下坠物一格;If(沉底?)Then
沉底处理;Else
下移一格;
刷新状态显示;
EndIf
case27:'按下ESC键 报告成绩; 结束游戏;EndSelectWindows(API版)就是开发WndProc主窗口过程中的相应键盘事件LRESULTWINAPIWndProc(HWNDhWnd,
UINTmsg,WPARAMwParam,
LPARAMlParam)switch(msg){caseWM_KEYDOWN:
switch(wParam){
caseVK_LEFT://按左移键左移下坠物一格;
触发刷新屏幕;return0;
caseVK_UP://按向上键,做逆时针旋转旋转下坠物;
触发刷新屏幕;
return0;
caseVK_RIGHT://按右移键
按了L键,右移下坠物一格;
触发刷新屏幕;
return0;caseVK_DOWN://按向下键下移下坠物一格;if(沉底?)
沉底处理;else{
下移一格;
触发刷新屏幕; }
return0;caseVK_ESCAPE://按下ESC键 报告成绩; 触发程序结束;}//mParam……}//WM_KEYDOWNWindows(MFC版)就是开发单文档的按键消息WM_KeyDown的OnKeyDown相应键盘事件voidCElsGameMFCView::
OnKeyDown(UINTnChar,UINTnRepCnt,UINTnFlags)switch(nChar){
caseVK_LEFT://按左移键左移下坠物一格;
触发刷新屏幕;break;
caseVK_UP://按向上键,做逆时针旋转旋转下坠物;
触发刷新屏幕;
break;
caseVK_RIGHT://按右移键
按了L键,右移下坠物一格;
触发刷新屏幕;break;caseVK_DOWN://按向下键下移下坠物一格;if(沉底?)
沉底处理;else{
下移一格;
触发刷新屏幕; }break;caseVK_ESCAPE://按下ESC键 报告成绩; 触发程序结束;}3.4根据交互改变状态就是交互代码框架中的操作的具体实现。boolIsLeft是最左否?是,返回true,否则,falseboolIsRight是最右?是,返回true,否则,falseboolIsBottom是最底否?是,返回true,否则,falseboolIsRotate是否可旋转?是,返回true,否则,falseboolIsGameEnd游戏结束否?是,返回true,否则,falsevoidMoveLeft活动块左移一格voidMoveRight活动块右移一格voidMoveDown活动块下移一格voidMoveBottom置底处理。含销行,活动块转静态,是否结束判断,激活下一个下坠物,选新的下个下坠物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];判断函数就是判断相应点的左(右或下)边位置占用否?其他代码开发FlushMap根据m_StatusMap状态数组取值,重新绘制游戏区域FlushNext根据m_NextStatus状态数组取值,重新绘制下一个下坠物FlushActive根据m_ActiveStatus状态数组取值,重新绘制当前下坠物FlushInfo显示当前用去的时间、积分等其他文字信息刷新游戏界面初始化InitStatus()清空游戏状态数组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[]状态数组的取值。这里anyStatus[]可以是m_StatusMap,m_ActiveStatus,m_NextStatus,即可以修改游戏区、当前下坠物、下一个下坠物的状态数据。currRow,CurrCol指定左上角坐标点,rowNum说明状态数组最大列数,Value=0/1/2。小结开发游戏程序的流程:第一步:用熟悉的环境开发游戏;明确游戏的游戏规则;设计游戏的状态数组,即建立初步的数据结构;用自己熟悉的方法实现一个简单的状态显示;依据游戏规则建立游戏交互操作代码框架;完善数据结构设计;逐步实现交互代码;第二步:移植到希望的环境;处理状态显示;移植其他代码;面向过程与面向对象的区别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);}}}}阅读代码,判断实现功能面向过程程序编程思想的特点“面向过程”是一种以事件为中心的编程思想。用面向过程语言编程时,重点是理解待处理问题的处理步骤,然后分别描述处理对象(数据)以及处理过程(程序),之后执行程序,实现问题求解。特点站在计算机角度,定义数据与数据处理流程;参看“百钱百鸡”问题的求解过程,会发现求解过程已经很难看出实际中的原问题,即数据与处理相分离。面向对象程序编程思想的特
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度第二章国际货物买卖合同标的检验与认证3篇
- 二零二五年度雕塑项目投标采购合同范本3篇
- 2025年度旅游景区导游旅游纪念品销售合作合同4篇
- 二零二五版驾校教练员绩效考核及激励合同3篇
- 2025年度餐厅总经理数字化运营管理合同3篇
- 二零二五年度深部矿产资源勘查开采权转让合同2篇
- 二零二四事业单位借调人员临时工作期间劳动合同解除流程3篇
- 2024-2025学年高中政治第一单元文化与生活第一课第一框体味文化训练含解析新人教版必修3
- 二零二五版能源效率认证EMC合同能源管理合作协议3篇
- 二零二四年度专业演出服务合同-舞台剧制作合作协议3篇
- 带状疱疹护理查房课件整理
- 年月江西省南昌市某综合楼工程造价指标及
- 奥氏体型不锈钢-敏化处理
- 作物栽培学课件棉花
- 交通信号控制系统检验批质量验收记录表
- 弱电施工验收表模板
- 绝对成交课件
- 探究基坑PC工法组合钢管桩关键施工技术
- 国名、语言、人民、首都英文-及各地区国家英文名
- API SPEC 5DP-2020钻杆规范
- 组合式塔吊基础施工专项方案(117页)
评论
0/150
提交评论