收藏 分销(赏)

综合程序练习题.pptx

上传人:快乐****生活 文档编号:4222681 上传时间:2024-08-26 格式:PPTX 页数:66 大小:283.84KB
下载 相关 举报
综合程序练习题.pptx_第1页
第1页 / 共66页
综合程序练习题.pptx_第2页
第2页 / 共66页
综合程序练习题.pptx_第3页
第3页 / 共66页
综合程序练习题.pptx_第4页
第4页 / 共66页
综合程序练习题.pptx_第5页
第5页 / 共66页
点击查看更多>>
资源描述

1、 第第5 5章章 综合程序练习题综合程序练习题 主要内容主要内容大型程序设计的要求9个大型程序设计题目分析第第5 5章章 综合程序练习题综合程序练习题大型程序设计的要求大型程序设计的要求题目要求:每道题都给出了问题的描述、基本要求、高级要求、难点分析、主要数据结构及主要算法提示等,以便供大家选择练习。其中“基本要求”和“高级功能”是两个不同层次的功能要求。第第5 5章章 综合程序练习题综合程序练习题 主要内容主要内容大型程序设计的要求9个大型程序设计题目分析第第5 5章章 综合程序练习题综合程序练习题大型程序设计题目分析:z1 打字练习打字练习z2 电子琴电子琴z3 简易画图板简易画图板z4

2、贪吃蛇贪吃蛇z5 五子棋五子棋z6 搬运工搬运工z7 大富翁大富翁z8 赛车赛车z9 坦克大战坦克大战1问题描述2基本功能3高级功能4难点分析5程序总体结构6主要数据结构提示7主要算法提示第第5 5章章 综合程序练习题综合程序练习题打字练习打字练习1:问题描述:问题描述 打字练习是一个非常有用的小程序,电脑初学者可打字练习是一个非常有用的小程序,电脑初学者可以借助它来熟悉键位,新手可以利用它来提高打字速以借助它来熟悉键位,新手可以利用它来提高打字速度。度。2:基本功能:基本功能 键位练习、键位练习、单词练习、文本练习单词练习、文本练习3:高级功能:高级功能 增加音效、暂停功能、继续上次未完成的

3、练习增加音效、暂停功能、继续上次未完成的练习第第5 5章章 综合程序练习题综合程序练习题打字练习打字练习难点分析难点分析1)虚拟键盘由于有很多按键所以绘制时会比较)虚拟键盘由于有很多按键所以绘制时会比较繁琐。至于如何反像显示一个按键,我们会在繁琐。至于如何反像显示一个按键,我们会在在算法提示部分给出。在算法提示部分给出。2)键位练习部分由于有些键是没有对应的)键位练习部分由于有些键是没有对应的ASCII码的,所以我们无法使用码的,所以我们无法使用ASCII码来识别码来识别用户的按键,应当使用键盘码来识别它。函数用户的按键,应当使用键盘码来识别它。函数bioskey可以获得按键的键盘码。可以获得

4、按键的键盘码。第第5 5章章 综合程序练习题综合程序练习题打字练习打字练习设计及实现要点设计及实现要点图形模式初始化选择练习模式键位练习单词练习文本练习结束清理模块打字练习程序的总体结构打字练习程序的总体结构第第5 5章章 综合程序练习题综合程序练习题打字练习打字练习主要数据结构分析(一)主要数据结构分析(一)1)strucrect结构代表屏幕上的一个矩形区域。它的结构如下:struct rect int left,top;/*矩形左上角的坐标值*/int right,bottom;/*矩形右下角的坐标值*/第第5 5章章 综合程序练习题综合程序练习题打字练习打字练习主要数据结构分析(二)主要

5、数据结构分析(二)2)在键位练习的部分,由于要经常对虚拟键盘上的某个键进行绘制,为了绘制时的方便我们可以使用一个结构来表示虚拟键盘上的每个按键。struct key struct rect keyRect;int keyNum;char keyName10;;keyRect就代表了按键在屏幕上占据的一个矩形区域。keyNum是按键的键盘码。keyName是按键的名称,绘制时显示在按键上。第第5 5章章 综合程序练习题综合程序练习题打字练习打字练习主要数据结构分析(三)主要数据结构分析(三)3)使用structkeykeyArrayMAXKEY数组来保存所有要绘制的按键struct key ke

