欢迎来到天天文库
浏览记录
ID:12692442
大小:117.00 KB
页数:11页
时间:2018-07-18
《综合实例_赛车程序》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、综合实例——赛车程序 问题描述:游戏背景为一环形车道图,选择菜单选项“开始游戏”则可开始游戏。游戏的任务是使用键盘上的方向键操纵赛道上的蓝色赛车追赶红色赛车,红色赛车沿车道顺时针行驶,出发点和终点均位于车道左上方。任一赛车先达到终点则比赛结束。 编程要求:(1)矩形车道和赛车的图像可辨认,显示正确;(2)赛道内有红色和蓝色两辆赛车,红色赛车由程序控制,蓝色赛车用键盘操纵。(3)赛车在矩形车道上运行,方向应与赛车形状相匹配。(4)用光标键控制蓝色赛车追赶红色赛车,赛车不能偏离跑道;(5)当某一赛车到达终点时,显示消息框;(6)正确设置游戏菜单(开始,结束)
2、 要点分析:本题主要涉及到的知识点有:定时器消息、位图显示、画笔/画刷的使用、显示文字等工作,难度适中。该题的难点在于如何保证赛车的头部永远向前。这里使用了一幅位图,它由四部分组成,如图1所示。为了方便编程,假定赛车是正方形,即赛车位图的宽度和高度相同。在本题中每一辆赛车位图的宽度和高度均为48个像素点,整个位图的宽度为192个像素点,高度为48个像素点。根据赛车在运行时的方向,将赛车位图的一部分显示到屏幕。 图1 赛车的位图 解题步骤: (1)首先用AppWizard生成一个名为Car的SDI程序框架,其选项均用缺省设置。(2)编辑项目的菜单资源,
3、在框架窗口的主菜单(IDR_MAINFRAME)中添加一个下拉菜单选项“游戏”,添加两个菜单选项“开始”和“结束”,并删除不必要的菜单选项,如图2所示。菜单属性设置如表5所示。 图2 赛车游戏菜单 表5 菜单属性IDCaptionPromptID-BEGIN开始开始ID_STOP结束结束 (3)利用ClassWizrd为视图类添加与这些菜单选项对应的成员函数。进入ClassWizard的MessageMaps选项卡,选择ClassName项为CCarView,在ObjectIDs列表框中分别选择新添加的菜单选项的ID,在Messages列表框中选择C
4、OMMAND,按下AddFunction按钮添加成员函数。ClassWizard会为这些菜单选项添加相应的消息响应函数(目前尚没有具体内容,需要程序员自行加入有关的处理代码),并将其声明加入OCarView类定义,在消息映射宏中加入相应的消息映射。(4)使用DeveloperStudio菜单的Insert/Resource…选项调出InsertSource对话框,为项目添加两个位图资源,分别表示红车和蓝车的位图。相应位图的资源ID分别为IDB_BITMAP1和IDB_BITMAP2。(5)完成以上工作后,即可修改程序框架,添加必要的代码。 源程序清单:
5、 (1)在视图类OCarView类头文件首部添加三个常量,在类中再添加若干数据成员:constCRectrectRed=CRect(30,30,750,490); //红车位置constCRectrectBlue=CRect(30,90,700,430); //蓝车位置constCRectrectGreen=Crect(150,150,640,340); //草坪位置classOCarView:publicCView{ //此处略去若干行由系统生成的代码 CBitmapm_bmpRed; /
6、/红车的位图 CBitmapm_bmpBlue; //蓝车的位图 intm_nWidth; //位图的宽度 intm_nHeight; //位图的高度 CRectm_rectRed; //红车的区域 intm_nRed; //红车的方向,0:左;1:下;2:右;3:上 CRectm_rectBlue;
7、 //蓝车的区域 intm_nBlue; //蓝车的方向,0:左;1:下;2:右;3:上};(2)在视图类的构造函数中添加代码:CCarView::CCarView(){ m_bmpRed.LoadBitmap(IDB_BITMAP1); m_bmpBlue.LoadBitmap(IDB_BITMAP2); BITMAPBM; m_bmpRed.GetBitmap(&BM); m_nWidth=BM.bmWidth/4; m_nHeight=BM.bmHeight
8、;} (3)在视图类的虚函数OnInitialUpdate()中添加代码:voi
此文档下载收益归作者所有