
赛车游戏制作设计.doc
3页赛车游戏制作设计赛车游戏制作设计姓名:刘犹胜学号:2004034040 专业:计算机及应用 1 班 (一)游戏制作目标:模仿 8 位机赛车小游戏制作,基本与原游戏功能及可玩性相同(存 档系统暂时未能完成) (二)游戏制作思路:仔细观察原游戏的操作的每个过程,总结出初步游戏构架,在部分 功能上要有自己的创新,复杂功能在已有基本功能上添加,确保每步功能实现后不与前面 功能相冲突,功能调试到基本满足玩家要求,即不出现或少出现不符合原游戏情节的情况三)游戏制作步骤: (1)让图片运动,我仿照教课书上制作流动字体的代码让图片移动,基本功能是让游戏中 的其他车辆运动阻碍游戏玩家控制车辆,使游戏有基本的可玩性模糊代码如下: 添加一个 Timer 控件,在代码窗体中添加 car.top+=speed : if car.top>me.top+me.height then car.top=me.top-car.height 代码实现让车辆从屏幕下方消失再从屏幕上方出现 问题 1:我做游戏时发现车辆从消失到出现的运动都在一条直线上移动 解决方法:为了增强游戏的娱乐性,我让车辆在消失时,添加随机函数,让车出现时随机 产生 X 坐标。
问题 2:一辆车可以或多辆前后距离相同的车可以用这种方法,但原游戏中的车辆出现距 离很少相同,如果车辆前后距离采用随机函数,这样车辆从屏幕上方出现会重叠,达不到 预期效果 解决方法:设订 1 辆车(1 号)的 Y 坐标当它从屏幕上消失时,其它车辆才能与 1 号相隔 一定距离依次出现,这样不会产生重叠现象但有时会出现只有 1 号消失其它车才出现的 情况, 不过在距离调整恰当也会让人感觉车辆出现是连续的 (2)让图片响应键盘按键:按下左键图片(玩家控制的车辆简称 me_car)向左移动,按 下右键图片向右移动,从而让 me_car 避开其它车辆按下加速键,让屏幕中的其它车辆加 速向下运动,给人以视觉上 me_car 加速向前移动本功能实现需要用到 key_down 和 key_up 事件 问题 1:我测试游戏时发现,要按下左键同时按下加速键,预期效果 me_car 向左移动并且 其它车也加速向下移动,但控键只能响应一次事件,如果先按下加速键,左键就不执行; 或先按下左键,那么加速键就不执行 解决方法:按下左键让全局变量 L=1,按下右键让全局变量 R=1,按下加速键让全局变量 SP=1,放开左键让全局变量 L=0,放开右键让全局变量 R=0, 放开加速键让全局变量 SP=0。
If L=1 then me_car.left-=3 : If R=1 then me_car.left+=3 等等代码 (3)让背景移动:背景应该连续移动,初步思想是一副图片在屏幕下消失时,马上又从屏 幕上方出现整体看上去更为流畅;同时配合其它车辆向下移动,就体现出 me_car 向前移动,问题 1:背景移动中我发现每副图片尽管移动的距离和速度可以同时进行,但是每次从屏 幕上方出现的第一副图片与它的前一副图片有一小部分未能连接上,我测试过移动距离刚 好是移动速度,每次在背景移动时会有一小部分不连续,这样给人的整体感觉就没有流畅 感解决方法:我测试过后,在第一个图片后加上移动距离,就可以解决视觉上的不连续感 但是如果背景运动太慢还是有些迟钝,所以 Timer 控件的时间应该快另一种方法是让两 张图片不停闪烁造成视觉差也可以让人看上去背景在移动我认为第二种方法更好,可以 用更少的代码实现效率更高,主要是存储空间上更节约我没有采用是因为这种方法不是 我想出来,而且我也是在基本完成游戏时,才得到这种思想 (4)开始时 me_car 闪烁效果实现:我观察原游戏开始时 me_car 会闪烁几下后让其它车辆 冲出屏幕,我模仿次效果编写自己的代码。
首先编写一个 flash()函数用于控制 me_car 消 失、出现再次我用一个 Timer 控件控制让其它车辆在闪烁完后冲出跑道 (5)实现撞边(撞绿化带)的处理情况:我首先考虑的是 me_car 撞边后爆炸效果的处理, 当 me_car 撞边后让它变换三种爆炸状态即三副图片,我用一个 Timer 控件来处理爆炸,并 且让 me_car 在三副图片后重新恢复成原图并放在跑道中间 问题 1:我开始时由于图片边缘处理问题,每次执行时撞到边时会更往边限绿化带里爆炸, 与原游戏不同 问题 2:其它车应该继续往前移动,而且爆炸时还可以继续控制左右方向 (我现在也没有 解决)主要是想减少几个 Timer 控件 解决方法:我让 me_car 运动时,让控制其它车向后移动的控件停止,向前移动的控件和控 制 me_car 左右移动的控件执行 (6)实现两车碰撞:首先判断它车与 me_car 在前后距离之间满足要求,其次是 me_car 与 它车是否满足碰撞条件,满足后又要进行碰撞后的处理,比如 me_car 旋转并向相反移动 问题 1:原游戏中碰撞后其它车不但要向相反方向移动,而且还要根据情况爆炸,它车向 碰撞反方向移动,要满足动量守恒定理。
问题 2:我计算的相撞距离时,发现无论如何都会有车辆间部分遮盖 (未能解决) 解决方法:我原来只想实现碰撞后 me_car 爆炸,但要考虑游戏娱乐性,就多加几段代码 用一个函数来实现,可能有些小问题,总体实现了功能函数中用全局变量来标志状态, 并用其它全局变量来记录它车移动距离,如果它车撞边也要发生爆炸,我为了节省 Timer 控件就让它车爆炸函数在移动控件中调用 (7)实现部分车辆挡路和让路:我观察原游戏时,不同颜色的它车在运动中有不同运动方 式红色车会挡住 me_car 移动,蓝车会让出路让 me_car 通过我是先实现让路功能在完 成挡路功能的 问题 1:我把让路程序和挡路程序放在一个函数中,调试出让路效果后,我调试挡路程序 时,红车(挡路的车)一直跟随 me_car 运动 问题解决:我重新分析了程序并观察原游戏发现问题在于设置跟随判断不完全,也没有考 虑与整个游戏运行的程序相关性,把判断问题重新完善,并多加部分代码让此局部功能与 整体更好配合 (8)开始处和结束处斑马线运动:游戏开始”start”标志在加速键按下时会向下移动,此时 斑马线也会随之依次出现当”start”标志在满足大于一定数字时会,斑马线会依次消失预 示着终点即将来临。
想到这一功能是因为游戏运行时屏幕上背景运动不协调,所以才想一 某个移动标志来控制整个游戏中斑马线的出现与消失 问题 1:测试”start”标志在开始处和结束处的具体位置不好把握 解决方法:我至今也是才用模糊的 X 坐标来表示,可能在某些时候可以正常完成,有时不 能,例如撞边次数太多到达终点前斑马线消失会不正常 (9)开机实现:我用一个大开机画面挡住游戏画面,按下“开始”按键让开机画往右移动, 直到开机画移出屏幕后游戏正式运行 问题 1:我打算用 Button 控件来让游戏开始,发现用 Button 控件后,左右键无法执行,可能是 Button 控件的执行优先级高 解决方法:我就用 label 控件代替,问题很简单但是不好找我调试程序很久才发现这个小问 题 上述的功能我是采用单步完成,功能之间的衔接可能不太好,游戏运行时 CPU 的占用太高 不是游戏原来构想结果游戏的具体代码功能我不在文挡中说明,我会在代码窗体中说明四)游戏缺陷:我的游戏中运用 Timer 控件达到 6 个,但有人告诉我只要 1 个控件就能 解决全部功能调度我在制作其它车辆加速或减速时发现车辆在抖动的运动,看上去十分 明显,我测试过修改 Timer 的时间但无济于事。
我请教过高手才明白,游戏中图片运动最 好采用画笔函数单帧描画可以使图片运动曲线流畅我在做游戏时发现游戏只有一个关卡, 地图也是直线难度就会相对降低,问过后才知道游戏一般要开发一套自己的引擎,也就是 不同的脚本语句来执行游戏的场景变换、物体移动、难度变化、Boss 的攻击方式等从这 点来讲我的游戏连基本入门都没入 (五)游戏制作心得及经验收获:这是我第一次用如此多的时间和精力完成的小游戏,同 时也是我第一次正规制作游戏从游戏来源分析,从中了解到我的游戏要达到的目标,减 少我自己构思的游戏最终效果的标准我从做课题设计中学会了如何正确的去调试寻找程 序中出现的错误,并且如何修改错误,如何更精简程序代码,如何使游戏运行时更流畅 游戏的整体规划应该突出简单可带动玩家的娱乐兴趣,从这点出发我选择做赛车或飞机游 戏,但是飞机游戏中游戏制作难度比赛车高(针对我制作的没有用游戏引擎开发的游戏) , 我选择赛车的制作难度底,这样我也可以一边制作游戏,一边玩游戏,提高制作项目的兴 趣从我上面分析的功能欠缺中我发现自己在编程序方面还是一个门外汉,所以在以后的 学习中我应该更注重编程能力的练习这个项目设计是我自己规划的,如果下次还有课程 项目我会选择合作项目,为以后培养团队合作打下基础。