6、yArrayMAXKEY;第第5 5章章 综合程序练习题综合程序练习题打字练习打字练习主要算法提示主要算法提示1)随机产生按键:通过产生一个随机数作为索引值访问keyArray数组,来随机产生需要用户输入的按键。然后将对应的按键反像显示。2)反像显示一个按键:假设R1是我们要反像显示的按键在屏幕上占据的一个矩形区域。(注:R1是一个structrect结构的对象,R1的值可以从keyArray数组中获得。3)getimage的作用是将一个矩形区域的图像复制到buff中,而putimage的作用是将buff中的图像输出到屏幕中的某个位置。而参数NOT_PUT的作用是告诉putimage在输出时将

7、图像反像显示。第第5 5章章 综合程序练习题综合程序练习题电子琴电子琴1:问题描述:问题描述 设计一个键盘电子琴,通过键盘输入来模拟敲击琴键,并发出对应的琴声,使用户能在PC机上弹奏电子琴。现要求利用Turbo C 2.0来实现该游戏。2:基本功能:基本功能图形界面显示。界面分三部分,背景色为蓝色。菜单功能电子琴。系统分3种模式:实时模式、播放模式、编辑模式。3:高级功能:高级功能界面显示波形图、菜单帮助快捷键、鼠标功能第第5 5章章 综合程序练习题综合程序练习题电子琴电子琴难点分析难点分析1)曲目文件的格式设计。业界广泛采用midi文件,但程序员新接触时,需要了解它的格式等技术,解码、编码也

8、都存在难度。可自行设计一种格式,记录键盘按键及时间间隔。这样编码和解码都很简单。2)图形描绘。这是本程序最主要的工作。在考虑如何设计出一个美观的图形时,好要考虑其它很多方面:背景色、菜单颜色、菜单大小、琴键颜色、琴键的形状、显示琴键被按下、显示波形图等。3)响应鼠标事件。在DOS环境下响应鼠标操作比较有难度。第第5 5章章 综合程序练习题综合程序练习题电子琴电子琴设计及实现要点设计及实现要点界面初始化模块结束清理模块播放模块发声模块击键处理模块实时弹奏模块曲目编辑模块电子琴程序的总体结构电子琴程序的总体结构第第5 5章章 综合程序练习题综合程序练习题电子琴电子琴主要数据结构分析(一)主要数据结

9、构分析(一)/*系统状态*/enum sytem_status system_status_normal,system_status_paused/*系统模式*/enum sytem_modul system_modul_intime,system_status_play,system_status_edit/*定义颜色枚举*/typedef enum colorint blue,int red,.COLOR;1)定义系统常量第第5 5章章 综合程序练习题综合程序练习题电子琴电子琴主要数据结构分析(二)主要数据结构分析(二)#define menu_item_height /*菜单项的高度*/

10、#define menu_item_width /*菜单项的宽度*/#define menu_item_color /*菜单项的颜色*/#define menu_group_distance /*菜单组间间隔*/typedef struct ctrlKeychar*name;int firstkey;int secondkey;CTRL_KEY;2)菜单的一些常量定义 3)定义控制键。一般是ctrl/alt和另外一个键的组合第第5 5章章 综合程序练习题综合程序练习题电子琴电子琴主要数据结构分析(三)主要数据结构分析(三)typedef struct menu_item_nodechar*na

11、me;CTRL_KEY hotkey;menu_item_node*next;MENU_ITEM;#define menu_item_list MENU_ITEMtypedef struct menu_groupchar*name;CTRL_KEY hotkey;menu_item_list itemList;/*文件菜单组下有几个菜单项*/MENU_GROUP;4)一个菜单项5)定义菜单组第第5 5章章 综合程序练习题综合程序练习题电子琴电子琴主要数据结构分析(四)主要数据结构分析(四)typedef struct rectangle POSITION up_start,/上方的起始位置PO

12、SITION up_end,/上方的结束位置POSITION down_start,/下方的起始位置POSITION down_start /下方的结束位置 RECTANGLE;typedef struct coordinateint x;int y;POSITION;6)定义某个点的坐标7)定义一个形状的四个位置,注意边线均为直线第第5 5章章 综合程序练习题综合程序练习题电子琴电子琴主要数据结构分析(五)主要数据结构分析(五)typedef struct key_record int keynum,int timeintervalKEY_RECORD;typedef struct grag

13、hRECTANGLE shape,COLOR frameColor,COLOR fillColorGRAGH;8)定义一个图形,包括形状、边框色、填充色9)定义一个击键记录第第5 5章章 综合程序练习题综合程序练习题电子琴电子琴主要数据结构分析(六)主要数据结构分析(六)typedef struct configCOLOR background,COLOR hightlight,CONFIG;typedef struct key_record_list_nodeKEY_RECORD key,key_record_list_node*nextLIST_NODE;10)记录所有击键11)记录配置信

