《c语言程序设计罗朝盛综合程序练习题.ppt》由会员分享,可在线阅读,更多相关《c语言程序设计罗朝盛综合程序练习题.ppt(65页珍藏版)》请在金锄头文库上搜索。
1、综合程序练习题综合程序练习题 主要内容主要内容大型程序设计的要求9个大型程序设计题目分析Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.综合程序练习题综合程序练习题大型程序设计的要求大型程序设计的要求题目要求:每道题都给出了问题的描述、基本要求、高级要求、难点分析、主要数据结构及主要算法提示等,以便供大家选择练习。 其中“基本要求”和“高级功能”是两个不同层次的功能要求。Evaluation only.Created
2、 with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.综合程序练习题综合程序练习题 主要内容主要内容大型程序设计的要求9个大型程序设计题目分析Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.综合程序练习题综合程序练习题大型程序设计题目分析:z1 打字练习打字练习z2 电子琴电子琴z3 简易画
3、图板简易画图板z4 贪吃蛇贪吃蛇z5 五子棋五子棋z6 搬运工搬运工z7 大富翁大富翁z8 赛车赛车z9 坦克大战坦克大战1问题描述2基本功能3高级功能4难点分析5程序总体结构6主要数据结构提示7主要算法提示Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.综合程序练习题综合程序练习题打字练习打字练习1:问题描述:问题描述 打字练习是一个非常有用的小程序,电脑初学者可打字练习是一个非常有用的小程序,电脑初学者可以借助它
4、来熟悉键位,新手可以利用它来提高打字速以借助它来熟悉键位,新手可以利用它来提高打字速度。度。2:基本功能:基本功能 键位练习、键位练习、单词练习、文本练习单词练习、文本练习3:高级功能:高级功能 增加音效、暂停功能、继续上次未完成的练习增加音效、暂停功能、继续上次未完成的练习Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.综合程序练习题综合程序练习题打字练习打字练习难点分析难点分析1)虚拟键盘由于有很多按键所以绘制时
5、会比较)虚拟键盘由于有很多按键所以绘制时会比较繁琐。至于如何反像显示一个按键,我们会在繁琐。至于如何反像显示一个按键,我们会在在算法提示部分给出。在算法提示部分给出。2)键位练习部分由于有些键是没有对应的)键位练习部分由于有些键是没有对应的ASCII码的,所以我们无法使用码的,所以我们无法使用ASCII码来识别码来识别用户的按键,应当使用键盘码来识别它。函数用户的按键,应当使用键盘码来识别它。函数bioskey可以获得按键的键盘码。可以获得按键的键盘码。Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile
6、5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.综合程序练习题综合程序练习题打字练习打字练习设计及实现要点设计及实现要点图形模式初始化选择练习模式键位练习单词练习文本练习结束清理模块打字练习程序的总体结构打字练习程序的总体结构 Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.综合程序练习题综合程序练习题打字练习打字练习主要数据结构分析(一)主要数据结构分析(一)1)struc r
7、ect结构代表屏幕上的一个矩形区域。它的结构如下:structrectintleft,top;/*矩形左上角的坐标值*/intright,bottom;/*矩形右下角的坐标值*/Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.综合程序练习题综合程序练习题打字练习打字练习主要数据结构分析(二)主要数据结构分析(二)2)在键位练习的部分,由于要经常对虚拟键盘上的某个键进行绘制,为了绘制时的方便我们可以使用一个结构来表示虚
8、拟键盘上的每个按键。structkeystructrectkeyRect;intkeyNum;charkeyName10;;keyRect就代表了按键在屏幕上占据的一个矩形区域。keyNum是按键的键盘码。keyName是按键的名称,绘制时显示在按键上。Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.综合程序练习题综合程序练习题打字练习打字练习主要数据结构分析(三)主要数据结构分析(三) 3)使用struct key
9、 keyArrayMAXKEY数组来保存所有要绘 制的按键structkeykeyArrayMAXKEY;Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.综合程序练习题综合程序练习题打字练习打字练习主要算法提示主要算法提示1)随机产生按键:通过产生一个随机数作为索引值访问keyArray数组,来随机产生需要用户输入的按键。然后将对应的按键反像显示。2)反像显示一个按键:假设 R1是我们要反像显示的按键在屏幕上占据的一
10、个矩形区域。(注:R1是一个struct rect结构的对象,R1的值可以从keyArray数组中获得。 3)getimage的作用是将一个矩形区域的图像复制到buff中,而putimage的作用是将buff中的图像输出到屏幕中的某个位置。而参数NOT_PUT的作用是告诉putimage在输出时将图像反像显示。Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.综合程序练习题综合程序练习题电子琴电子琴1:问题描述:问题描
11、述 设计一个键盘电子琴,通过键盘输入来模拟敲击琴键,并发出对应的琴声,使用户能在PC机上弹奏电子琴。现要求利用Turbo C 2.0来实现该游戏。 2:基本功能:基本功能图形界面显示。界面分三部分,背景色为蓝色。菜单功能电子琴。系统分3种模式:实时模式、播放模式、编辑模式。3:高级功能:高级功能 界面显示波形图、菜单帮助快捷键、鼠标功能Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.综合程序练习题综合程序练习题电子琴
12、电子琴难点分析难点分析1)曲目文件的格式设计。业界广泛采用midi文件,但程序员新接触时,需要了解它的格式等技术,解码、编码也都存在难度。可自行设计一种格式,记录键盘按键及时间间隔。这样编码和解码都很简单。2)图形描绘。这是本程序最主要的工作。在考虑如何设计出一个美观的图形时,好要考虑其它很多方面:背景色、菜单颜色、菜单大小、琴键颜色、琴键的形状、显示琴键被按下、显示波形图等。3)响应鼠标事件。在DOS环境下响应鼠标操作比较有难度。Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Cop
13、yright 2004-2011 Aspose Pty Ltd.综合程序练习题综合程序练习题电子琴电子琴设计及实现要点设计及实现要点界面初始化模块结束清理模块播放模块发声模块击键处理模块实时弹奏模块曲目编辑模块电子琴程序的总体结构电子琴程序的总体结构 Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.综合程序练习题综合程序练习题电子琴电子琴主要数据结构分析(一)主要数据结构分析(一)/*系统状态*/enumsytem_
14、statussystem_status_normal,system_status_paused/*系统模式*/enumsytem_modulsystem_modul_intime,system_status_play,system_status_edit/*定义颜色枚举*/typedefenumcolorintblue,intred,.COLOR;1)定义系统常量Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.综合程
15、序练习题综合程序练习题电子琴电子琴主要数据结构分析(二)主要数据结构分析(二)#definemenu_item_height/*菜单项的高度*/#definemenu_item_width/*菜单项的宽度*/#definemenu_item_color/*菜单项的颜色*/#definemenu_group_distance/*菜单组间间隔*/typedefstructctrlKeychar*name;intfirstkey;intsecondkey;CTRL_KEY;2)菜单的一些常量定义 3)定义控制键。一般是ctrl/alt和另外一个键的组合Evaluation only.Created
16、with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.综合程序练习题综合程序练习题电子琴电子琴主要数据结构分析(三)主要数据结构分析(三)typedefstructmenu_item_nodechar*name;CTRL_KEYhotkey;menu_item_node*next;MENU_ITEM;#definemenu_item_listMENU_ITEMtypedefstructmenu_groupchar*name;CTRL_KEYhotkey;menu_ite
17、m_listitemList;/*文件菜单组下有几个菜单项*/MENU_GROUP;4)一个菜单项5)定义菜单组Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.综合程序练习题综合程序练习题电子琴电子琴主要数据结构分析(四)主要数据结构分析(四)typedefstructrectanglePOSITIONup_start,/上方的起始位置POSITIONup_end,/上方的结束位置POSITIONdown_start
18、,/下方的起始位置POSITIONdown_start/下方的结束位置RECTANGLE;typedefstructcoordinateintx;inty;POSITION;6) 定义某个点的坐标7)定义一个形状的四个位置,注意边线均为直线Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.综合程序练习题综合程序练习题电子琴电子琴主要数据结构分析(五)主要数据结构分析(五)typedefstructkey_recordi
19、ntkeynum,inttimeintervalKEY_RECORD;typedefstructgraghRECTANGLEshape,COLORframeColor,COLORfillColorGRAGH;8)定义一个图形,包括形状、边框色、填充色9)定义一个击键记录Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.综合程序练习题综合程序练习题电子琴电子琴主要数据结构分析(六)主要数据结构分析(六)typedefst
20、ructconfigCOLORbackground,COLORhightlight,CONFIG;typedefstructkey_record_list_nodeKEY_RECORDkey,key_record_list_node*nextLIST_NODE;10)记录所有击键11) 记录配置信息,包括背景色、高亮色、菜单项的长宽等、键盘对应图的位置、波形图的文职、曲目列表的位置、菜单组信息等,自行补充:Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2
21、011 Aspose Pty Ltd.综合程序练习题综合程序练习题电子琴电子琴主要算法提示主要算法提示参考以下几个主要函数的定义:初始化函数:初始化全局配置信息int initConfig(CONFIG * pConfig);描绘界面:此函数可在初始化界面时用,也可在用户设置了选项后重新描绘界面时调用int paintFrame(CONFIG * pConfig);画一个图形int paintShape(GRAGH * pShape);在指定位置打一个指定大小的字int paintChar(GRAGH * pShape,char* name);一些大的处理函数,如处理新建文件,自行补充int
22、onNewOpen();Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.综合程序练习题综合程序练习题简易画图板简易画图板1:问题描述:问题描述 简易画图板是一个简单的绘图工具,它提供了一些基本的画图功能。界面由工具栏、调色板和绘图区组成。 2:基本功能:基本功能绘制直线、矩形、椭圆、圆、橡皮擦、填充绘制直线、矩形、椭圆、圆、橡皮擦、填充3:高级功能:高级功能支持对选定图像中的一个矩形区可以将绘制的图案保存为16色的B
23、MP文件。可以打开一幅16色的BMP图片进行修改。Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.综合程序练习题综合程序练习题简易画图板简易画图板难点分析难点分析1)填充功能。虽然Tc图形库中有填充函数floodfill,但是这个填充函数不符合我们的要求。因为这个填充函数在调用时除了要指定填充区域中的一点,还需要指定要填充的区域边界的颜色,获取图像边界颜色的操作对于用户来说是比较麻烦的。此外,我们希望填充区域的边界可
24、以是不同颜色的。所以,需要设计自己的填充函数。2)BMP文件的打开和保存。必须了解BMP文件的结构,以知道如何从文件中读出需要的数据以及如何将数据保存到bmp文件中。 Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.综合程序练习题综合程序练习题简易画图板简易画图板设计及实现要点设计及实现要点界面初始化模块图像绘制模块颜色选择模块形状选择模块结束清理模块图像保存模块简易画图板程序的总体结构简易画图板程序的总体结构 Ev
25、aluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.综合程序练习题综合程序练习题简易画图板简易画图板主要算法提示主要算法提示首先由用户指定填充区域中的任一点,以该点作为种子点,然后分别向上下左右四个方向检查该点的相邻点。如果这些点和种子点的颜色相同,则填充它,否则,就视为边界点。然后再以那些检测到的非边界点作为种子点,以同样的方式检查它们的相邻点。这样不断的检测、填充就可以将区域填充满。推荐使用队列来实现一个非递归的算法。非
26、递归的填充算法:a、将第一个种子点放入队列b、当队列非空 b1、从队列中取出一点 b2、将该点置为填充色 b3、分别检查上下左右四点,如果是非边界点则将其放入队列中c、算法结束 Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.综合程序练习题综合程序练习题贪吃蛇贪吃蛇1:问题描述:问题描述 贪吃蛇游戏是一个深受人们喜欢的游戏:一条蛇在密闭的围墙内,在围墙内随机出现食物,通过按键控制蛇向上下左右四个方向移动,蛇撞到食物,
27、则食物被吃掉,蛇的身体增加一节。如果蛇在移动过程中,撞到墙壁或身体交叉(蛇头撞到自己的身体)游戏结束。现要求利用Turbo C 2.0来实现该游戏。 2:基本功能:基本功能提供图形界面、键盘控制游戏、计分机制、结束判断提供图形界面、键盘控制游戏、计分机制、结束判断3:高级功能:高级功能暂停功能:能随时通过按键来暂停游戏,再按一次则继续游戏。 速度调节功能奖励机制音效功能Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.
28、综合程序练习题综合程序练习题贪吃蛇贪吃蛇难点分析难点分析1)表示蛇的图形以及蛇的移动。 2)检测蛇有无撞到食物、围墙或是自己的身体。 3)食物的随机产生。 4)蛇的移动速度调节。 5)奖励食物的定时机制。 Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.综合程序练习题综合程序练习题贪吃蛇贪吃蛇设计及实现要点设计及实现要点场景初始化模块蛇移动模块键盘处理模块碰撞检测模块定时模块游戏结束清理模块记分模块贪吃蛇程序的总体结
29、构贪吃蛇程序的总体结构 Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.综合程序练习题综合程序练习题贪吃蛇贪吃蛇主要数据结构提示(一)主要数据结构提示(一)charGameBoardROWCOL;/*游戏板所有单元的坐标*/enumUnitStateFREE,BOARDER,SNAKE,FOOD,BONUS;enumDirectionLEFT,RIGHT,UP,DOWN;1)游戏场景用一个二维数组表示2)游戏场景内各
30、单元的状态用枚举类型来表示3)移动方向利用枚举类型来表示Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.综合程序练习题综合程序练习题贪吃蛇贪吃蛇主要数据结构提示(二)主要数据结构提示(二)structFoodintx;inty;intdie;/*食物是否已经被吃*/intisBonus;/*是否为奖励食物*/;structSnakeNodeintx;inty;structSnakeNode*pre;structSna
31、keNode*next;4)利用结构体来表示蛇身体的一节,最后用循环链表来表示整条蛇5)食物(包括奖励食物)用结构体来表示Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.综合程序练习题综合程序练习题贪吃蛇贪吃蛇主要算法提示主要算法提示碰撞检测模块:蛇移动模块:在程序中定义循环链表来表示蛇,并记录蛇头指针以及蛇尾指针、当前移动方向。若有方向按键信息:a1. 按键方向跟当前方向相同或是相反,则不做处理;a2. 否则将当前
32、方向设置为新的方向;按当前方向得到蛇头的下一位置;对该位置进行碰撞检测,判断该位置是什么状态c1. 若是蛇身和墙壁,跳到步骤e;c2. 若是空白,则将蛇尾设为蛇头,将倒数第二节设为蛇尾,更新蛇头的位置为当前的新位置。界面上就把当前最新位置用蛇的颜色画上,并把原蛇尾用背景色擦除。c3. 若是食物,则新增加当前位置做为蛇头,蛇尾不变。利用记分模块更新分数。并再重新随机产生食物。返回a做循环;游戏结束Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 As
33、pose Pty Ltd.综合程序练习题综合程序练习题五子棋五子棋1:问题描述:问题描述z五子棋基本规则:棋盘上形成横向、竖向、斜向的连续的相同颜色的五个棋子称为 “五连” 。黑白双方先在棋盘上形成五连的一方为胜。若对局双方均认为不可能形成五连或是剩余棋盘空间已不足以形成五连则为和棋。下棋过程中不考虑各种禁手规则。2:基本功能:基本功能提供图形界面、键盘操作、人人对战、支持某方先下、棋盘15*15,显示网格线,黑白棋子、当前光标所在;显示当前执棋方3:高级功能:高级功能支持人机对战,显示人机对子情况和胜负判别 悔棋功能音效功能Evaluation only.Created with Aspos
34、e.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.综合程序练习题综合程序练习题五子棋五子棋难点分析难点分析1)胜负判别 2)悔棋功能 3)人机对战的人工智能部分 五子棋的人机对战是一个典型的博弈问题。博弈问题一般可用极大-极小法和-法求解(读者可找相关资料,一般人工智能或博弈论教材中会涉及这些内容)。而即便是用-法,五子棋的搜索空间还是相当庞大。 Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile
35、 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.综合程序练习题综合程序练习题五子棋五子棋设计及实现要点设计及实现要点游戏初始化模块主循环控制模块键盘处理模块胜负判别模块人工智能模块游戏结束清理模块五子棋程序的总体结构五子棋程序的总体结构 Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.综合程序练习题综合程序练习题五子棋五子棋主要数据结构提示(一)主要数据结构提示(一)1)棋盘用
36、15*15的二维数组表示,数组的每一个元素对应棋盘上的一个交叉点,用0表示空位、1代表玩家1的子、2代表玩家2的子:charChessBoard1515;Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.综合程序练习题综合程序练习题五子棋五子棋主要数据结构提示(二)主要数据结构提示(二) 2)用于搜索过程的结构体:typedefstructfive_chess*point;structfive_chessintx;in
37、ty;intlayer;intvalue;intscore;intchessLENGTHLENGTH;intrecordLENGTHLENGTH;其中,x,y表示在某个位置上扩展出来的新节点,layer是表示第几层扩展,用于控制扩展深度。value表示该点上极大极小值,score表示叶子节点的得分,用于推算父辈节点的value,chess这个二维数组表示扩展出来的棋盘信息,record记录在x、y点上扩展过的节点,如果没有扩展record中对应某个值为0。如果record中没有可以扩展的节点,那么该层扩展结束,返回一个特定值。Evaluation only.Created with Aspos
38、e.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.综合程序练习题综合程序练习题五子棋五子棋主要算法提示(一)主要算法提示(一)对棋盘的评分算法。评估一个棋盘的分数,主要通过扫描整个棋盘,对每个点评分。对某个点上评分从四个方向(角度分别为0、45、90、135的四个方向)分别统计,进而累积该点总分,最后得到整个棋盘的分数。实际上对当前的局面按照下面规则的顺序进行比较,如果满足某一条规则的话,就给该局面打分并保存,然后退出规则的匹配。注意这里的规则是根据一般的下棋规律的一个总结,在实际运行
39、的时候,可以添加规则和对评分机制加以修正。 Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.综合程序练习题综合程序练习题五子棋五子棋主要算法提示(二)主要算法提示(二)人工智能部分的搜索算法流程如下(以扩展两层为例):根据棋盘信息chessman1515建立根结点s0(数据结构:five_chesman),并把s0压入堆栈中扩展s1=top();判断s1-layer是否等于1s1-layer等于1,push(s1),
40、扩展s2=top(),查看s2-layer是否1s2-layer!=-1,计算此时棋盘得分score,并判断是否要更改上一层的极小值s2-layer=-1,pop():判断是否更改极大值,max_chess指向得分最高的棋盘如果s1-layer=-1,表示搜索结束,返回最大棋盘信息max_chessEvaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.综合程序练习题综合程序练习题搬运工搬运工1:问题描述:问题描述 在一个四
41、周有围墙的仓库的中,堆放着若干箱子、阻挡箱子前进的障碍物,以及标识出了箱子需要被推到的目标位置。游戏者通过观查分析,找到合适的策略,然后只能用推的方法把所有散落在场地中的箱子借助于空闲区间推到目标位置,即获得胜利;否则失败2:基本功能:基本功能场场地地元元素素定定义义与与设设计计 、箱箱子子的的搬搬运运动动作作 、提提供供一一定定数数量量的的按按键键功功能能实实现现游戏者对搬运工的多种操作游戏者对搬运工的多种操作 3:高级功能:高级功能提供多套场地 提供视听效果智能识别游戏的终止自动完成移动Evaluation only.Created with Aspose.Slides for .NET
42、3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.综合程序练习题综合程序练习题搬运工搬运工难点分析难点分析墙壁箱子xy死角判定: 这里举一个例子,如下图所示: 死角判定死角判定Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.综合程序练习题综合程序练习题搬运工搬运工设计及实现要点设计及实现要点搬运工程序的总体结构搬运工程序的总体结构 Evalua
43、tion only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.综合程序练习题综合程序练习题搬运工搬运工主要数据结构提示主要数据结构提示系统的组成元素主要包含外围墙壁、内部障碍物、箱子、搬运工。我们先建立一个虚拟的元素(不妨称之为容器),它用来将整个图形界面网格化,并记录各种图形元素的位置等属性。然后,再为各个图形元素建立相应的保存其特有信息的数据结构。先定义两个基本结构,在后面也会用到:typedefstructtagRect/*矩形*/Po
44、intleftTop,rightButton;/*矩形左上定点和右下定点*/Rect;typedefstructtagPoint /*直角坐标系点*/intx,y;Point;Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.综合程序练习题综合程序练习题搬运工搬运工主要数据结构提示主要数据结构提示1)虚拟的容器结构体:typedef struct tagContainerRect cRect; /*确定整个容器在屏幕上
45、的坐标*/int cBoardNM;/*N、M是事先设定的网格行数和列数*/ Container;其中数组cBoard其取值代表各网格是何种图形元素:箱子、空格、障碍、目标位置,其它必要属性,可自行酌情添加。Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.综合程序练习题综合程序练习题搬运工搬运工主要数据结构提示主要数据结构提示2)搬运工和箱子的结构体:由于墙壁、障碍物和箱子的目标位置都是固定不变的,它们的图形可以在初
46、始化时一次性完成,而其位置则可保存在上面的Container中,下面是搬运工和箱子的结构体:typedef struct tagObjectchar *oImage;/*指向图像缓冲区的指针*/size_t oImageSize;/*stddef.h中size_t 定义为unsigned, 这里表示图像大小*/Point oLocation;/*记录对象在网格中的坐标*/ Object;Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose
47、 Pty Ltd.综合程序练习题综合程序练习题搬运工搬运工主要算法提示主要算法提示1)搬运工游戏的图形界面中除了搬运工和箱子,都是固定元素,因此可以将整个场地网格化,对整个图形界面的管理简化为对各个网格的管理即可。2)对于搬运工和箱子的移动效果,可以直接在一个页面上(即无需使用换页机制)操作。3)对于智能识别和自动移动功能,只要根据网格的状态属性(即当前各网格是何种物体)加以处理即可。Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose
48、Pty Ltd.综合程序练习题综合程序练习题大富翁大富翁1:问题描述:问题描述z本游戏基于双人游戏模式的简单版本。游戏在一个由城市、道路、及其他特殊建筑组成的地图上进行,游戏双方通过掷骰子获得的前进或后退步数不断地前进或后退,当落在可以购买空地的位置时,如果现金足够则可选择购买之;当落在自己已买下地产的位置时,如现金足够则可选择建设之;当落在对手地产的位置上时,则要支付相应的罚金;落在地图中某些特殊位置还会有特殊的惩罚或奖励。最后当一方现金为零时游戏结束,现金为零的一方失败,另一方获,现金为零的一方失败,另一方获胜。2:基本功能:基本功能游戏的环境地图构建 、游戏状态显示 、游戏阶段的输入只包
49、含掷骰子及确定相关选项 3:高级功能:高级功能提供更多的特殊地区,如旅馆、监狱、股票交易中心、银行,并为之设计相应的活动规则。在特殊位置提供更多的活动内容,如获得几轮之内不用交罚款、可以夺取他人地产等特权。提供游戏进度保存功能 Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.综合程序练习题综合程序练习题大富翁大富翁难点分析难点分析 本游戏的难点主要集中在图形处理和数据处理的简化设计上。数据处理设计将在数据结构中提示,
50、下面先提供一个简化图形处理的方案。 由于实际活动的图形元素只有游戏者代表人物,其移动只取决于当前位置和下一个位置。所以,实际编程时只需要把游戏中各个位置的坐标从初始位置开始,按实际到达顺序用一线性表来管理。每走一步就将线性表的指针后移一位,就可取得下一个城市的位置。当指针越过最后一位时,重新指到初始位置,进入下一轮循环。Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.综合程序练习题综合程序练习题大富翁大富翁设计及实现
51、要点设计及实现要点大富翁程序的总体结构大富翁程序的总体结构 Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.综合程序练习题综合程序练习题大富翁大富翁主要数据结构提示(一)主要数据结构提示(一)typedefstructtagCityPointcCenter; /*记录人物进入城市时,其图像左上角对应在当前图形模式坐标系中的坐标*/intcSpecialEvent;/*该城市的特殊地区、特殊位置;为了处理方便,可自行定
52、义一组描述这些地区和位置的宏定义*/City;1)城市和特殊地区的结构体:前面提及的那个线性表就可以由City作为元素构成,这样只要在初始化时画出整个地图,然后将每个城市的City结构按“难点分析”中所说方法保存下来即可。Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.综合程序练习题综合程序练习题大富翁大富翁主要数据结构提示(二)主要数据结构提示(二)2)人物的结构体:typedefstructtagPeoplech
53、ar*pImage;/*指向人物图像缓冲区的指针*/char*pBackgroundImage;/*指向被人物图像覆盖的图像缓冲区的指针*/size_tpImageSize;/*图像大小*/PointpCoordinate;/*人物图像左上角坐标*/intpCash;/*记录该人物的剩余现金*/intpStatus;/*标示该人物的状态,即是处于可移动还是在医院状态中,当pStatus为0时可移动,正值表示住院,负值表示原地停留;绝对值为还需停留的天数*/People;状态栏和消息栏的管理比较简单,只需要随游戏进行更新相关信息就可以了。Evaluation only.Created with
54、Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.综合程序练习题综合程序练习题大富翁大富翁主要算法提示主要算法提示通过位图在屏幕上显示出一个基本的环境地图、游戏双方的人物形象、状态栏和消息栏。注意:由于画面比较复杂,最好是调用位图或已转换成其它图像格式的文件,否则单独绘制一个地图就会有较大的工作量。同时应记录下各图形元素的位置,以供数据处理模块使用。开始后轮流为每位游戏者提供一个前进的步数,游戏者到达一个地方后,系统根据游戏规则,做出相应的判定并调整其持有的现金数量。Eval
55、uation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.综合程序练习题综合程序练习题赛车赛车1:问题描述:问题描述z这里所讲的赛车是基于平面第三视角的,即在一个平面的跑道上,由游戏者操控一辆赛车,与电脑控制的多台赛车比赛。游戏者能对赛车的操作有:向左、向右、加速、减速、停车。比赛中如果游戏者的赛车与别的赛车相撞,则其速度均减为最小,游戏者必须重新开始加速。游戏者如果第一个到达终点,则获胜,否则失败。本游戏的动画处理较为复杂,要求能够
56、显示出各赛车前进的动态效果,以及一定的视听功能。 2:基本功能:基本功能游戏环境、键盘控制赛车、视听效果、游戏控制、动画效果显示3:高级功能:高级功能高级视听效果 提供两人对阵游戏模式提供不同的游戏关卡,不同关卡的赛车数目和速度都可选择。 Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.综合程序练习题综合程序练习题赛车赛车难点分析难点分析动画效果显示刷新赛车位置时,先画出游戏者赛车,然后计算出其他赛车相对游戏者赛车的
57、位置,如果在屏幕范围内则画出,否则不画。注意,相对位置只应计算在屏幕上的垂直高度,水平位置应保留在各赛车的结构体中。为了方便作图,跑道最好使用同一种颜色,将赛车图像四周用这种颜色围上一圈,如宽度为两个像素点,这样每次移动两个像素点距离后的显示刷新只需直接对赛车图像进行一次putimage函数操作即可。用这方法可以避免图像闪烁现象。当然,更复杂的避免闪烁的方法是使用页交替法。不过使用页交替法时仍应尽量减少作图以使画面显示流畅。 Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyri
58、ght 2004-2011 Aspose Pty Ltd.综合程序练习题综合程序练习题赛车赛车设计及实现要点设计及实现要点初始化图形界面读取游戏者输入修改赛车位置参数根据赛车参数刷新界面,重画色道到达终点是否退出系统并清理垃圾赛车程序的总体结构赛车程序的总体结构 Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.综合程序练习题综合程序练习题赛车赛车主要数据结构提示(一)主要数据结构提示(一)typedefstructt
59、agContainer/*赛车场的容器,描述固定元素的位置*/RectcRacingGround;/*赛车区域矩形*/RectcAutodrome;/*赛车跑道矩形区*/RectcColorStrip;/*跑道两旁的色道矩形区*/Container;1)赛车场的容器结构体:描述固定元素的位置typedefstructtagColorStripeunsignedcsColorN;/*N是事先设定的色道条数,该表记录各色道颜色*/intcsStripeOff;/*显示的最上面一条色道在csColor中的下标*/ColorStripe;2)色道结构体:Evaluation only.Created
60、with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.综合程序练习题综合程序练习题赛车赛车主要数据结构提示(二)主要数据结构提示(二)typedefstructtagRacingCarchar*rcImage;/*指向赛车图像*/size_trcImageSize;/*赛车图像大小*/unsignedrcSpeed;/*赛车速度*/unsignedrcDisplacement;/*相对原点位移*/unsignedrcVertical;/*水平位置*/PointrcAbo
61、soluteCoordiante;/*相对出发点的绝对距离即竖直位置*/intrcFlag;/*标识赛车身份*/RacingCar;3)赛车结构体: 注意,rcAbosoluteCoordinate最好只是游戏赛车使用,其它赛车的位置根据前面 提到的方法来计算出其各自位置,这样可以简化数据处理过程。Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.综合程序练习题综合程序练习题赛车赛车主要算法提示主要算法提示为了数据处理
62、的方便,采用直道作为赛车道,并以初始点作为原点。为了表现出赛车前进的效果,可以在车道两旁加上横向的颜色不同、相间排列的色道,然后将色道作周期性循环下移显示就可以实现动画效果。游戏中,始终保持游戏者赛车在屏幕上的垂直位置不变,这样,就可以将游戏者的赛车作为其他物体的参照,方便各辆赛车座标位置的换算。车道两旁的色道后移速度即为游戏者赛车的前进速度。其它赛车始终保持同一速度,并保存其各自的相对原点的距离,根据游戏者赛车相对原点距离就可算出其他赛车在当前屏幕中的位置。Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profi
63、le 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.综合程序练习题综合程序练习题坦克大战坦克大战1:问题描述:问题描述z游戏者操控一到两台坦克,抵抗电脑控制的多台坦克,保卫金鹰(特指一个游戏者需要保护的物体);双方通过火炮攻击对方,坦克被炮弹击中即被摧毁;对战双方如果还有在屏幕上活动的可用坦克,则在有坦克被摧毁后才能补充上来。游戏者坦克被全部摧毁或金鹰被摧毁则电脑方获胜,若电脑坦克被全部摧毁则游戏者获胜。 2:基本功能:基本功能游戏场景 、游戏者控制的和电脑控制的坦克的运动状况 、游戏状态判别胜负 、提供足够的按键实现游戏者对坦克的控制 3:高级功能:高
64、级功能视听效果鼠标控制电脑坦克智能化Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.综合程序练习题综合程序练习题坦克大战坦克大战难点分析难点分析本游戏难点主要集中在对坦克自动化控制的算法上。对于向固定目标前进的算法,可以先对N*M的网格做一次宽度优先搜索(BFS),算法中注意判重,避免消耗过多的搜索时间,这样可以在较短的时间内找出一条最短路径。 由于游戏者坦克运动不确定性太高,为电脑坦克搜索一条正确的攻击游戏者坦克的
65、路径难度较高。 Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.综合程序练习题综合程序练习题坦克大战坦克大战设计及实现要点设计及实现要点游戏是否结束初始化图形界面读取游戏者输入开炮,并显示视听效果根据当前数据移动坦克或不反应电脑坦克按预先设定做出相应反应更新状态栏消息游戏者选择开炮游戏者选择移动退出系统并清理垃圾是否坦克大战程序的总体结构坦克大战程序的总体结构 Evaluation only.Created with
66、 Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.综合程序练习题综合程序练习题坦克大战坦克大战主要数据结构提示(一)主要数据结构提示(一)typedefstructtagContainerRectcRect;/*游戏框矩形区*/unsignedcBorderColor;/*游戏框边界颜色*/unsignedcBackgroundColor;/*游戏框背景颜色*/intcBoardNM;/*N,M是事先定义的游戏框网格数*/*cBoard主要记录各网格是何种元素,作为坦克前进
67、的依据*/Container;1)游戏框的结构体: 像前面讲述一样,固定的图形元素可以在初始化时一次性完成,其位置记录 在Container中即可。Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.综合程序练习题综合程序练习题坦克大战坦克大战主要数据结构提示(二)主要数据结构提示(二)typedefstructtagTankchar*tImage; /*指向坦克图像缓冲区的指针*/size_ttImageSize;/*
68、坦克图像大小*/PointtLocation;/*坦克在网格中的坐标*/chartDirctionOffMAX_STEP;/*坦克方向偏移数组,用以确定坦克路径,具体值自己确定*/chartFlag;/*标识坦克身份*/Tank;2)坦克结构体: 另外,金鹰也可使用这一结构,只需用tFlag加以区别即可。Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.综合程序练习题综合程序练习题坦克大战坦克大战主要数据结构提示(三)
69、主要数据结构提示(三)typedefstructtagStatusBoxRectsbRect;/*对话框矩形区*/char*sbTitle;/*对话框名*/char*sbStatusText;/*消息状态文本*/unsignedsbBackgroundColor;/*对话框背景色*/unsignedsbBorderColor;/*对话框边界颜色*/StatusBox;3)基本对话框结构体(每个对话框只包含一类信息,这主要是为了从可扩展性考虑。同时,如果发现前期设计有疏漏,也便于更改):如果对话框不多,可分别管理,如果较多,可以设计一个像游戏框(Container)那样的结构体来进行统一管理。E
70、valuation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.综合程序练习题综合程序练习题坦克大战坦克大战主要算法提示主要算法提示对于坦克大战中的固定元素和对话框等只改动消息栏文本的元素,可在初始化时统一输出到屏幕上,以后根据需要改变对话框的消息文本。对可摧毁障碍的管理,使用一个统一的过程,当某个单位网格状态改变时,调用该过程即可。坦克的管理较为复杂,不过对于其移动,也可使用一个统一的过程来管理,这个过程只接收当前位置和下一步的偏移
71、。Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.综合程序练习题综合程序练习题总结总结 通过以上大型程序的设计练习,可运用前几章讲述的高级程序设计思想和方法,使自己对复杂、综合性程序设计有一个全面的领会和把握,提高自身的设计能力。 另外,也希望能充分发挥自我能动性,在大型程序的内容分解、算法设计、人机界面、执行效率等方面进行较深入的创新性思考与个性化设计。Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.