程序设计实践第5章.ppt

上传人:xin****828 文档编号:7263859 上传时间:2020-03-17 格式:PPT 页数:65 大小:283.50KB
返回 下载 相关 举报
程序设计实践第5章.ppt_第1页
第1页 / 共65页
程序设计实践第5章.ppt_第2页
第2页 / 共65页
程序设计实践第5章.ppt_第3页
第3页 / 共65页
点击查看更多>>
资源描述
第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 虚拟键盘由于有很多按键所以绘制时会比较繁琐 至于如何反像显示一个按键 我们会在在算法提示部分给出 2 键位练习部分由于有些键是没有对应的ASCII码的 所以我们无法使用ASCII码来识别用户的按键 应当使用键盘码来识别它 函数bioskey可以获得按键的键盘码 第5章综合程序练习题 打字练习 设计及实现要点 打字练习程序的总体结构 第5章综合程序练习题 打字练习 主要数据结构分析 一 1 strucrect结构代表屏幕上的一个矩形区域 它的结构如下 structrect intleft top 矩形左上角的坐标值 intright bottom 矩形右下角的坐标值 第5章综合程序练习题 打字练习 主要数据结构分析 二 2 在键位练习的部分 由于要经常对虚拟键盘上的某个键进行绘制 为了绘制时的方便我们可以使用一个结构来表示虚拟键盘上的每个按键 structkey structrectkeyRect intkeyNum charkeyName 10 keyRect就代表了按键在屏幕上占据的一个矩形区域 keyNum是按键的键盘码 keyName是按键的名称 绘制时显示在按键上 第5章综合程序练习题 打字练习 主要数据结构分析 三 3 使用structkeykeyArray MAXKEY 数组来保存所有要绘制的按键 structkeykeyArray MAXKEY 第5章综合程序练习题 打字练习 主要算法提示 1 随机产生按键 通过产生一个随机数作为索引值访问keyArray数组 来随机产生需要用户输入的按键 然后将对应的按键反像显示 2 反像显示一个按键 假设R1是我们要反像显示的按键在屏幕上占据的一个矩形区域 注 R1是一个structrect结构的对象 R1的值可以从keyArray数组中获得 3 getimage的作用是将一个矩形区域的图像复制到buff中 而putimage的作用是将buff中的图像输出到屏幕中的某个位置 而参数NOT PUT的作用是告诉putimage在输出时将图像反像显示 第5章综合程序练习题 电子琴 1 问题描述设计一个键盘电子琴 通过键盘输入来模拟敲击琴键 并发出对应的琴声 使用户能在PC机上弹奏电子琴 现要求利用TurboC2 0来实现该游戏 2 基本功能图形界面显示 界面分三部分 背景色为蓝色 菜单功能电子琴 系统分3种模式 实时模式 播放模式 编辑模式 3 高级功能界面显示波形图 菜单帮助快捷键 鼠标功能 第5章综合程序练习题 电子琴 难点分析 1 曲目文件的格式设计 业界广泛采用midi文件 但程序员新接触时 需要了解它的格式等技术 解码 编码也都存在难度 可自行设计一种格式 记录键盘按键及时间间隔 这样编码和解码都很简单 2 图形描绘 这是本程序最主要的工作 在考虑如何设计出一个美观的图形时 好要考虑其它很多方面 背景色 菜单颜色 菜单大小 琴键颜色 琴键的形状 显示琴键被按下 显示波形图等 3 响应鼠标事件 在DOS环境下响应鼠标操作比较有难度 第5章综合程序练习题 电子琴 设计及实现要点 电子琴程序的总体结构 第5章综合程序练习题 电子琴 主要数据结构分析 一 系统状态 enumsytem status system status normal system status paused 系统模式 enumsytem modul system modul intime system status play system status edit 定义颜色枚举 typedefenumcolor intblue intred COLOR 定义系统常量 第5章综合程序练习题 电子琴 主要数据结构分析 二 definemenu item height 菜单项的高度 definemenu item width 菜单项的宽度 definemenu item color 菜单项的颜色 definemenu group distance 菜单组间间隔 typedefstructctrlKey char name intfirstkey intsecondkey CTRL KEY 2 菜单的一些常量定义 3 定义控制键 一般是ctrl alt和另外一个键的组合 第5章综合程序练习题 电子琴 主要数据结构分析 三 typedefstructmenu item node char name CTRL KEYhotkey menu item node next MENU ITEM definemenu item listMENU ITEM typedefstructmenu group char name CTRL KEYhotkey menu item listitemList 文件菜单组下有几个菜单项 MENU GROUP 4 一个菜单项 5 定义菜单组 第5章综合程序练习题 电子琴 主要数据结构分析 四 typedefstructrectangle POSITIONup start 上方的起始位置POSITIONup end 上方的结束位置POSITIONdown start 下方的起始位置POSITIONdown start 下方的结束位置 RECTANGLE typedefstructcoordinate intx inty POSITION 6 定义某个点的坐标 7 定义一个形状的四个位置 注意边线均为直线 第5章综合程序练习题 电子琴 主要数据结构分析 五 typedefstructkey record intkeynum inttimeinterval KEY RECORD typedefstructgragh RECTANGLEshape COLORframeColor COLORfillColor GRAGH 8 定义一个图形 包括形状 边框色 填充色 9 定义一个击键记录 第5章综合程序练习题 电子琴 主要数据结构分析 六 typedefstructconfig COLORbackground COLORhightlight CONFIG typedefstructkey record list node KEY RECORDkey key record list node next LIST NODE 10 记录所有击键 11 记录配置信息 包括背景色 高亮色 菜单项的长宽等 键盘对应图的位置 波形图的文职 曲目列表的位置 菜单组信息等 自行补充 第5章综合程序练习题 电子琴 主要算法提示 参考以下几个主要函数的定义 初始化函数 初始化全局配置信息intinitConfig CONFIG pConfig 描绘界面 此函数可在初始化界面时用 也可在用户设置了选项后重新描绘界面时调用intpaintFrame CONFIG pConfig 画一个图形intpaintShape GRAGH pShape 在指定位置打一个指定大小的字intpaintChar GRAGH pShape char name 一些大的处理函数 如处理新建文件 自行补充intonNewOpen 第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 问题描述贪吃蛇游戏是一个深受人们喜欢的游戏 一条蛇在密闭的围墙内 在围墙内随机出现食物 通过按键控制蛇向上下左右四个方向移动 蛇撞到食物 则食物被吃掉 蛇的身体增加一节 如果蛇在移动过程中 撞到墙壁或身体交叉 蛇头撞到自己的身体 游戏结束 现要求利用TurboC2 0来实现该游戏 2 基本功能提供图形界面 键盘控制游戏 计分机制 结束判断3 高级功能暂停功能 能随时通过按键来暂停游戏 再按一次则继续游戏 速度调节功能奖励机制音效功能 第5章综合程序练习题 贪吃蛇 难点分析 1 表示蛇的图形以及蛇的移动 2 检测蛇有无撞到食物 围墙或是自己的身体 3 食物的随机产生 4 蛇的移动速度调节 5 奖励食物的定时机制 第5章综合程序练习题 贪吃蛇 设计及实现要点 贪吃蛇程序的总体结构 第5章综合程序练习题 贪吃蛇 主要数据结构提示 一 charGameBoard ROW COL 游戏板所有单元的坐标 enumUnitState FREE BOARDER SNAKE FOOD BONUS enumDirection LEFT RIGHT UP DOWN 游戏场景用一个二维数组表示 2 游戏场景内各单元的状态用枚举类型来表示 3 移动方向利用枚举类型来表示 第5章综合程序练习题 贪吃蛇 主要数据结构提示 二 structFood intx inty intdie 食物是否已经被吃 intisBonus 是否为奖励食物 structSnakeNode intx inty structSnakeNode pre structSnakeNode 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的子 charChessBoard 15 15 第5章综合程序练习题 五子棋 主要数据结构提示 二 2 用于搜索过程的结构体 typedefstructfive chess point structfive chess intx inty intlayer intvalue intscore intchess LENGTH LENGTH intrecord LENGTH LENGTH 其中 x y表示在某个位置上扩展出来的新节点 layer是表示第几层扩展 用于控制扩展深度 value表示该点上极大极小值 score表示叶子节点的得分 用于推算父辈节点的value chess这个二维数组表示扩展出来的棋盘信息 record记录在x y点上扩展过的节点 如果没有扩展record中对应某个值为0 如果record中没有可以扩展的节点 那么该层扩展结束 返回一个特定值 第5章综合程序练习题 五子棋 主要算法提示 一 对棋盘的评分算法 评估一个棋盘的分数 主要通过扫描整个棋盘 对每个点评分 对某个点上评分从四个方向 角度分别为0 45 90 135的四个方向 分别统计 进而累积该点总分 最后得到整个棋盘的分数 实际上对当前的局面按照下面规则的顺序进行比较 如果满足某一条规则的话 就给该局面打分并保存 然后退出规则的匹配 注意这里的规则是根据一般的下棋规律的一个总结 在实际运行的时候 可以添加规则和对评分机制加以修正 第5章综合程序练习题 五子棋 主要算法提示 二 人工智能部分的搜索算法流程如下 以扩展两层为例 根据棋盘信息chessman 15 15 建立根结点s0 数据结构 five chesman 并把s0压入堆栈中扩展s1 top 判断s1 layer是否等于 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章综合程序练习题 搬运工 1 问题描述在一个四周有围墙的仓库的中 堆放着若干箱子 阻挡箱子前进的障碍物 以及标识出了箱子需要被推到的目标位置 游戏者通过观查分析 找到合适的策略 然后只能用推的方法把所有散落在场地中的箱子借助于空闲区间推到目标位置 即获得胜利 否则失败2 基本功能场地元素定义与设计 箱子的搬运动作 提供一定数量的按键功能实现游戏者对搬运工的多种操作3 高级功能提供多套场地提供视听效果智能识别游戏的终止自动完成移动 第5章综合程序练习题 搬运工 难点分析 墙壁 箱子 x y 死角判定 这里举一个例子 如下图所示 死角判定 第5章综合程序练习题 搬运工 设计及实现要点 搬运工程序的总体结构 第5章综合程序练习题 搬运工 主要数据结构提示 系统的组成元素主要包含外围墙壁 内部障碍物 箱子 搬运工 我们先建立一个虚拟的元素 不妨称之为容器 它用来将整个图形界面网格化 并记录各种图形元素的位置等属性 然后 再为各个图形元素建立相应的保存其特有信息的数据结构 先定义两个基本结构 在后面也会用到 typedefstructtagRect 矩形 PointleftTop rightButton 矩形左上定点和右下定点 Rect typedefstructtagPoint 直角坐标系点 intx y Point 第5章综合程序练习题 搬运工 主要数据结构提示 1 虚拟的容器结构体 typedefstructtagContainer RectcRect 确定整个容器在屏幕上的坐标 intcBoard N M N M是事先设定的网格行数和列数 Container 其中数组cBoard其取值代表各网格是何种图形元素 箱子 空格 障碍 目标位置 其它必要属性 可自行酌情添加 第5章综合程序练习题 搬运工 主要数据结构提示 2 搬运工和箱子的结构体 由于墙壁 障碍物和箱子的目标位置都是固定不变的 它们的图形可以在初始化时一次性完成 而其位置则可保存在上面的Container中 下面是搬运工和箱子的结构体 typedefstructtagObject char oImage 指向图像缓冲区的指针 size toImageSize stddef h中size t定义为unsigned 这里表示图像大小 PointoLocation 记录对象在网格中的坐标 Object 第5章综合程序练习题 搬运工 主要算法提示 1 搬运工游戏的图形界面中除了搬运工和箱子 都是固定元素 因此可以将整个场地网格化 对整个图形界面的管理简化为对各个网格的管理即可 2 对于搬运工和箱子的移动效果 可以直接在一个页面上 即无需使用换页机制 操作 3 对于智能识别和自动移动功能 只要根据网格的状态属性 即当前各网格是何种物体 加以处理即可 第5章综合程序练习题 大富翁 1 问题描述本游戏基于双人游戏模式的简单版本 游戏在一个由城市 道路 及其他特殊建筑组成的地图上进行 游戏双方通过掷骰子获得的前进或后退步数不断地前进或后退 当落在可以购买空地的位置时 如果现金足够则可选择购买之 当落在自己已买下地产的位置时 如现金足够则可选择建设之 当落在对手地产的位置上时 则要支付相应的罚金 落在地图中某些特殊位置还会有特殊的惩罚或奖励 最后当一方现金为零时游戏结束 现金为零的一方失败 另一方获 现金为零的一方失败 另一方获胜 2 基本功能游戏的环境地图构建 游戏状态显示 游戏阶段的输入只包含掷骰子及确定相关选项3 高级功能提供更多的特殊地区 如旅馆 监狱 股票交易中心 银行 并为之设计相应的活动规则 在特殊位置提供更多的活动内容 如获得几轮之内不用交罚款 可以夺取他人地产等特权 提供游戏进度保存功能 第5章综合程序练习题 大富翁 难点分析 本游戏的难点主要集中在图形处理和数据处理的简化设计上 数据处理设计将在数据结构中提示 下面先提供一个简化图形处理的方案 由于实际活动的图形元素只有游戏者代表人物 其移动只取决于当前位置和下一个位置 所以 实际编程时只需要把游戏中各个位置的坐标从初始位置开始 按实际到达顺序用一线性表来管理 每走一步就将线性表的指针后移一位 就可取得下一个城市的位置 当指针越过最后一位时 重新指到初始位置 进入下一轮循环 第5章综合程序练习题 大富翁 设计及实现要点 大富翁程序的总体结构 第5章综合程序练习题 大富翁 主要数据结构提示 一 typedefstructtagCity PointcCenter 记录人物进入城市时 其图像左上角对应在当前图形模式坐标系中的坐标 intcSpecialEvent 该城市的特殊地区 特殊位置 为了处理方便 可自行定义一组描述这些地区和位置的宏定义 City 1 城市和特殊地区的结构体 前面提及的那个线性表就可以由City作为元素构成 这样只要在初始化时画出整个地图 然后将每个城市的City结构按 难点分析 中所说方法保存下来即可 第5章综合程序练习题 大富翁 主要数据结构提示 二 2 人物的结构体 typedefstructtagPeople char pImage 指向人物图像缓冲区的指针 char pBackgroundImage 指向被人物图像覆盖的图像缓冲区的指针 size tpImageSize 图像大小 PointpCoordinate 人物图像左上角坐标 intpCash 记录该人物的剩余现金 intpStatus 标示该人物的状态 即是处于可移动还是在医院状态中 当pStatus为0时可移动 正值表示住院 负值表示原地停留 绝对值为还需停留的天数 People 状态栏和消息栏的管理比较简单 只需要随游戏进行更新相关信息就可以了 第5章综合程序练习题 大富翁 主要算法提示 通过位图在屏幕上显示出一个基本的环境地图 游戏双方的人物形象 状态栏和消息栏 注意 由于画面比较复杂 最好是调用位图或已转换成其它图像格式的文件 否则单独绘制一个地图就会有较大的工作量 同时应记录下各图形元素的位置 以供数据处理模块使用 开始后轮流为每位游戏者提供一个前进的步数 游戏者到达一个地方后 系统根据游戏规则 做出相应的判定并调整其持有的现金数量 第5章综合程序练习题 赛车 1 问题描述这里所讲的赛车是基于平面第三视角的 即在一个平面的跑道上 由游戏者操控一辆赛车 与电脑控制的多台赛车比赛 游戏者能对赛车的操作有 向左 向右 加速 减速 停车 比赛中如果游戏者的赛车与别的赛车相撞 则其速度均减为最小 游戏者必须重新开始加速 游戏者如果第一个到达终点 则获胜 否则失败 本游戏的动画处理较为复杂 要求能够显示出各赛车前进的动态效果 以及一定的视听功能 2 基本功能游戏环境 键盘控制赛车 视听效果 游戏控制 动画效果显示3 高级功能高级视听效果提供两人对阵游戏模式提供不同的游戏关卡 不同关卡的赛车数目和速度都可选择 第5章综合程序练习题 赛车 难点分析 动画效果显示刷新赛车位置时 先画出游戏者赛车 然后计算出其他赛车相对游戏者赛车的位置 如果在屏幕范围内则画出 否则不画 注意 相对位置只应计算在屏幕上的垂直高度 水平位置应保留在各赛车的结构体中 为了方便作图 跑道最好使用同一种颜色 将赛车图像四周用这种颜色围上一圈 如宽度为两个像素点 这样每次移动两个像素点距离后的显示刷新只需直接对赛车图像进行一次putimage函数操作即可 用这方法可以避免图像闪烁现象 当然 更复杂的避免闪烁的方法是使用页交替法 不过使用页交替法时仍应尽量减少作图以使画面显示流畅 第5章综合程序练习题 赛车 设计及实现要点 赛车程序的总体结构 第5章综合程序练习题 赛车 主要数据结构提示 一 typedefstructtagContainer 赛车场的容器 描述固定元素的位置 RectcRacingGround 赛车区域矩形 RectcAutodrome 赛车跑道矩形区 RectcColorStrip 跑道两旁的色道矩形区 Container 1 赛车场的容器结构体 描述固定元素的位置 typedefstructtagColorStripe unsignedcsColor N N是事先设定的色道条数 该表记录各色道颜色 intcsStripeOff 显示的最上面一条色道在csColor中的下标 ColorStripe 2 色道结构体 第5章综合程序练习题 赛车 主要数据结构提示 二 typedefstructtagRacingCar char rcImage 指向赛车图像 size trcImageSize 赛车图像大小 unsignedrcSpeed 赛车速度 unsignedrcDisplacement 相对原点位移 unsignedrcVertical 水平位置 PointrcAbosoluteCoordiante 相对出发点的绝对距离即竖直位置 intrcFlag 标识赛车身份 RacingCar 3 赛车结构体 注意 rcAbosoluteCoordinate最好只是游戏赛车使用 其它赛车的位置根据前面提到的方法来计算出其各自位置 这样可以简化数据处理过程 第5章综合程序练习题 赛车 主要算法提示 为了数据处理的方便 采用直道作为赛车道 并以初始点作为原点 为了表现出赛车前进的效果 可以在车道两旁加上横向的颜色不同 相间排列的色道 然后将色道作周期性循环下移显示就可以实现动画效果 游戏中 始终保持游戏者赛车在屏幕上的垂直位置不变 这样 就可以将游戏者的赛车作为其他物体的参照 方便各辆赛车座标位置的换算 车道两旁的色道后移速度即为游戏者赛车的前进速度 其它赛车始终保持同一速度 并保存其各自的相对原点的距离 根据游戏者赛车相对原点距离就可算出其他赛车在当前屏幕中的位置 第5章综合程序练习题 坦克大战 1 问题描述游戏者操控一到两台坦克 抵抗电脑控制的多台坦克 保卫金鹰 特指一个游戏者需要保护的物体 双方通过火炮攻击对方 坦克被炮弹击中即被摧毁 对战双方如果还有在屏幕上活动的可用坦克 则在有坦克被摧毁后才能补充上来 游戏者坦克被全部摧毁或金鹰被摧毁则电脑方获胜 若电脑坦克被全部摧毁则游戏者获胜 2 基本功能游戏场景 游戏者控制的和电脑控制的坦克的运动状况 游戏状态判别胜负 提供足够的按键实现游戏者对坦克的控制3 高级功能视听效果鼠标控制电脑坦克智能化 第5章综合程序练习题 坦克大战 难点分析 本游戏难点主要集中在对坦克自动化控制的算法上 对于向固定目标前进的算法 可以先对N M的网格做一次宽度优先搜索 BFS 算法中注意判重 避免消耗过多的搜索时间 这样可以在较短的时间内找出一条最短路径 由于游戏者坦克运动不确定性太高 为电脑坦克搜索一条正确的攻击游戏者坦克的路径难度较高 第5章综合程序练习题 坦克大战 设计及实现要点 坦克大战程序的总体结构 第5章综合程序练习题 坦克大战 主要数据结构提示 一 typedefstructtagContainer RectcRect 游戏框矩形区 unsignedcBorderColor 游戏框边界颜色 unsignedcBackgroundColor 游戏框背景颜色 intcBoard N M N M是事先定义的游戏框网格数 cBoard 主要记录各网格是何种元素 作为坦克前进的依据 Container 1 游戏框的结构体 像前面讲述一样 固定的图形元素可以在初始化时一次性完成 其位置记录在Container中即可 第5章综合程序练习题 坦克大战 主要数据结构提示 二 typedefstructtagTank char tImage 指向坦克图像缓冲区的指针 size ttImageSize 坦克图像大小 PointtLocation 坦克在网格中的坐标 chartDirctionOff MAX STEP 坦克方向偏移数组 用以确定坦克路径 具体值自己确定 chartFlag 标识坦克身份 Tank 2 坦克结构体 另外 金鹰也可使用这一结构 只需用tFlag加以区别即可 第5章综合程序练习题 坦克大战 主要数据结构提示 三 typedefstructtagStatusBox RectsbRect 对话框矩形区 char sbTitle 对话框名 char sbStatusText 消息状态文本 unsignedsbBackgroundColor 对话框背景色 unsignedsbBorderColor 对话框边界颜色 StatusBox 3 基本对话框结构体 每个对话框只包含一类信息 这主要是为了从可扩展性考虑 同时 如果发现前期设计有疏漏 也便于更改 如果对话框不多 可分别管理 如果较多 可以设计一个像游戏框 Container 那样的结构体来进行统一管理 第5章综合程序练习题 坦克大战 主要算法提示 对于坦克大战中的固定元素和对话框等只改动消息栏文本的元素 可在初始化时统一输出到屏幕上 以后根据需要改变对话框的消息文本 对可摧毁障碍的管理 使用一个统一的过程 当某个单位网格状态改变时 调用该过程即可 坦克的管理较为复杂 不过对于其移动 也可使用一个统一的过程来管理 这个过程只接收当前位置和下一步的偏移 第5章综合程序练习题 总结 通过以上大型程序的设计练习 可运用前几章讲述的高级程序设计思想和方法 使自己对复杂 综合性程序设计有一个全面的领会和把握 提高自身的设计能力 另外 也希望能充分发挥自我能动性 在大型程序的内容分解 算法设计 人机界面 执行效率等方面进行较深入的创新性思考与个性化设计
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!