14、息,包括背景色、高亮色、菜单项的长宽等、键盘对应图的位置、波形图的文职、曲目列表的位置、菜单组信息等,自行补充:第第5 5章章 综合程序练习题综合程序练习题电子琴电子琴主要算法提示主要算法提示参考以下几个主要函数的定义:初始化函数:初始化全局配置信息intinitConfig(CONFIG*pConfig);描绘界面:此函数可在初始化界面时用,也可在用户设置了选项后重新描绘界面时调用intpaintFrame(CONFIG*pConfig);画一个图形intpaintShape(GRAGH*pShape);在指定位置打一个指定大小的字intpaintChar(GRAGH*pShape,char

15、*name);一些大的处理函数,如处理新建文件,自行补充intonNewOpen();第第5 5章章 综合程序练习题综合程序练习题简易画图板简易画图板1:问题描述:问题描述 简易画图板是一个简单的绘图工具,它提供了一些基本的画图功能。界面由工具栏、调色板和绘图区组成。2:基本功能:基本功能绘制直线、矩形、椭圆、圆、橡皮擦、填充绘制直线、矩形、椭圆、圆、橡皮擦、填充3:高级功能:高级功能支持对选定图像中的一个矩形区可以将绘制的图案保存为16色的BMP文件。可以打开一幅16色的BMP图片进行修改。第第5 5章章 综合程序练习题综合程序练习题简易画图板简易画图板难点分析难点分析1)填充功能。虽然Tc

16、图形库中有填充函数floodfill,但是这个填充函数不符合我们的要求。因为这个填充函数在调用时除了要指定填充区域中的一点,还需要指定要填充的区域边界的颜色,获取图像边界颜色的操作对于用户来说是比较麻烦的。此外,我们希望填充区域的边界可以是不同颜色的。所以,需要设计自己的填充函数。2)BMP文件的打开和保存。必须了解BMP文件的结构,以知道如何从文件中读出需要的数据以及如何将数据保存到bmp文件中。第第5 5章章 综合程序练习题综合程序练习题简易画图板简易画图板设计及实现要点设计及实现要点界面初始化模块图像绘制模块颜色选择模块形状选择模块结束清理模块图像保存模块简易画图板程序的总体结构简易画图

17、板程序的总体结构第第5 5章章 综合程序练习题综合程序练习题简易画图板简易画图板主要算法提示主要算法提示首先由用户指定填充区域中的任一点,以该点作为种子点,然后分别向上下左右四个方向检查该点的相邻点。如果这些点和种子点的颜色相同,则填充它,否则,就视为边界点。然后再以那些检测到的非边界点作为种子点,以同样的方式检查它们的相邻点。这样不断的检测、填充就可以将区域填充满。推荐使用队列来实现一个非递归的算法。非递归的填充算法:a、将第一个种子点放入队列b、当队列非空b1、从队列中取出一点b2、将该点置为填充色b3、分别检查上下左右四点,如果是非边界点则将其放入队列中c、算法结束第第5 5章章 综合程

18、序练习题综合程序练习题贪吃蛇贪吃蛇1:问题描述:问题描述 贪吃蛇游戏是一个深受人们喜欢的游戏:一条蛇在密闭的围墙内,在围墙内随机出现食物,通过按键控制蛇向上下左右四个方向移动,蛇撞到食物,则食物被吃掉,蛇的身体增加一节。如果蛇在移动过程中,撞到墙壁或身体交叉(蛇头撞到自己的身体)游戏结束。现要求利用Turbo C 2.0来实现该游戏。2:基本功能:基本功能提供图形界面、键盘控制游戏、计分机制、结束判断提供图形界面、键盘控制游戏、计分机制、结束判断3:高级功能:高级功能暂停功能:能随时通过按键来暂停游戏,再按一次则继续游戏。速度调节功能奖励机制音效功能第第5 5章章 综合程序练习题综合程序练习题

19、贪吃蛇贪吃蛇难点分析难点分析1)表示蛇的图形以及蛇的移动。2)检测蛇有无撞到食物、围墙或是自己的身体。3)食物的随机产生。4)蛇的移动速度调节。5)奖励食物的定时机制。第第5 5章章 综合程序练习题综合程序练习题贪吃蛇贪吃蛇设计及实现要点设计及实现要点场景初始化模块蛇移动模块键盘处理模块碰撞检测模块定时模块游戏结束清理模块记分模块贪吃蛇程序的总体结构贪吃蛇程序的总体结构第第5 5章章 综合程序练习题综合程序练习题贪吃蛇贪吃蛇主要数据结构提示(一)主要数据结构提示(一)char GameBoard ROWCOL;/*游戏板所有单元的坐标*/enum UnitStateFREE,BOARDER,S

