- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
课程设计报告
设计内容
程序设计题目为“打气球”游戏设计与实现,主要实现以下功能:
2,飞翔的气球 (怎么飞?随机飞,随机速度又怎么表现?该如何记时?)
3,打气球 (怎么算打中?打中后,气球爆炸怎么表现?声音呢?)
4,给我个计数器 (计算打中的,飞走的,甚至击中概率)
5,成与败 (怎么算胜利?怎么算失败?如何表现)
6,完善 (结尾)
(1) 使用面向对象的方法,设计并实现“打气球”游戏。
(2) 气球由地平线随机产生,并向上运动;
(3) 用户使用鼠标点击气球,点中气球,气球消失,分数增加100分;
(4) 游戏时间为60秒,时间采用倒计时方式显示,游戏时间为0时,提示用户是否重新开始;
(5) “开始/暂停”按钮。当点击“开始”按钮,游戏开始,按钮文字变为“暂定”;点击“暂停”按钮,游戏处于暂停状态,按钮文字变为“开始”;
(6) “退出”按钮。点击“退出”按钮,提示是否退出信息,若确定退出,关闭程序;若取消,则回到软件运行界面。
设计思想和实现方法
(1)绘制游戏界面。
综合考虑绘图和控件功能的实现,使用AppWizard建立一个基于对话窗口的MFC应用程序框架,并通过控件工具栏选取绘图区域,创建“暂停/开始”按钮、“退出”按钮以及分别显示时间和分数的两个编辑框。
(2)绘制气球及地平线。
在OnPaint()函数下添加代码,创建黑色画笔和红色画刷,分别用来勾画椭圆(气球)、直线(绳子)和填充气球。通过ExcludeClipRect()函数擦除四边,从而规定了图形显示区域。绘图时,以椭圆中心坐标作为参考,用Ellipse()函数绘制气球,用MoveTo() 、LineTo()函数画绳子和地平线。
(3)实现“退出”功能。
当点击“退出”按钮时弹出确认退出对话框,点“是”则调用OnOK()退出程序。
(4)实现“暂停/开始”功能。
首先定义一个bool型变量并初始化为1,用它的值作为if语句的判断条件实现开始和暂停的功能转换。如果时间为0,按钮变为“重新开始” ,点击后弹出确认重新开始对话框,选择“是” 重新开始游戏;游戏开始后单击按钮,用KillTimer()实现暂停功能,按钮变为“开始”;再点击则重新调用SetTimer()开启计时器,按钮变为“暂停”。
(5)随机产生多个气球。
定义一个二维数组,第一维表示随机产生的气球数目,第二维表示气球中心坐标。
在OnTimer事件中,响应绘图事件时,通过纵坐标递减实现气球上升,并使用rand()函数使横纵坐标随机变化实现气球的随机摆动,当气球升至显示区域外就重新产生一个;响应时间事件时,定义一个时间全局变量并初始化为60,变量递减同时以文本形式不断输出以实现倒计时。如果时间为0,则暂停。在OnCreate()函数下,通过for循环随机产生每个气球中心点的横纵坐标,并通过SetTimer()定义两个定时器,分数每0.05秒刷新一次,时间每过1秒刷新一次。
(6)用鼠标“打”气球。
这是鼠标的单击事件,当游戏暂停或结束时不执行。游戏进行时,判断鼠标单击的位置是否在气球上,即判断鼠标坐标到气球中心的距离,当点在气球范围内的时候将气球坐标移至界面外,气球消失,同时分数加100,并重新以文本形式输出。
核心代码说明
(1)变量定义
#define NUM 10 //每一次随机产生的气球最大数
int a[NUM][2]; //第一维控制数目 第二维表示气球坐标
int count=60; //时间
long score; //分数
bool state=1;
说明:此段代码写在程序的开端,将产生的气球数目赋值给变量,则只需改变此处变量的值就可以轻易地改变气球个数,易于修改操作;二维数组的第一维与for循环语句相结合,可以实现对每一个气球的操作,第二维表示坐标,实现对气球的定位。
(2)绘制气球、绳子和地平线
else
{
// CDialog::OnPaint();
CPaintDC dc(this);
CPen bPen(PS_SOLID, 0, RGB(0,0,0)); //黑色画笔
CBrush rbrush(RGB(255,0,0)); //红色画刷
dc.SelectObject(bPen);
dc.SelectObject(rbrush);
dc.ExcludeClipRect(450,0,800,600); //规定图形显示区域
dc.ExcludeClipRect(0,401,800,600);
dc.ExcludeClipRect(0,0,10,600);
文档评论(0)