飞机大战游戏设计与实现

飞机大战游戏设计与实现
飞机大战游戏设计与实现

程序设计综合实践报告

姓名学号

班级项目名称

飞机大战游戏设计与实现

实习地点计算机实验室

实习时间

2015-12-9至2015-12-19

实习成绩指导教师签字

信息科学与工程学院

2015年12月20日

目录

1. 概述 (1)

关卡设置 (1)

敌机设置 (1)

战机设置 (1)

游戏设置 (1)

2. 相关技术 (2)

Windows定时器技术 (2)

双缓冲技术 (2)

获取矩形区域 (2)

3. 总体设计与详细设计 (2)

系统模块划分 (2)

主要功能模块 (3)

4. 编码实现 (4)

初始准备 (4)

战机对象 (6)

敌机对象 (7)

道具对象 (9)

主要内容 (10)

窗口显示信息 (18)

5. 实训中遇到的主要问题及解决方法 (20)

产生中断及解决方案 (20)

图片闪烁问题及解决方案 (20)

6. 实训体会 (20)

1. 概述

项目:飞机大战

主要功能有以下几点:

关卡设置

本次飞机大战游戏中共设置了四个关卡,第一关的难度设置较低,仅有敌机对其进行攻击;第二关在原有的基础上增加一些补血的小道具,当积分达到一定的时候便会出现该道具,并且敌机出现的频率也比第一关高;第三关在第二关的基础上新出现了小boss,并增加了其他的道具;第四关在第三关的基础上再新出现大boss,当积分达到要求以及大boss被消灭后通关成功。

敌机设置

小敌机随机出现,炮弹也随机发射,当小敌机与战机相撞或被战机的子弹击中时,小敌机消失。当达到一定积分时,小boss出现并随机发射出与小敌机一样的炮弹,但是炮弹分三个方向发射出。当小boss被战机的子弹击中或与战机相撞时失去5滴血。当到达四关并且积分足够多时出现大boss,同小boss一样,当大boss与战机相撞或被战机子弹击中时失去1滴血。除此之外,小boss和大boss上方都有血条显示,当血条消失时意味着生命消失,大boss和小boss消失。小boss会在屏幕上随机出现和走动出了屏幕后会在屏幕的任意地方再随机出现,直至血量为0消失。大boss则在屏幕中随机走动不出屏幕,直至血量为0消失。

战机设置

战机初始有五条生命,每条命的血量为50,所获得的积分以及其生命值、血条都在窗口的左上角显示。在第一、二关时,按空格键战机会出现两个向上发射的炮弹,到第三、四关的时候,按空格键战机会发射三个不同方向的炮弹。战机吃到药瓶道具时血量会增加20,但不可以超过50;吃到闪电道具时,便可放大招,放大招的次数为15。当战机被敌方的炮弹击中或与敌方相撞时,血量减少,减少为0时生命值减1,直至生命值为0。

游戏设置

进入游戏时,会有背景音乐,窗口左上角显示战机所得积分及其生命值。根据积分情况进入不同的关卡。游戏通关时屏幕清空,并显示通关成功,按Y可重新开始游戏。当战机的血量以及生命值为0时,游戏失败,屏幕清空并显示游戏结束,按Y即可重新开始游戏。

2. 相关技术

Windows定时器技术

Windows定时器是一种输入设备,它周期性地在每经过一个指定的时间间隔后就通知应用程序一次。程序将时间间隔告诉windows,然后windows给你的程序发送周期性发生的WM_YIMER消息以表示时间到了。本程序在OnCreate()函数中使用了编号为1的定时器,控制了每30毫秒刷新一次。

双缓冲技术

在内存中创建一个与屏幕绘图区域一致的对象,先将图形绘制到内存这个对象上,再一次性将这个对象上的图形拷贝到屏幕上,这样即可解决图片闪烁问题。本程序在绘制滚动背景以及飞机,敌机等中用到了该技术。

获取矩形区域

用CRect定义一个对象,利用这个对象得到要用到的矩形区域,用IntersectRect函数来判断两个源矩形是不是有重合的部分。

3. 总体设计与详细设计

系统模块划分

飞机大战游戏主要模块可以说是有几个重要的类组成的。首先是老师给出的CGameObject类,以及在其派生下的Bomb,Ball,Enemy,MyPlane,Explosion,AddBlood等等此处不一一列举。另外还有CObject派生的BackGround类。

如下图:

主要功能模块

主要功能是在飞机大战View类中,OnTimer函数中实现,将各个类调用,随机产生敌机,子弹的输出,爆炸的实现等等。它的实现图可以如下实现:

启动程序

初始化游戏对象

游戏初始化

初始化绘图环境

游戏是否结束

绘制游戏对象碰撞运算积分判断

本程序所包含的功能和类模块:

游戏子系统

模块名称功能简述

应用程序对象游戏程序的加载、游戏对象的绘制、玩家的键盘事件获取

游戏对象各个游戏对象的抽象父类(CGameObject)

战机对象战机类(MyPlane)

敌机对象敌机类(Enemy, LittleBoss,Boss)

4.编码实现初始准备

敌机对象

实训中遇到的主要问题及解决方法

产生中断及解决方案

在导入一个新的图片资源后,更改ID标识符时没有弄好,产生重复,导致中断,经过反复查找后发现该错误,将其改正过来。

因为战机击中大Boss与击中敌机部分代码原理相同,故写击中大Boss部分的代码之前粘贴击中敌机部分的代码,再更改对象名。由于疏忽有的对象名忘了更改过来导致测试游戏过程中到了快出现大Boss击中他的时候产生中断,查证后将对象名更改正确即可。

图片闪烁问题及解决方案

在运行过程中发现无论是战机敌机等还是背景都产生剧烈的闪烁问题,非常晃眼,不知道该如何解决。后来上网查找资料,知道利用双缓冲技术可解决图片闪烁问题。然后仔细研究用法,最后成功将该问题解决。

6. 实训体会

从大一到大三虽然已经学了一些东西,但是利用MFC来做飞机大战还是第一次,一开始简直一头雾水不知道该从哪儿下手。好在老师为我们讲解了其基本用法,然后我利用前几

天仔细研究了VS中常见函数的用法和功能,渐渐开始上手。了解差不多后便开始着手写,中途虽然出现了许多错误,有时候一个中断都花了我一个多小时的时间找出问题所在并解决,虽然找的过程很痛苦,但是找到并解决后充满了成就感还是令自己感到很兴奋。经过这次实训后收获满满,不仅学会了如何使用VS,还多了一次经验和历练。

相关主题
相关文档
最新文档