20、NAKE,FOOD,BONUS;enum DirectionLEFT,RIGHT,UP,DOWN;1)游戏场景用一个二维数组表示2)游戏场景内各单元的状态用枚举类型来表示3)移动方向利用枚举类型来表示第第5 5章章 综合程序练习题综合程序练习题贪吃蛇贪吃蛇主要数据结构提示(二)主要数据结构提示(二)struct Food int x;int y;int die;/*食物是否已经被吃*/int isBonus;/*是否为奖励食物*/;struct SnakeNode int x;int y;struct SnakeNode*pre;struct SnakeNode*next;4)利用结构体来表示

21、蛇身体的一节,最后用循环链表来表示整条蛇5)食物(包括奖励食物)用结构体来表示第第5 5章章 综合程序练习题综合程序练习题贪吃蛇贪吃蛇主要算法提示主要算法提示碰撞检测模块:蛇移动模块:在程序中定义循环链表来表示蛇,并记录蛇头指针以及蛇尾指针、当前移动方向。若有方向按键信息:a1.按键方向跟当前方向相同或是相反,则不做处理;a2.否则将当前方向设置为新的方向;按当前方向得到蛇头的下一位置;对该位置进行碰撞检测,判断该位置是什么状态c1.若是蛇身和墙壁,跳到步骤e;c2.若是空白,则将蛇尾设为蛇头,将倒数第二节设为蛇尾,更新蛇头的位置为当前的新位置。界面上就把当前最新位置用蛇的颜色画上,并把原蛇尾

22、用背景色擦除。c3.若是食物,则新增加当前位置做为蛇头,蛇尾不变。利用记分模块更新分数。并再重新随机产生食物。返回a做循环;游戏结束第第5 5章章 综合程序练习题综合程序练习题五子棋五子棋1:问题描述:问题描述z五子棋基本规则:棋盘上形成横向、竖向、斜向的连续的相同颜色的五个棋子称为“五连”。黑白双方先在棋盘上形成五连的一方为胜。若对局双方均认为不可能形成五连或是剩余棋盘空间已不足以形成五连则为和棋。下棋过程中不考虑各种禁手规则。2:基本功能:基本功能提供图形界面、键盘操作、人人对战、支持某方先下、棋盘15*15,显示网格线,黑白棋子、当前光标所在;显示当前执棋方3:高级功能:高级功能支持人机

23、对战,显示人机对子情况和胜负判别 悔棋功能音效功能第第5 5章章 综合程序练习题综合程序练习题五子棋五子棋难点分析难点分析1)胜负判别2)悔棋功能3)人机对战的人工智能部分五子棋的人机对战是一个典型的博弈问题。博弈问题一般可用极大-极小法和-法求解(读者可找相关资料,一般人工智能或博弈论教材中会涉及这些内容)。而即便是用-法,五子棋的搜索空间还是相当庞大。第第5 5章章 综合程序练习题综合程序练习题五子棋五子棋设计及实现要点设计及实现要点游戏初始化模块主循环控制模块键盘处理模块胜负判别模块人工智能模块游戏结束清理模块五子棋程序的总体结构五子棋程序的总体结构第第5 5章章 综合程序练习题综合程序

24、练习题五子棋五子棋主要数据结构提示(一)主要数据结构提示(一)1)棋盘用15*15的二维数组表示,数组的每一个元素对应棋盘上的一个交叉点,用0表示空位、1代表玩家1的子、2代表玩家2的子:char ChessBoard1515;第第5 5章章 综合程序练习题综合程序练习题五子棋五子棋主要数据结构提示(二)主要数据结构提示(二)2)用于搜索过程的结构体:typedef struct five_chess*point;struct five_chess int x;int y;int layer;int value;int score;int chessLENGTHLENGTH;int recor

25、dLENGTHLENGTH;其中,x,y表示在某个位置上扩展出来的新节点,layer是表示第几层扩展,用于控制扩展深度。value表示该点上极大极小值,score表示叶子节点的得分,用于推算父辈节点的value,chess这个二维数组表示扩展出来的棋盘信息,record记录在x、y点上扩展过的节点,如果没有扩展record中对应某个值为0。如果record中没有可以扩展的节点,那么该层扩展结束,返回一个特定值。第第5 5章章 综合程序练习题综合程序练习题五子棋五子棋主要算法提示(一)主要算法提示(一)对棋盘的评分算法。评估一个棋盘的分数,主要通过扫描整个棋盘,对每个点评分。对某个点上评分从四个

