计算机实习——益智游戏程序开发.ppt_第1页
计算机实习——益智游戏程序开发.ppt_第2页
计算机实习——益智游戏程序开发.ppt_第3页
计算机实习——益智游戏程序开发.ppt_第4页
计算机实习——益智游戏程序开发.ppt_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、益智游戏程序的开发,参考资料: 【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级),目录,益智游戏的特点 益智游戏开发的难点 益智游戏

2、核心的构建(不变内容) 游戏状态的变化 益智游戏操作界面的设计与实现(要因环境而变); 游戏状态的显示(DOS版【C语言-OOP/ OOB】, Windows版【 VB, C+语言】) 游戏交互的实现 以上内容以“俄罗斯方块”游戏的开发为例,1 益智游戏的特点,扫雷; 俄罗斯方块游戏; 空当接龙; 连连看; ,从一个状态走向另一个状态,游戏开发就是,2益智游戏开发的难点,如何记录状态信息? 如何显示状态信息? 如何接收(键盘、鼠标、游戏操纵杆等)交互? 如何根据交互改变状态?,?,3益智游戏核心的构建(不变内容),3.1 状态信息的记录 (1)状态信息的数据结构 很多情况下都是用数组来存储状态

3、信息; 例如:俄罗斯方块,例如:俄罗斯方块,下坠物 7种下坠物形状如下所示:,typedef struct dot int x, y; DOT,每个下坠物是一个二维坐标(x, y),/4坐标点取值 DOT ActiveStatus4; DOT NextStatus4;,下坠物可以 向左右下移动,形状不变 逆时针旋转,形状变化,7种下坠物点阵信息的记录:,DOT SourceData744;,7种下坠物,4种形状,4个坐标点,注意每个形状其实只有4个坐标有值。,Q:其中发生了信息冗余?是什么?为什么?,参考资料 陈强编电子出版 2009-8(TC),struct SHAPE shapesMAX_

4、BOX= /* 口 口口口 口口 口 * 口 口 口 口口口 * 口口 口 */ 0 x88, 0 xc0, CYAN, 1, 0 xe8, 0 x0, CYAN, 2, 0 xc4, 0 x40, CYAN, 3, 0 x2e, 0 x0, CYAN, 0, /* 口 口口 口口口 * 口 口 口 口 * 口口 口口口 口 */ 0 x44, 0 xc0, MAGENTA, 5, 0 x8e, 0 x0, MAGENTA, 6, 0 xc8, 0 x80, MAGENTA, 7, 0 xe2, 0 x0, MAGENTA, 4, /* 口 * 口口 口口 * 口 口口*/ 0 x8c, 0

5、x40, YELLOW, 9, 0 x6c, 0 x0, YELLOW, 8,/* 口 口口 * 口口 口口 * 口*/ 0 x4c, 0 x80, BROWN, 11, 0 xc6, 0 x0, BROWN, 10, /* 口 口 口 * 口口口 口口 口口口 口口 * 口 口 口 */ 0 x4e, 0 x0, WHITE, 13, 0 x8c, 0 x80, WHITE, 14, 0 xe4, 0 x0, WHITE, 15, 0 x4c, 0 x40, WHITE, 12, /* 口 * 口 * 口 口口口口 * 口 */ 0 x88, 0 x88, RED, 17, 0 xf0, 0

6、 x0, RED, 16, /* 口口 * 口口 */ 0 xcc, 0 x0, BLUE, 18 ,游戏区域 int m_StatusMapMAX_R *MAX_C; int m_AvtiveStatus4*4; int m_NextStatus4*4;,状态值 对于m_AvtiveStatus和 m_NextStatus 0-不占用,非0-占用 m_StatusMap 0-不占用,1-占用且静态,2-占用且动态,Q:基于设计,界面上游戏区、活动块、下一块的状态数组取值是什么?,3.2 状态信息的显示,涉及到具体的外设,这与开发环境有很大关系。,C语言,printf语句 就是根据m_Stat

7、usMap、m_AvtiveStatus4*4、 m_NextStatus4*4状态取值输出信息,VB版 VC版,用Label控件是否显示,展示状态信息,用画出的矩形,展示状态信息,3.3 交互(键盘、鼠标、游戏操纵杆等),涉及到具体的外设,这与开发环境有很大关系。,C语言,输入语句 scanf, getchar, getch等 由于游戏中输入是控制状态变化,并不需要显示输入的是什么,所以选择getch( )函数,交互控制代码框架(C语言),switch ( KeyAscii) case 74: case 106: /按J或j键,向左移动下坠物 左移下坠物一格; 刷新状态显示; break;

