程序设计实践第5章.ppt
《程序设计实践第5章.ppt》由会员分享,可在线阅读,更多相关《程序设计实践第5章.ppt(65页珍藏版)》请在三一文库上搜索。
1、第5章 综合程序练习题,大型程序设计的要求 9个大型程序设计题目分析,第5章 综合程序练习题,大型程序设计的要求,题目要求:每道题都给出了问题的描述、基本要求、高级要求、难点分析、主要数据结构及主要算法提示等,以便供大家选择练习。 其中“基本要求”和“高级功能”是两个不同层次的功能要求。,第5章 综合程序练习题,大型程序设计的要求 9个大型程序设计题目分析,第5章 综合程序练习题,大型程序设计题目分析: 1 打字练习 2 电子琴 3 简易画图板 4 贪吃蛇 5 五子棋 6 搬运工 7 大富翁 8 赛车 9 坦克大战,1问题描述 2基本功能 3高级功能 4难点分析 5程序总体结构 6主要数据结构
2、提示 7主要算法提示,第5章 综合程序练习题打字练习,1:问题描述 打字练习是一个非常有用的小程序,电脑初学者可以借助它来熟悉键位,新手可以利用它来提高打字速度。 2:基本功能 键位练习、单词练习、文本练习 3:高级功能 增加音效、暂停功能、继续上次未完成的练习,第5章 综合程序练习题打字练习,难点分析,1)虚拟键盘由于有很多按键所以绘制时会比较繁琐。至于如何反像显示一个按键,我们会在在算法提示部分给出。 2)键位练习部分由于有些键是没有对应的ASCII码的,所以我们无法使用ASCII码来识别用户的按键,应当使用键盘码来识别它。函数bioskey可以获得按键的键盘码。,第5章 综合程序练习题打
3、字练习,设计及实现要点,打字练习程序的总体结构,第5章 综合程序练习题打字练习,主要数据结构分析(一),1)struc rect结构代表屏幕上的一个矩形区域。它的结构如下:,struct rect int left,top; /*矩形左上角的坐标值*/ int right,bottom; /*矩形右下角的坐标值*/ ,第5章 综合程序练习题打字练习,主要数据结构分析(二),2)在键位练习的部分,由于要经常对虚拟键盘上的某个键进行绘制,为了绘制时的方便我们可以使用一个结构来表示虚拟键盘上的每个按键。,struct key struct rect keyRect; int keyNum; char
4、 keyName10; ;,keyRect就代表了按键在屏幕上占据的一个矩形区域。 keyNum是按键的键盘码。 keyName是按键的名称,绘制时显示在按键上。,第5章 综合程序练习题打字练习,主要数据结构分析(三),3)使用struct key keyArrayMAXKEY数组来保存所有要绘 制的按键,struct key keyArrayMAXKEY;,第5章 综合程序练习题打字练习,主要算法提示,1)随机产生按键:通过产生一个随机数作为索引值访问keyArray数组,来随机产生需要用户输入的按键。然后将对应的按键反像显示。 2)反像显示一个按键:假设 R1是我们要反像显示的按键在屏幕上
5、占据的一个矩形区域。(注:R1是一个struct rect结构的对象,R1的值可以从keyArray数组中获得。 3)getimage的作用是将一个矩形区域的图像复制到buff中,而putimage的作用是将buff中的图像输出到屏幕中的某个位置。而参数NOT_PUT的作用是告诉putimage在输出时将图像反像显示。,第5章 综合程序练习题电子琴,1:问题描述 设计一个键盘电子琴,通过键盘输入来模拟敲击琴键,并发出对应的琴声,使用户能在PC机上弹奏电子琴。现要求利用Turbo C 2.0来实现该游戏。 2:基本功能 图形界面显示。界面分三部分,背景色为蓝色。 菜单功能 电子琴。系统分3种模式
6、:实时模式、播放模式、编辑模式。 3:高级功能 界面显示波形图、菜单帮助快捷键、鼠标功能,第5章 综合程序练习题电子琴,难点分析,1)曲目文件的格式设计。业界广泛采用midi文件,但程序员新接触时,需要了解它的格式等技术,解码、编码也都存在难度。可自行设计一种格式,记录键盘按键及时间间隔。这样编码和解码都很简单。 2)图形描绘。这是本程序最主要的工作。在考虑如何设计出一个美观的图形时,好要考虑其它很多方面:背景色、菜单颜色、菜单大小、琴键颜色、琴键的形状、显示琴键被按下、显示波形图等。 3)响应鼠标事件。在DOS环境下响应鼠标操作比较有难度。,第5章 综合程序练习题电子琴,设计及实现要点,电子
7、琴程序的总体结构,第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_i
8、tem_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_no
9、de 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, /上方的起
10、始位置 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
11、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) 记录配置信息,包括背景
12、色、高亮色、菜单项的长宽等、键盘对应图的位置、波形图的文职、曲目列表的位置、菜单组信息等,自行补充:,第5章 综合程序练习题电子琴,主要算法提示,参考以下几个主要函数的定义: 初始化函数:初始化全局配置信息 int initConfig(CONFIG * pConfig); 描绘界面:此函数可在初始化界面时用,也可在用户设置了选项后重新描绘界面时调用 int paintFrame(CONFIG * pConfig); 画一个图形 int paintShape(GRAGH * pShape); 在指定位置打一个指定大小的字 int paintChar(GRAGH * pShape,char* n
13、ame); 一些大的处理函数,如处理新建文件,自行补充 int onNewOpen();,第5章 综合程序练习题简易画图板,1:问题描述 简易画图板是一个简单的绘图工具,它提供了一些基本的画图功能。界面由工具栏、调色板和绘图区组成。 2:基本功能 绘制直线、矩形、椭圆、圆、橡皮擦、填充 3:高级功能 支持对选定图像中的一个矩形区 可以将绘制的图案保存为16色的BMP文件。 可以打开一幅16色的BMP图片进行修改。,第5章 综合程序练习题简易画图板,难点分析,1)填充功能。虽然Tc图形库中有填充函数floodfill,但是这个填充函数不符合我们的要求。因为这个填充函数在调用时除了要指定填充区域中
14、的一点,还需要指定要填充的区域边界的颜色,获取图像边界颜色的操作对于用户来说是比较麻烦的。此外,我们希望填充区域的边界可以是不同颜色的。所以,需要设计自己的填充函数。 2)BMP文件的打开和保存。必须了解BMP文件的结构,以知道如何从文件中读出需要的数据以及如何将数据保存到bmp文件中。,第5章 综合程序练习题简易画图板,设计及实现要点,简易画图板程序的总体结构,第5章 综合程序练习题简易画图板,主要算法提示,首先由用户指定填充区域中的任一点,以该点作为种子点,然后分别 向上下左右四个方向检查该点的相邻点。如果这些点和种子点的颜色 相同,则填充它,否则,就视为边界点。然后再以那些检测到的非边
15、界点作为种子点,以同样的方式检查它们的相邻点。这样不断的检测 、填充就可以将区域填充满。 推荐使用队列来实现一个非递归的算法。 非递归的填充算法: a、将第一个种子点放入队列 b、当队列非空 b1、从队列中取出一点 b2、将该点置为填充色 b3、分别检查上下左右四点,如果是非边界点则将其放入队列中 c、算法结束,第5章 综合程序练习题贪吃蛇,1:问题描述 贪吃蛇游戏是一个深受人们喜欢的游戏:一条蛇在密闭的围墙内,在围墙内随机出现食物,通过按键控制蛇向上下左右四个方向移动,蛇撞到食物,则食物被吃掉,蛇的身体增加一节。如果蛇在移动过程中,撞到墙壁或身体交叉(蛇头撞到自己的身体)游戏结束。现要求利用
16、Turbo C 2.0来实现该游戏。 2:基本功能 提供图形界面、键盘控制游戏、计分机制、结束判断 3:高级功能 暂停功能:能随时通过按键来暂停游戏,再按一次则继续游戏。 速度调节功能 奖励机制 音效功能,第5章 综合程序练习题贪吃蛇,难点分析,1)表示蛇的图形以及蛇的移动。 2)检测蛇有无撞到食物、围墙或是自己的身体。 3)食物的随机产生。 4)蛇的移动速度调节。 5)奖励食物的定时机制。,第5章 综合程序练习题贪吃蛇,设计及实现要点,贪吃蛇程序的总体结构,第5章 综合程序练习题贪吃蛇,主要数据结构提示(一),char GameBoard ROWCOL;/* 游戏板所有单元的坐标 */,en
17、um 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 Sn
18、akeNode *next; ;,4)利用结构体来表示蛇身体的一节,最后用循环链表来表示整条蛇,5)食物(包括奖励食物)用结构体来表示,第5章 综合程序练习题贪吃蛇,主要算法提示,碰撞检测模块: 蛇移动模块:在程序中定义循环链表来表示蛇,并记录蛇头指针以及蛇尾指针、当前移动方向。若有方向按键信息: a1. 按键方向跟当前方向相同或是相反,则不做处理; a2. 否则将当前方向设置为新的方向;按当前方向得到蛇头的下一位置;对该位置进行碰撞检测,判断该位置是什么状态c1. 若是蛇身和墙壁,跳到步骤e; c2. 若是空白,则将蛇尾设为蛇头,将倒数第二节设为蛇尾,更新蛇头的位置为当前的新位置。界面上就把
19、当前最新位置用蛇的颜色画上,并把原蛇尾用背景色擦除。 c3. 若是食物,则新增加当前位置做为蛇头,蛇尾不变。利用记分模块更新分数。并再重新随机产生食物。 返回a做循环;游戏结束,第5章 综合程序练习题五子棋,1:问题描述 五子棋基本规则:棋盘上形成横向、竖向、斜向的连续的相同颜色的五个棋子称为 “五连” 。黑白双方先在棋盘上形成五连的一方为胜。若对局双方均认为不可能形成五连或是剩余棋盘空间已不足以形成五连则为和棋。下棋过程中不考虑各种禁手规则。 2:基本功能 提供图形界面、键盘操作、人人对战、支持某方先下、棋盘15*15,显示网格线,黑白棋子、当前光标所在;显示当前执棋方 3:高级功能 支持人
20、机对战,显示人机对子情况和胜负判别 悔棋功能 音效功能,第5章 综合程序练习题五子棋,难点分析,1)胜负判别 2)悔棋功能 3)人机对战的人工智能部分 五子棋的人机对战是一个典型的博弈问题。博弈问题一般可用极大-极小法和-法求解(读者可找相关资料,一般人工智能或博弈论教材中会涉及这些内容)。而即便是用-法,五子棋的搜索空间还是相当庞大。,第5章 综合程序练习题五子棋,设计及实现要点,五子棋程序的总体结构,第5章 综合程序练习题五子棋,主要数据结构提示(一),1)棋盘用15*15的二维数组表示,数组的每一个元素对应棋盘上的一个交叉点,用0表示空位、1代表玩家1的子、2代表玩家2的子:,char
21、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,che
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 实践
链接地址:https://www.31doc.com/p-2978712.html