26、方向(角度分别为0、45、90、135的四个方向)分别统计,进而累积该点总分,最后得到整个棋盘的分数。实际上对当前的局面按照下面规则的顺序进行比较,如果满足某一条规则的话,就给该局面打分并保存,然后退出规则的匹配。注意这里的规则是根据一般的下棋规律的一个总结,在实际运行的时候,可以添加规则和对评分机制加以修正。第第5 5章章 综合程序练习题综合程序练习题五子棋五子棋主要算法提示(二)主要算法提示(二)人工智能部分的搜索算法流程如下(以扩展两层为例):根据棋盘信息chessman1515建立根结点s0(数据结构:five_chesman),并把s0压入堆栈中扩展s1=top();判断s1-lay

27、er是否等于1s1-layer等于1,push(s1),扩展s2=top(),查看s2-layer是否1s2-layer!=-1,计算此时棋盘得分score,并判断是否要更改上一层的极小值s2-layer=-1,pop():判断是否更改极大值,max_chess指向得分最高的棋盘如果s1-layer=-1,表示搜索结束,返回最大棋盘信息max_chess第第5 5章章 综合程序练习题综合程序练习题搬运工搬运工1:问题描述:问题描述 在一个四周有围墙的仓库的中,堆放着若干箱子、阻挡箱子前进的障碍物,以及标识出了箱子需要被推到的目标位置。游戏者通过观查分析,找到合适的策略,然后只能用推的方法把所有

28、散落在场地中的箱子借助于空闲区间推到目标位置,即获得胜利;否则失败2:基本功能:基本功能场场地地元元素素定定义义与与设设计计、箱箱子子的的搬搬运运动动作作、提提供供一一定定数数量量的的按按键键功功能能实实现现游戏者对搬运工的多种操作游戏者对搬运工的多种操作 3:高级功能:高级功能提供多套场地 提供视听效果智能识别游戏的终止自动完成移动第第5 5章章 综合程序练习题综合程序练习题搬运工搬运工难点分析难点分析墙壁箱子xy死角判定:这里举一个例子,如下图所示:死角判定死角判定第第5 5章章 综合程序练习题综合程序练习题搬运工搬运工设计及实现要点设计及实现要点搬运工程序的总体结构搬运工程序的总体结构第

29、第5 5章章 综合程序练习题综合程序练习题搬运工搬运工主要数据结构提示主要数据结构提示系统的组成元素主要包含外围墙壁、内部障碍物、箱子、搬运工。我们先建立一个虚拟的元素(不妨称之为容器),它用来将整个图形界面网格化,并记录各种图形元素的位置等属性。然后,再为各个图形元素建立相应的保存其特有信息的数据结构。先定义两个基本结构,在后面也会用到:typedef struct tagRect/*矩形*/Point leftTop,rightButton;/*矩形左上定点和右下定点*/Rect;typedef struct tagPoint/*直角坐标系点*/int x,y;Point;第第5 5章章

30、综合程序练习题综合程序练习题搬运工搬运工主要数据结构提示主要数据结构提示1)虚拟的容器结构体:typedefstructtagContainerRectcRect;/*确定整个容器在屏幕上的坐标*/intcBoardNM;/*N、M是事先设定的网格行数和列数*/Container;其中数组cBoard其取值代表各网格是何种图形元素:箱子、空格、障碍、目标位置,其它必要属性,可自行酌情添加。第第5 5章章 综合程序练习题综合程序练习题搬运工搬运工主要数据结构提示主要数据结构提示2)搬运工和箱子的结构体:由于墙壁、障碍物和箱子的目标位置都是固定不变的,它们的图形可以在初始化时一次性完成,而其位置则

31、可保存在上面的Container中,下面是搬运工和箱子的结构体:typedefstructtagObjectchar*oImage;/*指向图像缓冲区的指针*/size_toImageSize;/*stddef.h中size_t定义为unsigned,这里表示图像大小*/PointoLocation;/*记录对象在网格中的坐标*/Object;第第5 5章章 综合程序练习题综合程序练习题搬运工搬运工主要算法提示主要算法提示1)搬运工游戏的图形界面中除了搬运工和箱子,都是固定元素,因此可以将整个场地网格化,对整个图形界面的管理简化为对各个网格的管理即可。2)对于搬运工和箱子的移动效果,可以直接在