8、case 75: case 107: /按K或k键,逆时针旋转下坠物 旋转下坠物; 刷新状态显示; break; case 76: case 108: /按L或l键,向右移动下坠物 按了L键,右移下坠物一格; 刷新状态显示; break;,case 73: case 105: /按I或i键,向下移动下坠物 下移下坠物一格; if ( 沉底? ) 沉底处理; else 下移一格; 刷新状态显示; break; case 27: /按下ESC键 报告成绩; 结束游戏; ,VB版,就是开发Form窗体的按键过程代码。 Private Sub Form_KeyPress(KeyAscii As Int

9、eger) Select Case KeyAscii case 74, 106: 按J或j键,向左移动下坠物 左移下坠物一格; 刷新状态显示; case 75, 107: 按K或k键,逆时针旋转下坠物 旋转下坠物; 刷新状态显示; case 76, 108: 按L或l键,向右移动下坠物 按了L键,右移下坠物一格; 刷新状态显示;,case 73,105:按I或i键,向下移动下坠物 下移下坠物一格; If ( 沉底? ) Then 沉底处理; Else 下移一格; 刷新状态显示; End If case 27: 按下ESC键 报告成绩; 结束游戏; End Select,Windows(API版

10、),就是开发WndProc主窗口过程中的相应键盘事件 LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) switch (msg) case WM_KEYDOWN: switch (wParam) case VK_LEFT:/按左移键 左移下坠物一格; 触发刷新屏幕; return 0; case VK_UP:/按向上键,做逆时针旋转 旋转下坠物; 触发刷新屏幕; return 0;,case VK_RIGHT:/按右移键 按了L键,右移下坠物一格; 触发刷新屏幕; return 0; case V

11、K_DOWN:/按向下键 下移下坠物一格; if ( 沉底? ) 沉底处理; else 下移一格; 触发刷新屏幕; return 0; case VK_ESCAPE:/按下ESC键 报告成绩; 触发程序结束; /mParam /WM_KEYDOWN,Windows(MFC版),就是开发单文档的按键消息WM_KeyDown的OnKeyDown相应键盘事件 void CElsGameMFCView: OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) switch (nChar) case VK_LEFT:/按左移键 左移下坠物一格; 触发刷新屏幕;

12、break; case VK_UP:/按向上键,做逆时针旋转 旋转下坠物; 触发刷新屏幕; break;,case VK_RIGHT:/按右移键 按了L键,右移下坠物一格; 触发刷新屏幕; break; case VK_DOWN:/按向下键 下移下坠物一格; if ( 沉底? ) 沉底处理; else 下移一格; 触发刷新屏幕; break; case VK_ESCAPE: /按下ESC键 报告成绩; 触发程序结束; ,3.4 根据交互改变状态,就是交互代码框架中的操作的具体实现。,交互代码框架中的问题解决,最左、最右、沉底如何判断?,第一种形状最左判断点,第一种形状最右判断点,第二种形状最左

13、判断点,第一种形状沉底判断点,(2,1)(3,2)(2,3),(2,3)(3,2),(2,1)(3,2),(1,2)(2,2)(3,2),定义以下数组存储边界判断数据: DOT LeftEdge744; DOT RightEdge744; DOT BottomEdge744; 判断函数就是判断相应点的左(右或下)边位置占用否?,其他代码开发,刷新游戏界面,初始化,游戏函数,辅助函数,小结,开发游戏程序的流程: 第一步:用熟悉的环境开发游戏; 明确游戏的游戏规则; 设计游戏的状态数组,即建立初步的数据结构; 用自己熟悉的方法实现一个简单的状态显示; 依据游戏规则建立游戏交互操作代码框架; 完善数

14、据结构设计; 逐步实现交互代码; 第二步:移植到希望的环境; 处理状态显示; 移植其他代码;,面向过程与面向对象的区别,Procedure-Oriented programming VS Object-Oriented programming,阅读以下代码,判断实现功能,void chicken(int n, int ,public class buy_chicken public static void main(String args) int a,b,c; float sum; cock_class cock=new cock_class; hen_class hen=new hen_c

15、lass; chick_class chick=new chick_class; for (a=1; a100; a+) for (b=1; b100; 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) ,阅读代码,判断实现功能,面向过程程序编程思想的特点,“面向过程”是一种以事件为中心的编程思想。 用面向过程语言编程时,重点是理解待

16、处理问题的处理步骤,然后分别描述处理对象(数据)以及处理过程(程序),之后执行程序,实现问题求解。 特点 站在计算机角度,定义数据与数据处理流程; 参看“百钱百鸡”问题的求解过程,会发现求解过程已经很难看出实际中的原问题,即数据与处理相分离。,面向对象程序编程思想的特点,“面向对象”(Object Oriented,简称OO)是一种以事物为中心的编程思想。 用面向对象语言编程时,重点是依据现实世界上待处理问题的对象,声明每个对象的属性(成员数据),以及对象涉及的操作(成员函数),然后创建对象,调用成员函数,实现问题的求解。 特点 站在现实世界角度,声明对象,调用对象; 参看“百钱百鸡”问题的求

17、解过程,会发现求解过程与实际中的原问题数据与处理紧密相关。,面向对象编程的难点,如何确定一个类? 类,可以说就是一个扩展的结构体,不仅包含数据,而且包含数据处理的函数。 如何确定函数? 完成单项功能的代码段。,如:,bool IsLeft(int currRow, int currCol, int rowNum ); 根据LeftEdge744坐标点判断右边位置被占用否? Void MoveLeft(int currRow, int currCol); 修改m_StatusMapMAX_R * MAX_C取值;,俄罗斯方块面向对象程序,class Shape public:声明DOT坐标点; public:全程变量; private:整型数 currRow, currCol, rowN

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论