打气球_课设报告_第1页
打气球_课设报告_第2页
打气球_课设报告_第3页
打气球_课设报告_第4页
打气球_课设报告_第5页
全文预览已结束

下载本文档

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

文档简介

一 设计内容一 设计内容 程序设计题目为 打气球 游戏设计与实现 主要实现以下功能 1 使用面向对象的方法 设计并实现 打气球 游戏 2 气球由地平线随机产生 并向上运动 3 用户使用鼠标点击气球 点中气球 气球消失 分数增加 100 分 4 游戏时间为 60 秒 时间采用倒计时方式显示 游戏时间为 0 时 提示用户是否重新开 始 5 开始 暂停 按钮 当点击 开始 按钮 游戏开始 按钮文字变为 暂定 点击 暂停 按钮 游戏处于暂停状态 按钮文字变为 开始 二 设计思想和实现方法二 设计思想和实现方法 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 用鼠标 打 气球 三 核心代码说明三 核心代码说明 1 暂停 开始 按钮 void CTempDlg OnS P if state 0 按钮变为暂停 2 char buffer 15 score 0 sprintf buffer SCORE 4d score m score1 LPCTSTR buffer UpdateData 0 count 60 state 1 SetTimer 1 50 NULL 分数 0 05 秒刷新一次 SetTimer 2 1000 NULL 时间 1 秒刷新一次 return if state 1 点击后暂停 按钮变为开始 SetDlgItemText IDP S 开始 KillTimer1 KillTimer 2 state 0 Else 点击后游戏开始 按钮变为暂停 SetDlgItemText IDP S 暂停 SetTimer 1 50 NULL SetTimer 2 1000 NULL state 1 说明 state 初值为 1 通过判断其值执行相应的 if 语句 游戏开始后 单击按钮 按钮变为 开始 同时调用 KillTimer 函数 程序暂停 再次单击 按钮变为 暂停 调用 SetTimer 函数 程序继续 随着游戏的进行 当时间递减为 0 时 点击弹出确认重新开始的 对话框 若点击 是 则时间变为 60 分数归 0 并输出 按钮变为 暂停 游戏重新开始 游戏暂停 如图 1 所示 3 图图 1 1 游戏暂停游戏暂停 2 创建 定义函数 int CTempDlg OnCreate LPCREATESTRUCT lpCreateStruct if CDialog OnCreate lpCreateStruct 1 return 1 srand int GetCurrentTime 初始化随机数发生器 rand MAX MIN MIN POINT point 记录鼠标位置 GetCursorPos ScreenToClient for int i 0 i NUM i a i 0 rand 450 30 30 a i 1 rand 480 450 450 SetTimer 1 50 NULL SetTimer 2 1000 NULL char buffer 15 sprintf buffer SCORE 4d score 输出分数 m score1 LPCTSTR buffer sprintf buffer TIME 4d count 输出时间 m time1 LPCTSTR buffer return 0 说明 此段代码主要就各功能进行函数的创建和定义 包括 初始化随机数发生器并获取随 机数产生气球 定义并获取鼠标位置 设置时间和分数的定时器 定义时间和分数的输出 3 鼠标单击事件 void CTempDlg OnLButtonDown UINT nFlags CPoint point 打气球 if state 0 return for int i 0 i NUM i if point x a i 0 point x a i 0 400 a i 1 0 score 100 char buffer 15 sprintf buffer SCORE 4d score m score1 LPCTSTR buffer UpdateData 0 break 4 CDialog OnLButtonDown nFlags point 说明 打气球过程是通过鼠标点击气球实现的 State 为 0 时 游戏暂停或结束 程序不运行 游戏过程中 通过判断鼠标点击的位置与气球中心位置的距离判断是否点中气球 若点中 将气球移至显示界面外 同时分数加 100 并重新输出 用鼠标点击气球 分数加 100 如图 5 所示 图图 5 5 点中气球加分点中气球加分 100100 四 存在问题和分析四 存在问题和分析 1 随机产生气球时 为使界面清晰美观 需要控制产生的数目 尽量避免气球相互重叠 覆盖的情况 数目可由二维数组控制 后一问题则必须操作气球位置来解决 程序中是通过 气球的随机摆动来减少重叠机会的 2 打气球时 判断鼠标是否点中气球 实际就是判断到椭圆中心的距离 而点中范围其 实是气球所在的矩形 若要点中椭圆 则判断时最好与椭圆方程相结合 3 游戏中对分数的刷新频率要把握适度 太快屏幕显得不稳定 太慢分数变化不及时 经在游戏中的不断调整选择了 0 05 秒作为刷新频率 比较合适 4 对于 暂停 开始 按钮的功能交替 需要设置一个变量作为判断条件 因此定义一个 bool 型变量 0 1 分别代表两个功能 其实也可以定义一个整型变量 用奇数和偶数代表两 个功能状态 五 总结五 总结 在游戏功能实现方面 本程序基本实现了游戏中需要的各种基本功能 包括 1 气球由地平线随机产生 并向上运动 同时随机小范围摆动 2 用户使用鼠标点击气球 点中气球 气球消失 分数增加 100 分 3 游戏时间为 60 秒 时间采用倒计时方式显示 游戏时间为 0 时 程序暂停 单击 重 新开始 按钮 提示用户是否重新开始 4 开始 暂停 按钮 游戏开始后 点击 暂停 按钮 游戏处于暂停状态 按钮文字变为 开始 点击 开始 按钮 游戏重新开始 按钮文字变为 暂停 5 退出 按钮 点击 退出 按钮 提示是否退出信息 若确定退出 关闭程序 若取消 则回到软件运行界面 仍存在的不足是 运行程序时游戏直接开始 不是通过点击 开始 按钮实现的 本程序简洁易懂 层次清晰 可读性和可操作性都很强 用简单的语句实现了多种功能 修改或完善时也较为灵活方便 通过完成本次面向对象程序设计的任务 使我熟练和掌握了 这学期所学的有关 visual c 中的一些主要知识点和应用点 如类的定义 类的实现 对象的 定义 类的继承等等 可以所学有所学

温馨提示

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

评论

0/150

提交评论