32、一个页面上(即无需使用换页机制)操作。3)对于智能识别和自动移动功能,只要根据网格的状态属性(即当前各网格是何种物体)加以处理即可。第第5 5章章 综合程序练习题综合程序练习题大富翁大富翁1:问题描述:问题描述z本游戏基于双人游戏模式的简单版本。游戏在一个由城市、道路、及其他特殊建筑组成的地图上进行,游戏双方通过掷骰子获得的前进或后退步数不断地前进或后退,当落在可以购买空地的位置时,如果现金足够则可选择购买之;当落在自己已买下地产的位置时,如现金足够则可选择建设之;当落在对手地产的位置上时,则要支付相应的罚金;落在地图中某些特殊位置还会有特殊的惩罚或奖励。最后当一方现金为零时游戏结束,现金为零

33、的一方失败,另一方获,现金为零的一方失败,另一方获胜。2:基本功能:基本功能游戏的环境地图构建、游戏状态显示、游戏阶段的输入只包含掷骰子及确定相关选项 3:高级功能:高级功能提供更多的特殊地区,如旅馆、监狱、股票交易中心、银行,并为之设计相应的活动规则。在特殊位置提供更多的活动内容,如获得几轮之内不用交罚款、可以夺取他人地产等特权。提供游戏进度保存功能 第第5 5章章 综合程序练习题综合程序练习题大富翁大富翁难点分析难点分析本游戏的难点主要集中在图形处理和数据处理的简化设计上。数据处理设计将在数据结构中提示,下面先提供一个简化图形处理的方案。由于实际活动的图形元素只有游戏者代表人物,其移动只取

34、决于当前位置和下一个位置。所以,实际编程时只需要把游戏中各个位置的坐标从初始位置开始,按实际到达顺序用一线性表来管理。每走一步就将线性表的指针后移一位,就可取得下一个城市的位置。当指针越过最后一位时,重新指到初始位置,进入下一轮循环。第第5 5章章 综合程序练习题综合程序练习题大富翁大富翁设计及实现要点设计及实现要点大富翁程序的总体结构大富翁程序的总体结构第第5 5章章 综合程序练习题综合程序练习题大富翁大富翁主要数据结构提示(一)主要数据结构提示(一)typedef struct tagCity Point cCenter;/*记录人物进入城市时,其图像左上角对应在当前图 形模式坐标系中的坐

35、标*/int cSpecialEvent;/*该城市的特殊地区、特殊位置;为了处理方便,可自行定义一组描述这些地区和位置的宏定义*/City;1)城市和特殊地区的结构体:前面提及的那个线性表就可以由City作为元素构成,这样只要在初始化时画出整个地图,然后将每个城市的City结构按“难点分析”中所说方法保存下来即可。第第5 5章章 综合程序练习题综合程序练习题大富翁大富翁主要数据结构提示(二)主要数据结构提示(二)2)人物的结构体:typedef struct tagPeoplechar*pImage;/*指向人物图像缓冲区的指针*/char*pBackgroundImage;/*指向被人物图

36、像覆盖的图像缓 冲区的指针*/size_t pImageSize;/*图像大小*/Point pCoordinate;/*人物图像左上角坐标*/int pCash;/*记录该人物的剩余现金*/int pStatus;/*标示该人物的状态,即是处于可移动还是在医院状态中,当pStatus为0时可移动,正值表示住院,负值表示原地停留;绝对值为还需停留的天数*/People;状态栏和消息栏的管理比较简单,只需要随游戏进行更新相关信息就可以了。第第5 5章章 综合程序练习题综合程序练习题大富翁大富翁主要算法提示主要算法提示通过位图在屏幕上显示出一个基本的环境地图、游戏双方的人物形象、状态栏和消息栏。注

37、意:由于画面比较复杂,最好是调用位图或已转换成其它图像格式的文件,否则单独绘制一个地图就会有较大的工作量。同时应记录下各图形元素的位置,以供数据处理模块使用。开始后轮流为每位游戏者提供一个前进的步数,游戏者到达一个地方后,系统根据游戏规则,做出相应的判定并调整其持有的现金数量。第第5 5章章 综合程序练习题综合程序练习题赛车赛车1:问题描述:问题描述z这里所讲的赛车是基于平面第三视角的,即在一个平面的跑道上,由游戏者操控一辆赛车,与电脑控制的多台赛车比赛。游戏者能对赛车的操作有:向左、向右、加速、减速、停车。比赛中如果游戏者的赛车与别的赛车相撞,则其速度均减为最小,游戏者必须重新开始加速。游戏

