综合实例_赛车程序_第1页
综合实例_赛车程序_第2页
综合实例_赛车程序_第3页
综合实例_赛车程序_第4页
综合实例_赛车程序_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

综合实例综合实例 赛车程序赛车程序 问题描述 问题描述 游戏背景为一环形车道图 选择菜单选项 开始游戏 则可开始 游戏 游戏的任务是使用键盘上的方向键操纵赛道上的蓝色赛车追赶 红色赛车 红色赛车沿车道顺时针行驶 出发点和终点均位于车道左 上方 任一赛车先达到终点则比赛结束 编程要求 编程要求 1 矩形车道和赛车的图像可辨认 显示正确 2 赛道内有红色和蓝色两辆赛车 红色赛车由程序控制 蓝色 赛车用键盘操纵 3 赛车在矩形车道上运行 方向应与赛车形状相匹配 4 用光标键控制蓝色赛车追赶红色赛车 赛车不能偏离跑道 5 当某一赛车到达终点时 显示消息框 6 正确设置游戏菜单 开始 结束 要点分析 要点分析 本题主要涉及到的知识点有 定时器消息 位图显示 画笔 画刷 的使用 显示文字等工作 难度适中 该题的难点在于如何保证赛车的头部永远向前 这里使用了一幅 位图 它由四部分组成 如图 1 所示 为了方便编程 假定赛车是正 方形 即赛车位图的宽度和高度相同 在本题中每一辆赛车位图的宽 度和高度均为 48 个像素点 整个位图的宽度为 192 个像素点 高度为 48 个像素点 根据赛车在运行时的方向 将赛车位图的一部分显示到 屏幕 图 1 赛车的位图 解题步骤 解题步骤 1 首先用 AppWizard 生成一个名为 Car 的 SDI 程序框架 其选项均用缺省设置 2 编辑项目的菜单资源 在框架窗口的主菜单 IDR MAINFRAME 中添加一个下拉菜单选项 游戏 添加两个 菜单选项 开始 和 结束 并删除不必要的菜单选项 如图 2 所 示 菜单属性设置如表 5 所示 图 2 赛车游戏菜单 表 5 菜单属性 IDCaptionPrompt ID BEGIN 开始开始 ID STOP 结束结束 3 利用 ClassWizrd 为视图类添加与这些菜单选项对应的成员 函数 进入 ClassWizard 的 Message Maps 选项卡 选择 Class Name 项 为 CCarView 在 Object IDs 列表框中分别选择新添加的菜单选项的 ID 在 Messages 列表框中选择 COMMAND 按下 Add Function 按钮 添加成员函数 ClassWizard 会为这些菜单选项添加相应的消息响应函 数 目前尚没有具体内容 需要程序员自行加入有关的处理代码 并将其声明加入 OCarView 类定义 在消息映射宏中加入相应的消息 映射 4 使用 Developer Studio 菜单的 Insert Resource 选项调出 Insert Source 对话框 为项目添加两个位图资源 分别表示红车和蓝车 的位图 相应位图的资源 ID 分别为 IDB BITMAP1 和 IDB BITMAP2 5 完成以上工作后 即可修改程序框架 添加必要的代码 源程序清单 源程序清单 1 在视图类 OCarView 类头文件首部添加三个常量 在类中 再添加若干数据成员 const CRect rectRed CRect 30 30 750 490 红车位置 const CRect rectBlue CRect 30 90 700 430 蓝车位置 const CRect rectGreen Crect 150 150 640 340 草坪位置 class OCarView public CView 此处略去若干行由系统生成的代码 CBitmap m bmpRed 红车的位图 CBitmap m bmpBlue 蓝车的位图 int m nWidth 位图的宽度 int m nHeight 位图的高度 CRect m rectRed 红车的区域 int m nRed 红车的方向 0 左 1 下 2 右 3 上 CRect m rectBlue 蓝车的区域 int m nBlue 蓝车的方向 0 左 1 下 2 右 3 上 2 在视图类的构造函数中添加代码 CCarView CCarView m bmpRed LoadBitmap IDB BITMAP1 m bmpBlue LoadBitmap IDB BITMAP2 BITMAP BM m bmpRed GetBitmap m nWidth BM bmWidth 4 m nHeight BM bmHeight 3 在视图类的虚函数 OnInitialUpdate 中添加代码 void CCarView OnInitialUpdate CView OnInitialUpdate m rectRed CRect rectRed Left rectRed top rectRed left m nWidth rectRed top m nHeight 定 义红车的赛道 m rectBlue CRect rectBlue left rectBlue top rectBlue left m nWidth rectBlue top m nHeight 定义 蓝车的赛道 m nRed m nBlue 0 赛车开始时方向 均向右 4 在 OnDraw 函数中添加代码 void CCarView OnDraw CDC pDC CCarDoc pDoc GetDocument ASSERT VALID pDoc CBrush brushgreen pubrushOld CPen penBlue ppenOld penBlue CreatePen PS SOLID 1 RGB 0 0 128 brushgreen CreateSolidBrush RGB 0 255 0 ppenOld pDC SelectObject pbrushOld pDC SelectObject pDC Rectangle 画赛道 pDC SelectStockObject WHITE BRUSH pDC Rectangle MemDC CreateCompatibleDC NULL 建立虚拟设备环境 MemDC SelectObject pDC BitBlt m rectRed left 1 m rectRed top 1 m nWidth m nHeight 画红车 MemDC SelectObject pDC BitBlt m rectBlue left 1 m rectBlue top 1 m nWidth m nHeight 画蓝车 pDC SelectObject pbrushOld pDC SelectObject ppenOld 5 在视图类中添加定时器消息处理函数 OnTimer 并在其中 添加代码 void CCarView OnTimer UINT nIDEvent InvalidateRect m rectRed switch m nRed 红车的方向 case 0 向右 if m rectRed right 10 rectRed right m rectRed CSize 10 0 else m nRed 1 break case 1 向下 if m rectRed bottom 10 rectRed left m rectRed CSize 10 0 else m nRed 3 break case 3 向上 if m rectRed top rectRed top m rectRed CSize 0 10 else KillTimer 1 游戏结束 MessageBox You Lose InvalidateRect m rectRed CView OnTimer nIDEvent 6 在视图类中添加键盘按下消息处理函数 OnKeyDown 并 在其中添加代码 void CCarView OnKeyDown UINT nchar UINT nRepCnt UINT nFlags InvalidateRect m rectBlue switch nChar case 39 向左光标键 m nBlue 0 if m rectBlue right 10 rectBlue right break case 40 向下光标键 m nBlue 1 if m rectBlue bottom 10 rectGreen right m rectBlue CSize 0 10 break case 37 向右光标键 m nBlue 2 if m rectBlue left rectBlue left break case 38 向上光标键 m nBlue 3 if m rectBlue top rectRed top if m rectBlue Bottom rectBlue top KillTimer 1 游戏结束 MessageBox You Win InvalidateRect m rectBlue CView OnKeyDown nChar nRepCnt nFlags 7 在视图类中新增菜单对应的消息处理函数中添加代码 void CCarView OnBegin OnInitialUpdate SetTimer 1 100 NULL 设置定时器 void CCarView OnStop KillTimer 1 删除定时器 输入输出 输入输出 用户可选择框架窗口菜单 演示 中的选项 开始 运行结果 如图 3 所示 图 3 赛车运行结果 小结 小结 在视图类中重载了键盘按下消息处理函数 OnKeyDown

温馨提示

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

评论

0/150

提交评论