分享
分销 收藏 举报 申诉 / 65

类型第5章综合程序练习题.ppt

  • 上传人:天****
  • 文档编号:14647507
  • 上传时间:2026-10-25
  • 格式:PPT
  • 页数:65
  • 大小:572.54KB
  • 下载积分:10 金币
  • 配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    综合 程序 练习题
    资源描述:
    单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第,5,章 综合程序练习题,主要内容,大型程序设计的要求,9,个大型程序设计题目分析,第,5,章 综合程序练习题,大型程序设计的要求,题目要求:,每道题都给出了,问题的描述、基本要求、高级要求、难点分析、主要数据结构及主要算法提示等,以便供大家选择练习。,其中“基本要求”和“高级功能”是两个不同层次的功能要求。,第,5,章 综合程序练习题,主要内容,大型程序设计的要求,9,个大型程序设计题目分析,第,5,章 综合程序练习题,大型程序设计题目分析:,1,打字练习,2,电子琴,3,简易画图板,4,贪吃蛇,5,五子棋,6,搬运工,7,大富翁,8,赛车,9,坦克大战,1,问题描述,2,基本功能,3,高级功能,4,难点分析,5,程序总体结构,6,主要数据结构提示,7,主要算法提示,第,5,章 综合程序练习题,打字练习,1,:问题描述,打字练习是一个非常有用的小程序,电脑初学者可以借助它来熟悉键位,新手可以利用它来提高打字速度。,2,:基本功能,键位练习、,单词练习、文本练习,3,:高级功能,增加音效、暂停功能、继续上次未完成的练习,第,5,章 综合程序练习题,打字练习,主要数据结构分析(一),1,),struc rect,结构代表屏幕上的一个矩形区域。它的结构如下:,struct rect,int left,,,top;/*,矩形左上角的坐标值*,/,int right,,,bottom;/*,矩形右下角的坐标值*,/,第,5,章 综合程序练习题,打字练习,主要数据结构分析(二),2,)在键位练习的部分,由于要经常对虚拟键盘上的某个键进行绘制,为了绘制时的方便我们可以使用一个结构来表示虚拟键盘上的每个按键。,struct key,struct rect keyRect,;,int keyNum,;,char keyName10,;,;,keyRect,就代表了按键在屏幕上占据的一个矩形区域。,keyNum,是按键的键盘码。,keyName,是按键的名称,绘制时显示在按键上。,第,5,章 综合程序练习题,打字练习,主要数据结构分析(三),3,)使用,struct key keyArrayMAXKEY,数组来保存所有要绘,制的按键,struct key keyArrayMAXKEY;,第,5,章 综合程序练习题,打字练习,主要算法提示,1,)随机产生按键:通过产生一个随机数作为索引值访问,keyArray,数组,来随机产生需要用户输入的按键。然后将对应的按键反像显示。,2,)反像显示一个按键:假设,R1,是我们要反像显示的按键在屏幕上占据的一个矩形区域。(注:,R1,是一个,struct rect,结构的对象,,R1,的值可以从,keyArray,数组中获得。,3,),getimage,的作用是将一个矩形区域的图像复制到,buff,中,而,putimage,的作用是将,buff,中的图像输出到屏幕中的某个位置。而参数,NOT_PUT,的作用是告诉,putimage,在输出时将图像反像显示。,第,5,章 综合程序练习题,电子琴,1,:问题描述,设计一个键盘电子琴,通过键盘输入来模拟敲击琴键,并发出对应的琴声,使用户能在,PC,机上弹奏电子琴。现要求利用,Turbo C 2.0,来实现该游戏。,2,:基本功能,图形界面显示。界面分三部分,背景色为蓝色。,菜单功能,电子琴。系统分,3,种模式:实时模式、播放模式、编辑模式。,3,:高级功能,界面显示波形图、菜单帮助快捷键、鼠标功能,第,5,章 综合程序练习题,电子琴,难点分析,1,)曲目文件的格式设计。业界广泛采用,midi,文件,但程序员新接触时,需要了解它的格式等技术,解码、编码也都存在难度。可自行设计一种格式,记录键盘按键及时间间隔。这样编码和解码都很简单。,2,)图形描绘。这是本程序最主要的工作。在考虑如何设计出一个美观的图形时,好要考虑其它很多方面:背景色、菜单颜色、菜单大小、琴键颜色、琴键的形状、显示琴键被按下、显示波形图等。,3,)响应鼠标事件。在,DOS,环境下响应鼠标操作比较有难度。,第,5,章 综合程序练习题,电子琴,设计及实现要点,界面初始化模块,结束清理模块,播放模块,发声模块,击键处理模块,实时弹奏模块,曲目编辑模块,电子琴程序的总体结构,第,5,章 综合程序练习题,电子琴,主要数据结构分析(一),/*,系统状态,*,/,enum sytem_status,system_status_normal,system_status_paused,/*,系统模式,*,/,enum sytem_modul,system_modul_intime,system_status_play,system_status_edit,/*,定义颜色枚举,*,/,typedef enum color,int blue,int red,.,COLOR;,定义系统常量,第,5,章 综合程序练习题,电子琴,主要数据结构分析(二),#define menu_item_height /*,菜单项的高度,*,/,#define menu_item_width /*,菜单项的宽度,*,/,#define menu_item_color /*,菜单项的颜色,*,/,#define menu_group_distance /*,菜单组间间隔,*,/,typedef struct ctrlKey,char*name;,int firstkey;,int secondkey;,CTRL_KEY;,2,)菜单的一些常量定义,3,)定义控制键。一般是,ctrl/alt,和另外一个键的组合,第,5,章 综合程序练习题,电子琴,主要数据结构分析(三),typedef struct menu_item_node,char*name;,CTRL_KEY hotkey;,menu_item_node*next;,MENU_ITEM;,#define menu_item_list MENU_ITEM,typedef struct menu_group,char*name;,CTRL_KEY hotkey;,menu_item_list itemList;/*,文件菜单组下有几个菜单项,*,/,MENU_GROUP;,4,)一个菜单项,5,)定义菜单组,第,5,章 综合程序练习题,电子琴,主要数据结构分析(四),typedef struct rectangle,POSITION up_start,/,上方的起始位置,POSITION up_end,/,上方的结束位置,POSITION down_start,/,下方的起始位置,POSITION down_start /,下方的结束位置,RECTANGLE,;,typedef struct coordinate,int x;,int y;,POSITION;,6,)定义某个点的坐标,7,)定义一个形状的四个位置,注意边线均为直线,第,5,章 综合程序练习题,电子琴,主要数据结构分析(五),typedef struct key_record,int keynum,int timeinterval,KEY_RECORD;,typedef struct gragh,RECTANGLE shape,COLOR frameColor,COLOR fillColor,GRAGH;,8,)定义一个图形,包括形状、边框色、填充色,9,)定义一个击键记录,第,5,章 综合程序练习题,电子琴,主要数据结构分析(六),typedef struct config,COLOR background,COLOR hightlight,CONFIG;,typedef struct key_record_list_node,KEY_RECORD key,key_record_list_node*next,LIST_NODE;,10,)记录所有击键,11,)记录配置信息,包括背景色、高亮色、菜单项的长宽等、键盘对应图的位置、波形图的文职、曲目列表的位置、菜单组信息等,自行补充,:,第,5,章 综合程序练习题,电子琴,主要算法提示,参考以下几个主要函数的定义:,初始化函数:初始化全局配置信息,int initConfig(CONFIG*pConfig);,描绘界面:此函数可在初始化界面时用,也可在用户设置了选项后重新描绘界面时调用,int paintFrame(CONFIG*pConfig);,画一个图形,int paintShape(GRAGH*pShape);,在指定位置打一个指定大小的字,int paintChar(GRAGH*pShape,,,char*name);,一些大的处理函数,如处理新建文件,自行补充,int onNewOpen();,第,5,章 综合程序练习题,简易画图板,1,:问题描述,简易画图板是一个简单的绘图工具,它提供了一些基本的画图功能。界面由工具栏、调色板和绘图区组成。,2,:基本功能,绘制直线、矩形、椭圆、圆、橡皮擦、填充,3,:高级功能,支持对选定图像中的一个矩形区,可以将绘制的图案保存为,16,色的,BMP,文件。,可以打开一幅,16,色的,BMP,图片进行修改。,第,5,章 综合程序练习题,简易画图板,难点分析,1)填充功能。虽然Tc图形库中有填充函数floodfill,但是这个填充函数不符合我们的要求。因为这个填充函数在调用时除了要指定填充区域中的一点,还需要指定要填充的区域边界的颜色,获取图像边界颜色的操作对于用户来说是比较麻烦的。此外,我们希望填充区域的边界可以是不同颜色的。所以,需要设计自己的填充函数。,2)BMP文件的打开和保存。必须了解BMP文件的结构,以知道如何从文件中读出需要的数据以及如何将数据保存到bmp文件中。,第,5,章 综合程序练习题,简易画图板,设计及实现要点,界面初始化模块,图像绘制模块,颜色选择模块,形状选择模块,结束清理模块,图像保存模块,简易画图板程序的总体结构,第,5,章 综合程序练习题,简易画图板,主要算法提示,首先由用户指定填充区域中的任一点,以该点作为种子点,然后分别,向上下左右四个方向检查该点的相邻点。如果这些点和种子点的颜色,相同,则填充它,否则,就视为边界点。然后再以那些检测到的非边,界点作为种子点,以同样的方式检查它们的相邻点。这样不断的检测,、填充就可以将区域填充满。,推荐使用队列来实现一个非递归的算法。,非递归的填充算法:,a,、,将第一个种子点放入队列,b,、,当队列非空,b1,、,从队列中取出一点,b2,、,将该点置为填充色,b3,、,分别检查上下左右四点,如果是非边界点则将其放入队列中,c,、,算法结束,第,5,章 综合程序练习题,贪吃蛇,1,:问题描述,贪吃蛇游戏是一个深受人们喜欢的游戏:一条蛇在密闭的围墙内,在围墙内随机出现食物,通过按键控制蛇向上下左右四个方向移动,蛇撞到食物,则食物被吃掉,蛇的身体增加一节。如果蛇在移动过程中,撞到墙壁或身体交叉(蛇头撞到自己的身体)游戏结束。现要求利用,Turbo C 2.0,来实现该游戏。,2,:基本功能,提供图形界面、键盘控制游戏、计分机制、结束判断,3,:高级功能,暂停功能:能随时通过按键来暂停游戏,再按一次则继续游戏。,速度调节功能,奖励机制,音效功能,第,5,章 综合程序练习题,贪吃蛇,难点分析,1,)表示蛇的图形以及蛇的移动。,2,)检测蛇有无撞到食物、围墙或是自己的身体。,3,)食物的随机产生。,4,)蛇的移动速度调节。,5,)奖励食物的定时机制。,第,5,章 综合程序练习题,贪吃蛇,设计及实现要点,场景初始化模块,蛇移动模块,键盘处理模块,碰撞检测模块,定时模块,游戏结束清理模块,记分模块,贪吃蛇程序的总体结构,第,5,章 综合程序练习题,贪吃蛇,主要数据结构提示(一),char GameBoard ROWCOL;/*,游戏板所有单元的坐标*,/,enum UnitStateFREE,BOARDER,SNAKE,FOOD,BONUS;,enum DirectionLEFT,RIGHT,UP,DOWN;,游戏场景用一个二维数组表示,2,)游戏场景内各单元的状态用枚举类型来表示,3,)移动方向利用枚举类型来表示,第,5,章 综合程序练习题,贪吃蛇,主要数据结构提示(二),struct Food,int x;,int y;,int die;/*,食物是否已经被吃*,/,int isBonus;/*,是否为奖励食物*,/,;,struct SnakeNode,int x;,int y;,struct SnakeNode*pre;,struct SnakeNode*next;,;,4,)利用结构体来表示蛇身体的一节,最后用循环链表来表示整条蛇,5,)食物,(,包括奖励食物,),用结构体来表示,第,5,章 综合程序练习题,贪吃蛇,主要算法提示,碰撞检测模块:,蛇移动模块:在程序中定义循环链表来表示蛇,并记录蛇头指针以及蛇尾指针、当前移动方向。若有方向按键信息:,a1.,按键方向跟当前方向相同或是相反,则不做处理;,a2.,否则将当前方向设置为新的方向;按当前方向得到蛇头的下一位置;对该位置进行碰撞检测,判断该位置是什么状态,c1.,若是蛇身和墙壁,跳到步骤,e,;,c2.,若是空白,则将蛇尾设为蛇头,将倒数第二节设为蛇尾,更新蛇头的位置为当前的新位置。界面上就把当前最新位置用蛇的颜色画上,并把原蛇尾用背景色擦除。,c3.,若是食物,则新增加当前位置做为蛇头,蛇尾不变。利用记分模块更新分数。并再重新随机产生食物。,返回,a,做循环;游戏结束,第,5,章 综合程序练习题,五子棋,1,:问题描述,五子棋基本规则:棋盘上形成横向、竖向、斜向的连续的相同颜色的五个棋子称为,“,五连,”,。黑白双方先在棋盘上形成五连的一方为胜。若对局双方均认为不可能形成五连或是剩余棋盘空间已不足以形成五连则为和棋。下棋过程中不考虑各种禁手规则。,2,:基本功能,提供图形界面、键盘操作、人人对战、支持某方先下、棋盘,15*,15,,显示网格线,黑白棋子、当前光标所在;显示当前执棋方,3,:高级功能,支持人机对战,显示人机对子情况和胜负判别,悔棋功能,音效功能,第,5,章 综合程序练习题,五子棋,难点分析,1,)胜负判别,2,)悔棋功能,3,)人机对战的人工智能部分,五子棋的人机对战是一个典型的博弈问题。博弈问题一般可用极大,-,极小法和,-,法求解(读者可找相关资料,一般人工智能或博弈论教材中会涉及这些内容)。而即便是用,-,法,五子棋的搜索空间还是相当庞大。,第,5,章 综合程序练习题,五子棋,设计及实现要点,游戏初始化模块,主循环控制模块,键盘处理模块,胜负判别模块,人工智能模块,游戏结束清理模块,五子棋程序的总体结构,第,5,章 综合程序练习题,五子棋,主要数据结构提示(一),1,)棋盘用,15*15,的二维数组表示,数组的每一个元素对应棋盘上的一个交叉点,用,0,表示空位、,1,代表玩家,1,的子、,2,代表玩家,2,的子,:,char ChessBoard1515;,第,5,章 综合程序练习题,五子棋,主要数据结构提示(二),2),用于搜索过程的结构体:,typedef struct five_chess*point;,struct five_chess,int x;,int y;,int layer;,int value;,int score;,int chessLENGTHLENGTH;,int recordLENGTHLENGTH;,;,其中,,x,y,表示在某个位置上扩展出来的新节点,,layer,是表示第几层扩展,用于控制扩展深度。,value,表示该点上极大极小值,,score,表示叶子节点的得分,用于推算父辈节点的,value,,,chess,这个二维数组表示扩展出来的棋盘信息,,record,记录在,x,、,y,点上扩展过的节点,如果没有扩展,record,中对应某个值为,0,。如果,record,中没有可以扩展的节点,那么该层扩展结束,返回一个特定值。,第,5,章 综合程序练习题,五子棋,主要算法提示(一),对棋盘的评分算法。评估一个棋盘的分数,主要通过扫描,整个棋盘,对每个点评分。对某个点上评分从四个方向,(,角度分别为,0,、,45,、,90,、,135,的四个方向,),分别统计,进而,累积该点总分,最后得到整个棋盘的分数。实际上对当前,的局面按照下面规则的顺序进行比较,如果满足某一条规,则的话,就给该局面打分并保存,然后退出规则的匹配。,注意这里的规则是根据一般的下棋规律的一个总结,在实,际运行的时候,可以添加规则和对评分机制加以修正。,第,5,章 综合程序练习题,五子棋,主要算法提示(二),人工智能部分的搜索算法流程如下(以扩展两层为例):,根据棋盘信息,chessman1515,建立根结点,s0,(数据结构:,five_chesman,),并把,s0,压入堆栈中,扩展,s1=top(),;判断,s1-layer,是否等于,1,s1-layer,等于,1,,,push(s1),扩展,s2=top(),查看,s2-layer,是否,1,s2-layer!=-1,,计算此时棋盘得分,score,,并判断是否要更改上一层的极小值,s2-layer=-1,pop(),:判断是否更改极大值,,max_chess,指向得分最高的棋盘,如果,s1-layer=-1,表示搜索结束,返回最大棋盘信息,max_chess,第,5,章 综合程序练习题,搬运工,1,:问题描述,在一个四周有围墙的仓库的中,堆放着若干箱子、阻挡箱子前进的障碍物,以及标识出了箱子需要被推到的目标位置。游戏者通过观查分析,找到合适的策略,然后只能用推的方法把所有散落在场地中的箱子借助于空闲区间推到目标位置,即获得胜利;否则失败,2,:基本功能,场地元素定义与设计,、,箱子的搬运动作,、,提供一定数量的按键功能实现游戏者对搬运工的多种操作,3,:高级功能,提供多套场地,提供视听效果,智能识别游戏的终止,自动完成移动,第,5,章 综合程序练习题,搬运工,难点分析,墙壁,箱子,x,y,死角判定:这里举一个例子,如下图所示:,死角判定,第,5,章 综合程序练习题,搬运工,设计及实现要点,搬运工程序的总体结构,第,5,章 综合程序练习题,搬运工,主要数据结构提示,系统的组成元素主要包含外围墙壁、内部障碍物、箱子、搬运工。我们先建立一个虚拟的元素(不妨称之为容器),它用来将整个图形界面网格化,并记录各种图形元素的位置等属性。然后,再为各个图形元素建立相应的保存其特有信息的数据结构。,先定义两个基本结构,在后面也会用到:,typedef struct tagRect/*,矩形*,/,Point leftTop,rightButton;/*,矩形左上定点和右下定点*,/,Rect;,typedef struct tagPoint/*,直角坐标系点*,/,int x,y;,Point;,第,5,章 综合程序练习题,搬运工,主要数据结构提示,1)虚拟的容器结构体:,typedef struct tagContainer,Rect cRect;/*确定整个容器在屏幕上的坐标*/,int cBoardNM;/*N、M是事先设定的网格行数和列数*/,Container;,其中数组cBoard其取值代表各网格是何种图形元素:箱子、空格、障碍、目标位置,其它必要属性,可自行酌情添加。,第,5,章 综合程序练习题,搬运工,主要数据结构提示,2)搬运工和箱子的结构体:,由于墙壁、障碍物和箱子的目标位置都是固定不变的,它们的图形可以在初始化时一次性完成,而其位置则可保存在上面的Container中,下面是搬运工和箱子的结构体:,typedef struct tagObject,char*oImage;/*指向图像缓冲区的指针*/,size_t oImageSize;/*stddef.h中size_t 定义为unsigned,,这里表示图像大小*/,Point oLocation;/*记录对象在网格中的坐标*/,Object;,第,5,章 综合程序练习题,搬运工,主要算法提示,1,)搬运工游戏的图形界面中除了搬运工和箱子,都是固定元素,因此可以将整个场地网格化,对整个图形界面的管理简化为对各个网格的管理即可。,2,)对于搬运工和箱子的移动效果,可以直接在一个页面上(即无需使用换页机制)操作。,3,)对于智能识别和自动移动功能,只要根据网格的状态属性,(,即当前各网格是何种物体,),加以处理即可。,第,5,章 综合程序练习题,大富翁,1,:问题描述,本游戏基于双人游戏模式的简单版本。游戏在一个由城市、道路、及其他特殊建筑组成的地图上进行,游戏双方通过掷骰子获得的前进或后退步数不断地前进或后退,当落在可以购买空地的位置时,如果现金足够则可选择购买之;当落在自己已买下地产的位置时,如现金足够则可选择建设之;当落在对手地产的位置上时,则要支付相应的罚金;落在地图中某些特殊位置还会有特殊的惩罚或奖励。最后当一方现金为零时游戏结束,现金为零的一方失败,另一方获,现金为零的一方失败,另一方获胜。,2,:基本功能,游戏的环境地图构建,、,游戏状态显示,、,游戏阶段的输入只包含掷骰子及确定相关选项,3,:高级功能,提供更多的特殊地区,如旅馆、监狱、股票交易中心、银行,并为之设计相应的活动规则。,在特殊位置提供更多的活动内容,如获得几轮之内不用交罚款、可以夺取他人地产等特权。,提供游戏进度保存功能,第,5,章 综合程序练习题,大富翁,难点分析,本游戏的难点主要集中在图形处理和数据处理的简化,设计上。数据处理设计将在数据结构中提示,下面先提,供一个简化图形处理的方案。,由于实际活动的图形元素只有游戏者代表人物,其移,动只取决于当前位置和下一个位置。所以,实际编程时,只需要把游戏中各个位置的坐标从初始位置开始,按实,际到达顺序用一线性表来管理。每走一步就将线性表的,指针后移一位,就可取得下一个城市的位置。当指针越,过最后一位时,重新指到初始位置,进入下一轮循环。,第,5,章 综合程序练习题,大富翁,设计及实现要点,大富翁程序的总体结构,第,5,章 综合程序练习题,大富翁,主要数据结构提示(一),typedef struct tagCity,Point cCenter,;,/*,记录人物进入城市时,其图像左上角对应在当前图,形模式坐标系中的坐标*,/,int cSpecialEvent,;,/*,该城市的特殊地区、特殊位置;为了处理方便,,可自行定义一组描述这些地区和位置的宏定义*,/,City;,1,)城市和特殊地区的结构体:,前面提及的那个线性表就可以由,City,作为元素构成,这样只要在初始化时画出整个地图,然后将每个城市的,City,结构按“难点分析”中所说方法保存下来即可。,第,5,章 综合程序练习题,大富翁,主要数据结构提示(二),2,)人物的结构体:,typedef struct tagPeople,char*pImage,;,/*,指向人物图像缓冲区的指针*,/,char*pBackgroundImage,;,/*,指向被人物图像覆盖的图像缓 冲区的指针*,/,size_t pImageSize,;,/*,图像大小*,/,Point pCoordinate,;,/*,人物图像左上角坐标*,/,int pCash,;,/*,记录该人物的剩余现金*,/,int pStatus,;,/*,标示该人物的状态,即是处于可移动还是在医院状态中,当,pStatus,为,0,时可移动,正值表示住院,负值表示原地停留;绝对值为还需停留的天数*,/,People,;,状态栏和消息栏的管理比较简单,只需要随游戏进行更新相关信息就可以了。,第,5,章 综合程序练习题,大富翁,主要算法提示,通过位图在屏幕上显示出一个基本的环境地图、游戏双,方的人物形象、状态栏和消息栏。注意:由于画面比较,复杂,最好是调用位图或已转换成其它图像格式的文件,,否则单独绘制一个地图就会有较大的工作量。同时应,记录下各图形元素的位置,以供数据处理模块使用。开,始后轮流为每位游戏者提供一个前进的步数,游戏者到,达一个地方后,系统根据游戏规则,做出相应的判定并,调整其持有的现金数量。,第,5,章 综合程序练习题,赛车,1,:问题描述,这里所讲的赛车是基于平面第三视角的,即在一个平面的跑道上,由游戏者操控一辆赛车,与电脑控制的多台赛车比赛。游戏者能对赛车的操作有:向左、向右、加速、减速、停车。比赛中如果游戏者的赛车与别的赛车相撞,则其速度均减为最小,游戏者必须重新开始加速。游戏者如果第一个到达终点,则获胜,否则失败。本游戏的动画处理较为复杂,要求能够显示出各赛车前进的动态效果,以及一定的视听功能。,2,:基本功能,游戏环境、键盘控制赛车、视听效果、游戏控制、动画效果显示,3,:高级功能,高级视听效果,提供两人对阵游戏模式,提供不同的游戏关卡,不同关卡的赛车数目和速度都可选择。,第,5,章 综合程序练习题,赛车,难点分析,动画效果显示,刷新赛车位置时,先画出游戏者赛车,然后计算出其他赛车相对游戏者赛车的位置,如果在屏幕范围内则画出,否则不画。注意,相对位置只应计算在屏幕上的垂直高度,水平位置应保留在各赛车的结构体中。,为了方便作图,跑道最好使用同一种颜色,将赛车图像四周用这种颜色围上一圈,如宽度为两个像素点,这样每次移动两个像素点距离后的显示刷新只需直接对赛车图像进行一次,putimage,函数操作即可。用这方法可以避免图像闪烁现象。当然,更复杂的避免闪烁的方法是使用页交替法。不过使用页交替法时仍应尽量减少作图以使画面显示流畅。,第,5,章 综合程序练习题,赛车,设计及实现要点,初始化图形界面,读取游戏者输入,修改赛车位置参数,根据赛车参数刷新界面,重画色道,到达终点,是,否,退出系统并清理垃圾,赛车程序的总体结构,第,5,章 综合程序练习题,赛车,主要数据结构提示(一),typedef struct tagContainer/*,赛车场的容器,描述固定元素的位置*,/,Rect cRacingGround,;,/*,赛车区域矩形*,/,Rect cAutodrome,;,/*,赛车跑道矩形区*,/,Rect cColorStrip,;,/*,跑道两旁的色道矩形区*,/,Container,;,1,)赛车场的容器结构体:描述固定元素的位置,typedef struct tagColorStripe,unsigned csColorN,;,/*N,是事先设定的色道条数,该表记录各色道颜色*,/,int csStripeOff,;,/*,显示的最上面一条色道在,csColor,中的下标*,/,ColorStripe,;,2,)色道结构体:,第,5,章 综合程序练习题,赛车,主要数据结构提示(二),typedef struct tagRacingCar,char*rcImage,;,/*,指向赛车图像*,/,size_t rcImageSize,;,/*,赛车图像大小*,/,unsigned rcSpeed,;,/*,赛车速度*,/,unsigned rcDisplacement,;,/*,相对原点位移*,/,unsigned rcVertical,;,/*,水平位置*,/,Point rcAbosoluteCoordiante,;,/*,相对出发点的绝对距离即竖直位置*,/,int rcFlag,;,/*,标识赛车身份*,/,RacingCar,;,3,)赛车结构体:,注意,,rcAbosoluteCoordinate,最好只是游戏赛车使用,其它赛车的位置根据前面,提到的方法来计算出其各自位置,这样可以简化数据处理过程。,第,5,章 综合程序练习题,赛车,主要算法提示,为了数据处理的方便,采用直道作为赛车道,并以初始点作为原点。为了表现出赛车前进的效果,可以在车道两旁加上横向的颜色不同、相间排列的色道,然后将色道作周期性循环下移显示就可以实现动画效果。游戏中,始终保持游戏者赛车在屏幕上的垂直位置不变,这样,就可以将游戏者的赛车作为其他物体的参照,方便各辆赛车座标位置的换算。车道两旁的色道后移速度即为游戏者赛车的前进速度。其它赛车始终保持同一速度,并保存其各自的相对原点的距离,根据游戏者赛车相对原点距离就可算出其他赛车在当前屏幕中的位置。,第,5,章 综合程序练习题,坦克大战,1,:问题描述,游戏者操控一到两台坦克,抵抗电脑控制的多台坦克,保卫金鹰(特指一个游戏者需要保护的物体);双方通过火炮攻击对方,坦克被炮弹击中即被摧毁;对战双方如果还有在屏幕上活动的可用坦克,则在有坦克被摧毁后才能补充上来。游戏者坦克被全部摧毁或金鹰被摧毁则电脑方获胜,若电脑坦克被全部摧毁则游戏者获胜。,2,:基本功能,游戏场景,、,游戏者控制的和电脑控制的坦克的运动状况,、,游戏状态判别胜负,、,提供足够的按键实现游戏者对坦克的控制,3,:高级功能,视听效果,鼠标控制,电脑坦克智能化,第,5,章 综合程序练习题,坦克大战,难点分析,本游戏难点主要集中在对坦克自动化控制的算法上。对,于向固定目标前进的算法,可以先对,N*M,的网格做一次,宽度优先搜索(,BFS,),算法中注意判重,避免消耗过多,的搜索时间,这样可以在较短的时间内找出一条最短路,径。,由于游戏者坦克运动不确定性太高,为电脑坦克搜索一,条正确的攻击游戏者坦克的路径难度较高。,第,5,章 综合程序练习题,坦克大战,设计及实现要点,游戏是否结束,初始化图形界面,读取游戏者输入,开炮,并显示视听效果,根据当前数据移动坦克或不反应,电脑坦克按预先,设定做出相应反应,更新状态栏消息,游戏者选择开炮,游戏者选择移动,退出系统并清理垃圾,是,否,坦克大战程序的总体结构,第,5,章 综合程序练习题,坦克大战,主要数据结构提示(一),typedef struct tagContainer,Rect cRect;,/*,游戏框矩形区*,/,unsigned cBorderColor;/*,游戏框边界颜色*,/,unsigned cBackgroundColor;/*,游戏框背景颜色*,/,int cBoardNM;/*N,M,是事先定义的游戏框网格数*,/,/*cBoard,主要记录各网格是何种元素,作为坦克前进的依据*,/,Container;,1,)游戏框的结构体:,像前面讲述一样,固定的图形元素可以在初始化时一次性完成,其位置记录,在,Container,中即可。,第,5,章 综合程序练习题,坦克大战,主要数据结构提示(二),typedef struct tagTank,char*tImage;/*,指向坦克图像缓冲区的指针*,/,size_t tImageSize;/*,坦克图像大小*,/,Point tLocation;/*,坦克在网格中的坐标*,/,char tDirctionOffMAX_STEP;/*,坦克方向偏移数组,用以确定坦克路径,具体值自己确定*,/,char tFlag;/*,标识坦克身份*,/,Tank;,2,)坦克结构体:,另外,金鹰也可使用这一结构,只需用,tFlag,加以区别即可。,第,5,章 综合程序练习题,坦克大战,主要数据结构提示(三),typedef struct tagStatusBox,Rect sbRect;/*,对话框矩形区*,/,char*sbTitle;/*,对话框名*,/,char*sbStatusText;/*,消息状态文本*,/,unsigned sbBackgroundColor;/*,对话框背景色*,/,unsigned sbBorderColor;/*,对话框边界颜色*,/,StatusBox;,3,)基本对话框结构体(每个对话框只包含一类信息,这主要是为了从可扩展性考虑。同时,如果发现前期设计有疏漏,也便于更改):,如果对话框不多,可分别管理,如果较多,可以设计一个像游戏框(,Container,)那样的结构体来进行统一管理。,第,5,章 综合程序练习题,坦克大战,主要算法提示,对于坦克大战中的固定元素和对话框等只改动消息栏文,本的元素,可在初始化时统一输出到屏幕上,以后根据,需要改变对话框的消息文本。对可摧毁障碍的管理,使,用一个统一的过程,当某个单位网格状态改变时,调用,该过程即可。坦克的管理较为复杂,不过对于其移动,,也可使用一个统一的过程来管理,这个过程只接收当前,位置和下一步的偏移。,第,5,章 综合程序练习题,总结,通过以上大型程序的设计练习,可运用前几章讲述的高级程序设计思想和方法,使自己对复杂、综合性程序设计有一个全面的领会和把握,提高自身的设计能力。,另外,也希望能充分发挥自我能动性,在大型程序的内容分解、算法设计、人机界面、执行效率等方面进行较深入的创新性思考与个性化设计。,
    展开阅读全文

    开通VIP折扣优惠下载文档

    提示  咨信网声明:本文档由用户上传并分享,仅供学习交流、研究之用,未经授权,严禁复制、发行、汇编、翻译或网络传播等,侵权必究。

    咨信网小贴示:
    1、浏览或下载可查看了解,请点击【咨信网告知】。
    2、下载文件中如有侵权或不适当内容,将立即纠正。
    3、如果因为网速或其他原因下载失败请重新下载,重复下载[60天内]不扣币。
    4、开具发票登录电脑端申请,请点击【索取发票】。

    咨信网客服组:【微信客服】

    自信AI创作助手
    关于本文
    本文标题:第5章综合程序练习题.ppt
    链接地址:https://www.zixin.com.cn/doc/14647507.html

    Copyright ©2010-2026   All Rights Reserved  宁波自信网络信息技术有限公司 版权所有   |  客服电话:0574-28810668    微信客服:咨信网客服    投诉电话:18658249818   

    违法和不良信息举报邮箱:help@zixin.com.cn    文档合作和网站合作邮箱:fuwu@zixin.com.cn    意见反馈和侵权处理邮箱:1219186828@qq.com   | 证照中心

    12321jubao.png12321网络举报中心 电话:010-12321  jubao.png中国互联网举报中心 电话:12377   gongan.png浙公网安备33021202000488号  icp.png浙ICP备2021020529号-1 浙B2-20240490   


    关注我们 :微信公众号  抖音  微博  LOFTER               

    自信网络  |  ZixinNetwork