38、者如果第一个到达终点,则获胜,否则失败。本游戏的动画处理较为复杂,要求能够显示出各赛车前进的动态效果,以及一定的视听功能。2:基本功能:基本功能游戏环境、键盘控制赛车、视听效果、游戏控制、动画效果显示3:高级功能:高级功能高级视听效果 提供两人对阵游戏模式提供不同的游戏关卡,不同关卡的赛车数目和速度都可选择。第第5 5章章 综合程序练习题综合程序练习题赛车赛车难点分析难点分析动画效果显示刷新赛车位置时,先画出游戏者赛车,然后计算出其他赛车相对游戏者赛车的位置,如果在屏幕范围内则画出,否则不画。注意,相对位置只应计算在屏幕上的垂直高度,水平位置应保留在各赛车的结构体中。为了方便作图,跑道最好使用

39、同一种颜色,将赛车图像四周用这种颜色围上一圈,如宽度为两个像素点,这样每次移动两个像素点距离后的显示刷新只需直接对赛车图像进行一次putimage函数操作即可。用这方法可以避免图像闪烁现象。当然,更复杂的避免闪烁的方法是使用页交替法。不过使用页交替法时仍应尽量减少作图以使画面显示流畅。第第5 5章章 综合程序练习题综合程序练习题赛车赛车设计及实现要点设计及实现要点初始化图形界面读取游戏者输入修改赛车位置参数根据赛车参数刷新界面,重画色道到达终点是否退出系统并清理垃圾赛车程序的总体结构赛车程序的总体结构第第5 5章章 综合程序练习题综合程序练习题赛车赛车主要数据结构提示(一)主要数据结构提示(一

40、)typedef struct tagContainer/*赛车场的容器,描述固定元素的位置*/Rect cRacingGround;/*赛车区域矩形*/Rect cAutodrome;/*赛车跑道矩形区*/Rect cColorStrip;/*跑道两旁的色道矩形区*/Container;1)赛车场的容器结构体:描述固定元素的位置typedef struct tagColorStripeunsigned csColorN;/*N是事先设定的色道条数,该表记录各色道颜色*/int csStripeOff;/*显示的最上面一条色道在csColor中的下标*/ColorStripe;2)色道结构体:

41、第第5 5章章 综合程序练习题综合程序练习题赛车赛车主要数据结构提示(二)主要数据结构提示(二)typedef struct tagRacingCarchar*rcImage;/*指向赛车图像*/size_t rcImageSize;/*赛车图像大小*/unsigned rcSpeed;/*赛车速度*/unsigned rcDisplacement;/*相对原点位移*/unsigned rcVertical;/*水平位置*/Point rcAbosoluteCoordiante;/*相对出发点的绝对距离即竖直位置*/int rcFlag;/*标识赛车身份*/RacingCar;3)赛车结构体:

42、注意,rcAbosoluteCoordinate最好只是游戏赛车使用,其它赛车的位置根据前面提到的方法来计算出其各自位置,这样可以简化数据处理过程。第第5 5章章 综合程序练习题综合程序练习题赛车赛车主要算法提示主要算法提示为了数据处理的方便,采用直道作为赛车道,并以初始点作为原点。为了表现出赛车前进的效果,可以在车道两旁加上横向的颜色不同、相间排列的色道,然后将色道作周期性循环下移显示就可以实现动画效果。游戏中,始终保持游戏者赛车在屏幕上的垂直位置不变,这样,就可以将游戏者的赛车作为其他物体的参照,方便各辆赛车座标位置的换算。车道两旁的色道后移速度即为游戏者赛车的前进速度。其它赛车始终保持同

43、一速度,并保存其各自的相对原点的距离,根据游戏者赛车相对原点距离就可算出其他赛车在当前屏幕中的位置。第第5 5章章 综合程序练习题综合程序练习题坦克大战坦克大战1:问题描述:问题描述z游戏者操控一到两台坦克,抵抗电脑控制的多台坦克,保卫金鹰(特指一个游戏者需要保护的物体);双方通过火炮攻击对方,坦克被炮弹击中即被摧毁;对战双方如果还有在屏幕上活动的可用坦克,则在有坦克被摧毁后才能补充上来。游戏者坦克被全部摧毁或金鹰被摧毁则电脑方获胜,若电脑坦克被全部摧毁则游戏者获胜。2:基本功能:基本功能游戏场景、游戏者控制的和电脑控制的坦克的运动状况、游戏状态判别胜负、提供足够的按键实现游戏者对坦克的控制

44、3:高级功能:高级功能视听效果鼠标控制电脑坦克智能化第第5 5章章 综合程序练习题综合程序练习题坦克大战坦克大战难点分析难点分析本游戏难点主要集中在对坦克自动化控制的算法上。对于向固定目标前进的算法,可以先对N*M的网格做一次宽度优先搜索(BFS),算法中注意判重,避免消耗过多的搜索时间,这样可以在较短的时间内找出一条最短路径。由于游戏者坦克运动不确定性太高,为电脑坦克搜索一条正确的攻击游戏者坦克的路径难度较高。第第5 5章章 综合程序练习题综合程序练习题坦克大战坦克大战设计及实现要点设计及实现要点游戏是否结束初始化图形界面读取游戏者输入开炮,并显示视听效果根据当前数据移动坦克或不反应电脑坦克

