游戏的运行机制_第1页
游戏的运行机制_第2页
游戏的运行机制_第3页
游戏的运行机制_第4页
游戏的运行机制_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

1、4 2 5 1 1 0011 0010 1010 1101 0001 0100 1011 第4章 游戏的运行机制(1) 用户事件处理 4 2 5 1 1 0011 0010 1010 1101 0001 0100 1011 内容提要 改变游戏状态 传递控制命令 实例:贪食蛇游戏 4 2 5 1 1 0011 0010 1010 1101 0001 0100 1011 交互性游戏的根本特性让玩家掌控世界 如何交互? 命令输入方式:键盘、鼠标事件(单击,拖放等 ) 命令响应方式:事件处理程序更新游戏逻辑 输入命令 游戏玩家 响应命令 4 2 5 1 1 0011 0010 1010 1101 00

2、01 0100 1011 1.改变游戏状态 游戏的有限状态机(FSM)模型 运行 启动 退出 暂停 设置 结束 4 2 5 1 1 0011 0010 1010 1101 0001 0100 1011 1 如何让游戏停止? 跳出游戏循环while(true) 如何实现? a.设置一个布尔变量(running)作为游戏循 环的条件,初值为true b.为程序添加键盘或鼠标事件监听 c. 添加相应的事件处理程序,如当键盘按 下Esc键时将running值设置为false; 4 2 5 1 1 0011 0010 1010 1101 0001 0100 1011 2 如何让游戏暂停和恢复运行? 暂停

3、和恢复游戏更新gameUpdate() 如何实现? a.设置一个布尔变量(isPaused)作为游戏 更新的条件,初值为true b.为游戏更新设置条件 if(isPaused) gameUpdate(); c. 添加相应的事件处理程序,如当键盘按 下P键时将isPaused值设置为!isPaused; (参见例4_1) 4 2 5 1 1 0011 0010 1010 1101 0001 0100 1011 2.传递控制命令 如何让玩家控制小球的运动方向? 设想:当玩家按下键盘的上下左右四键 时让小球向相应的方向移动 实现:覆盖KeyPressed方法,同时在 gameUpdate()中加入

4、条件判断 (参见例4_2) 4 2 5 1 1 0011 0010 1010 1101 0001 0100 1011 3.实例:贪食蛇游戏 1.如何表示贪食蛇 外观上如何表现? 一系列首尾相连的小球(用特定的颜色表示 蛇头) 怎样实现蛇的移动? 在游戏的每一祯动态更新所有小球的坐标值 ,并进行绘制 用怎样的数据结构来存放和处理蛇的位置信息 ? 循环队列(数组实现) 定义两个变量head和tail,分别表示蛇头指针 和蛇尾指针 4 2 5 1 1 0011 0010 1010 1101 0001 0100 1011 用循环数组表示贪食蛇 4 2 5 1 1 0011 0010 1010 1101

5、 0001 0100 1011 那么,如何在游戏的每一祯中确定蛇头和蛇尾指针 的数值? a.当蛇长达到最大值时(数组最大容量) 蛇头指针(head) 加一即可(对数组长度取模) 蛇尾指针(tail)永远在蛇头的前一个位置 b.当蛇长不足最大值时(难点难点) 蛇头指针仍然只需要加一 蛇尾指针值=(蛇头指针值+数组长度-蛇长+1) MOD 数组长度 (Why?看黑板) (测试:当按下I键时蛇身加长一个单位) 4 2 5 1 1 0011 0010 1010 1101 0001 0100 1011 2 如何更新蛇的坐标? -只需要更新和保存蛇头的坐标值(why?) -当前祯的蛇头位置便是下一帧的蛇身

6、位置 3 如何将蛇体绘制出来? a.如果tail值不等于head值,则在tail值对应的数组 下标中读取坐标值,并在其位置绘制一个小球(蛇 身),否则转步骤c, b.将tail值加一(需要对数组长度取模),转步骤a c. 绘制蛇头,在head值对应的数组下标中读取坐标 值,并用特定的颜色来绘制一个小球(蛇头) (参见例4_3) 4 2 5 1 1 0011 0010 1010 1101 0001 0100 1011 定义定义snakesnake类类 将贪食蛇的属性和方法进行封装将贪食蛇的属性和方法进行封装 抽象(面向对象编程思想)抽象(面向对象编程思想) 主要数据成员: public int

7、x; public int y; public int diameter; private Point body; private int head; private int tail; private int length; 主要方法: update(); /移动蛇,更新其坐标 draw(); /绘制蛇,显示其形状 4 2 5 1 1 0011 0010 1010 1101 0001 0100 1011 添加食物 添加Food类,并定义相关方法,用于在指 定的位置绘制食物方块 数据成员: public Point location; public Point size; 方法: update

8、();/更新食物坐标 draw(); /绘制食物图形 4 2 5 1 1 0011 0010 1010 1101 0001 0100 1011 添加蛇与食物的交互 如何在屏幕区域随机添加一个食物? 借助Random对象 如何让蛇“吃”到食物? “吃的”过程:蛇头与食物重叠,食物 消失,蛇身加长一个单位 如何实现? (参见例4_4) 4 2 5 1 1 0011 0010 1010 1101 0001 0100 1011 类关系图 4 2 5 1 1 0011 0010 1010 1101 0001 0100 1011 总结 1 通过对键盘和鼠标事件处理,我们可以: 转换游戏状态; 传递控制命令; 2 贪食蛇游戏设计要点: 蛇体的表示:循环队列 蛇体的运动:保存蛇头的坐标值,并动 态调整蛇头及蛇尾指针 蛇与食物的交互:碰撞检测(下一讲内 容) 4 2 5 1 1 0011 0010 1010 1101 0001 0100 1011 继续改进 1.当窗口最小化或被遮挡时

温馨提示

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

评论

0/150

提交评论