45、按预先设定做出相应反应更新状态栏消息游戏者选择开炮游戏者选择移动退出系统并清理垃圾是否坦克大战程序的总体结构坦克大战程序的总体结构第第5 5章章 综合程序练习题综合程序练习题坦克大战坦克大战主要数据结构提示(一)主要数据结构提示(一)typedef struct tagContainerRect cRect;/*游戏框矩形区*/unsigned cBorderColor;/*游戏框边界颜色*/unsigned cBackgroundColor;/*游戏框背景颜色*/int cBoardNM;/*N,M是事先定义的游戏框网格数*/*cBoard主要记录各网格是何种元素,作为坦克前进的依据*/Co

46、ntainer;1)游戏框的结构体:像前面讲述一样,固定的图形元素可以在初始化时一次性完成,其位置记录在Container中即可。第第5 5章章 综合程序练习题综合程序练习题坦克大战坦克大战主要数据结构提示(二)主要数据结构提示(二)typedef struct tagTankchar*tImage;/*指向坦克图像缓冲区的指针*/size_t tImageSize;/*坦克图像大小*/Point tLocation;/*坦克在网格中的坐标*/char tDirctionOffMAX_STEP;/*坦克方向偏移数组,用以确定坦克路径,具体值自己确定*/char tFlag;/*标识坦克身份*/

47、Tank;2)坦克结构体:另外,金鹰也可使用这一结构,只需用tFlag加以区别即可。第第5 5章章 综合程序练习题综合程序练习题坦克大战坦克大战主要数据结构提示(三)主要数据结构提示(三)typedef struct tagStatusBoxRect sbRect;/*对话框矩形区*/char*sbTitle;/*对话框名*/char*sbStatusText;/*消息状态文本*/unsigned sbBackgroundColor;/*对话框背景色*/unsigned sbBorderColor;/*对话框边界颜色*/StatusBox;3)基本对话框结构体(每个对话框只包含一类信息,这主要

48、是为了从可扩展性考虑。同时,如果发现前期设计有疏漏,也便于更改):如果对话框不多,可分别管理,如果较多,可以设计一个像游戏框(Container)那样的结构体来进行统一管理。第第5 5章章 综合程序练习题综合程序练习题坦克大战坦克大战主要算法提示主要算法提示对于坦克大战中的固定元素和对话框等只改动消息栏文本的元素,可在初始化时统一输出到屏幕上,以后根据需要改变对话框的消息文本。对可摧毁障碍的管理,使用一个统一的过程,当某个单位网格状态改变时,调用该过程即可。坦克的管理较为复杂,不过对于其移动,也可使用一个统一的过程来管理,这个过程只接收当前位置和下一步的偏移。第第5 5章章 综合程序练习题综合

49、程序练习题总结总结 通过以上大型程序的设计练习,可运用前几章讲述的高级程序设计思想和方法,使自己对复杂、综合性程序设计有一个全面的领会和把握,提高自身的设计能力。另外,也希望能充分发挥自我能动性,在大型程序的内容分解、算法设计、人机界面、执行效率等方面进行较深入的创新性思考与个性化设计。-A2D5G8KbNfQiTlXo#r%v(y0B3E6I9LcOgRjVmYp!t&w)z1C4G7JaMePhSkWnZr$u*x+A2D5H8KbNfQiUlXo#s%v(y0B3F6I9LdOgRjVmYq!t&w-z1C4G7JbMePhTkWnZr$u(x+A2E5H8KcNfRiUlXp#s%v)

50、y0C3F6IaLdOgSjVmYq!t*w-z1D4G7JbMeQhTkWoZr$u(x+B2E5H9KcNfRiUmXp#s&v)y0C3F7IaLdPgSjVnYq$t*w-A1D4G8JbNeQhTlWoZr%u(y+B2E6H9KcOfRiUmXp!s&v)z0C3F7IaMdPgSkVnYq$t*x-A1D5G8JbNeQiTlWo#r%u(y+B3E6H9LcOfRjUmYp!s&w)z0C4F7JaMdPhSkVnZq$t*x-A2D5G8KbNeQiTlXo#r%v(y+B3E6I9LcOgRjUmYp!t&w)z1C4F7JaMePhSkWnZq$u*x+A2D5H8KbN

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服