




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课程设计 一一. CAD. CAD类类 滑块机构仿真滑块机构仿真 二二. . 游戏类游戏类 五子棋五子棋 一一. . 滑块机构仿真滑块机构仿真 1.1 1.1 题目题目 题目:用文档题目:用文档/视图结构开发一个摇杆滑块机构的运动视图结构开发一个摇杆滑块机构的运动仿真程序。要求实现如下功能仿真程序。要求实现如下功能 1)按A键,曲轴逆时针旋转,带动摇杆和滑块运动 按D键,曲轴顺时针旋转,带动摇杆和滑块运动 2)窗口大小改变时,图形应保持画在客户区的中部 3)对摇杆中点进行轨迹 分析(通过菜单启动 和关闭分析功能)支点曲轴摇杆滑块 1.2.1 功能1:按键使其运动 (1)流程分析按键按键A (或
2、或D)角度增加角度增加(或减少或减少)依据角度计算各个多边形顶点数据依据角度计算各个多边形顶点数据依据多边形数据画图依据多边形数据画图捕捉WM_KEYDOWN消息处理OnKeyDown( )函数处理OnDraw( )函数1.2 1.2 详细设计详细设计 (2)主要数据(数据结构)主要数据(数据结构) a)时刻变化的数据)时刻变化的数据double angle; /杆1(曲轴)与机构x轴的夹角CPoint Gan14; /画杆1(曲轴)四边形的四点CPoint Gan24; /画杆2(连杆)四边形的四点CPoint HuaKuai4; /画滑块四边形的四点 b)不变的数据(可在文档类的)不变的数
3、据(可在文档类的OnNewDocument()() 中初始化中初始化CPoint ZhiDian3; /画支点三角形的三点int l1,w1; /杆1的长度和宽度int l2,w2; /杆2的长度和宽度int l3,w3; /滑块的长度和宽度 (3)需处理或编写的主要函数)需处理或编写的主要函数 文档类:文档类: a) OnNewDocument()() /新建文档消息响应函数新建文档消息响应函数 b) CalPosition(double angle) /给定角度,计算出给定角度,计算出 /各个多边形数据的各个多边形数据的 /函数函数 视图类:视图类: a) OnKeyDown()() /键
4、盘消息响应函数键盘消息响应函数 b) OnDraw()() /重画消息响应函数重画消息响应函数 b) CalPosition()的计算方法(算法):()的计算方法(算法): 以以m2点与点与n1点为例点为例 m2点:点: n1点:点: a) C*Doc : OnNewDocument()() 数据初始化,主要是一些不需变化的数据的赋值数据初始化,主要是一些不需变化的数据的赋值 b) C*View : OnKeyDown() if(按键为(按键为A) 角度增加角度增加 else if (按键为(按键为D) 角度减小角度减小 CalPosition(新角度)(新角度) 刷新屏幕刷新屏幕 d) C*
5、View : OnDraw() 画曲轴四边形画曲轴四边形 画摇杆四边形画摇杆四边形 画滑块四边形画滑块四边形 画支点三角形画支点三角形 (1)流程分析点击菜单点击菜单启动定时器启动定时器角度增加(如一次加角度增加(如一次加5度)度)再计算多一个轨迹点再计算多一个轨迹点捕捉菜单消息处理其响应函数1.2.2 功能2:轨迹绘制定时器定时消息定时器定时消息转够一圈了?转够一圈了?刷新屏幕刷新屏幕撤消定时器撤消定时器是否捕捉WM_TIMER消息,处理定时响应函数处理OnDraw()函数 (2)主要数据(数据结构)主要数据(数据结构) CPoint Path73; /记录杆2中点的轨迹. /转1圈360度
6、,若计划5度取一个点,则 /0360度共73个点 (3)主要函数)主要函数视图类:视图类: a) On菜单菜单ID()() /菜单响应函数菜单响应函数 b) OnTimer()() /定时消息响应函数定时消息响应函数 c) OnDraw()() /重画消息响应函数重画消息响应函数1.3 1.3 参考进度参考进度 第三周:消化详细设计。理清思路,语句试验第三周:消化详细设计。理清思路,语句试验 第四第四五周:键盘控制运动功能。五周:键盘控制运动功能。 第六第六七周:轨迹分析功能。七周:轨迹分析功能。 第八周:调试,修改,课程设计报告编写第八周:调试,修改,课程设计报告编写 第九周:打印、上交第九
7、周:打印、上交二二. . 五子棋(两人对战)五子棋(两人对战)2.1 2.1 题目题目 题目:用文档题目:用文档/视图结构开发一个五子棋游戏程序。要视图结构开发一个五子棋游戏程序。要求实现如下功能求实现如下功能 1)两人对战。黑方用箭头键和回车键操作下子。白方用WASD四个键和空格键控制下子。 2)窗口大小改变时,图形应保持原比例画在客户区。 3)可用菜单开始游戏和退出程序。 4)有统计黑白方胜局数及其比例的功能。 2.2.1 关键流程分析 下子下子流程按回车按回车/空格键空格键数据变化数据变化禁止下子禁止下子依据数据画图依据数据画图捕捉WM_KEYDOWN消息处理OnKeyDown( )函数
8、处理OnDraw( )函数2.2 2.2 详细设计(两人对战)详细设计(两人对战) 判断胜负判断胜负提示黑提示黑/白胜出白胜出分出胜负未分胜负 光标控制流程按上下左右按上下左右/WASD键键光标位置数据变化光标位置数据变化依据数据画图依据数据画图捕捉WM_KEYDOWN消息处理OnKeyDown( )函数处理OnDraw( )函数2.2.2 2.2.2 数据结构数据结构 可把关于棋局的数据和方法封装成一个棋局类:可把关于棋局的数据和方法封装成一个棋局类: class Gobang private: int m_aGrid1515; /0无子无子,1黑子黑子,-1白子白子 int m_nFlag
9、; /当前该哪方下子。当前该哪方下子。1黑黑,-1白白,0禁止下子禁止下子 public: int Get(int RowPos, int ColPos); /查看查看 bool Set(int color, int RowPos, int ColPos); /下子下子 int GetFlag()(); /查看该谁下子查看该谁下子 int Judge(int RowPos, int ColPos ); /胜负判断胜负判断 文档类:文档类: Gobang m_Gobang; /棋局对象棋局对象 int m_nR, m_nC; /光标当前在第几行、第几列光标当前在第几行、第几列 2.2.3 2.2
10、.3 主要函数主要函数 视图类:视图类: OnKeyDown() OnDraw() 棋局类:棋局类: Get(int RosPos, int ColPos) Set(int color, int RowPos, int ColPos) int Judge(int RowPos, int ColPos ) /从指定位置处查起,查看其横向、竖向、两斜向是否有五子相连从指定位置处查起,查看其横向、竖向、两斜向是否有五子相连 /有黑棋连成则返回有黑棋连成则返回1,白棋连成返回,白棋连成返回-1,未连成返回,未连成返回0 int Gobang : Judge( int RosPos, int ColPo
11、s ) if (指定位置有子)(指定位置有子) if (横向连成(横向连成 | 竖向连成竖向连成 | 左斜连成左斜连成 | 右斜连成)右斜连成) 返回该位置子的颜色返回该位置子的颜色 else 返回返回0 else 返回返回0 /查看当前棋盘上某个位置(某行某列)是黑子、白子还是无子查看当前棋盘上某个位置(某行某列)是黑子、白子还是无子 int Gobang : Get( int RosPos, int ColPos ) return m_aGridRosPosColPos; /在指定位置尝试下子,成功则返回在指定位置尝试下子,成功则返回true,失败则返回,失败则返回false bool G
12、obang : Set(int color, int RowPos, int ColPos) if(指定位置无子)(指定位置无子) m_aGrid RosPosColPos = color ; 返回返回true ; else 返回返回false; C*View : OnKeyDown() if(WASD | 上下左右键)上下左右键) 光标位置(光标位置(m_nR, m_nC)调整)调整 else if(空格键(空格键 & 当前该白下当前该白下) 下白子下白子 else if(回车键(回车键 & 当前该黑下)当前该黑下) 下黑子下黑子 刷新屏幕刷新屏幕 if(下子成功)(下子成功
13、) 判断胜负判断胜负 if(已分出胜负)(已分出胜负) 弹出消息框提示弹出消息框提示 禁止再下子禁止再下子 C*View : OnDraw() 画棋盘画棋盘 根据根据m_aGrid画黑白子画黑白子 根据根据m_nR、m_nC画光标画光标 画其他文字信息画其他文字信息 2.3 2.3 人机对战人机对战的思路 考虑把前面双人对战的考虑把前面双人对战的OnKeyDown( )函数修改成:函数修改成: C*View : OnKeyDown() if(WASD |WASD |WASD | 上下左右键)上下左右键) 光标位置(光标位置(m_nR, m_nC)调整)调整 else if(空格键(空格键 &a
14、mp; 当前该白下)当前该白下) ComputerThink(, m_nR, m_nC )/让机器思考,思考的结让机器思考,思考的结 /果(该在哪里下子)以引用参数返回,存入果(该在哪里下子)以引用参数返回,存入 / m_nR和和m_nC 下白子下白子 /这时白子就不受人控制了,将由机器思考并下子这时白子就不受人控制了,将由机器思考并下子 else if(回车键(回车键 & 当前该黑下)当前该黑下) 下黑子下黑子 刷新屏幕刷新屏幕 if(下子成功)(下子成功) 判断胜负判断胜负 if(已分出胜负)(已分出胜负) 弹出消息框提示弹出消息框提示 禁止再下子禁止再下子 因此因此 Comput
15、erThink( )是机器思考的关键函数。机器其实并不会思考,是机器思考的关键函数。机器其实并不会思考,都是程序作者的预先安排。一个棋力不太强的算法可如下设计:都是程序作者的预先安排。一个棋力不太强的算法可如下设计: bool Gobang : ComputerThink ( int Row, int Col , /人上步下子位置人上步下子位置 int & ResultRow, int & ResultCol ) /思考的结果思考的结果 if(横、竖、斜某方向对方已连成四子横、竖、斜某方向对方已连成四子) /从从Row,Col位置开始检查位置开始检查 在连线可以下子的一边下子封
16、堵在连线可以下子的一边下子封堵, 对对ResultRow/Col赋值返回赋值返回 if (某方向对方已成三子某方向对方已成三子) /从从Row,Col位置开始检查位置开始检查 在连线可以下子的一边下子封堵在连线可以下子的一边下子封堵, 对对ResultRow/Col赋值返回赋值返回 if (己方某方向已成四子己方某方向已成四子 & 某边可下子某边可下子) /在整个棋盘上搜索在整个棋盘上搜索 在可下子边下子,赋值返回在可下子边下子,赋值返回 if (己方某方向已成三子己方某方向已成三子 & 某边可下子某边可下子) /在整个棋盘上搜索在整个棋盘上搜索 在可下子边下子,赋值返回在可下
17、子边下子,赋值返回 if (己方某方向已成两子己方某方向已成两子 & 某边可下子某边可下子) /在整个棋盘上搜索在整个棋盘上搜索 在可下子边下子,赋值返回在可下子边下子,赋值返回 if (己方某方向成一子己方某方向成一子 & 某边可下子某边可下子) /在整个棋盘上搜索在整个棋盘上搜索 在可下子边下子,赋值返回在可下子边下子,赋值返回 else /刚开局,或己方棋子周围全被堵住了刚开局,或己方棋子周围全被堵住了 在棋盘上搜索一个空位下子,赋值返回在棋盘上搜索一个空位下子,赋值返回 思考思考1 1:机器下子:机器下子 前面前面OnKeyDown( )函数是从双人对战修改而来,需要敲
18、一下函数是从双人对战修改而来,需要敲一下空格键机器才下子,请思考如何实现在人下了子后机器自动下空格键机器才下子,请思考如何实现在人下了子后机器自动下子(即不用空格键激发)?子(即不用空格键激发)?思考思考2 2:机机对战(程序对抗):机机对战(程序对抗) 思考如果把前面思考如果把前面OnKeyDown( )函数修改成如下,程序将会变成什函数修改成如下,程序将会变成什么情况?么情况? C*View : OnKeyDown() if if if(WASD | WASD | WASD | 上下左右键)上下左右键)上下左右键)上下左右键)上下左右键)上下左右键) 光标位置(光标位置(光标位置(光标位置(光标位置(光标位置(m_nR, m_nCm_nR, m_nCm_nR, m_nC)调整)调整)调整)调整)调整)调整 elseelseelse if(空格键(空格键 & 当前该白下)当前该白下) ComputerThink1(, m_nR, m_nC )/机器思考机器思考 下白子下白子 else if(回车键(回车键 & 当前该黑下)当前该黑下) Compute
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 不动产抵押担保合同
- 消费品销售数据对比表
- 商贸流通企业改制工作实施方案
- 2024年工业自动化仪表项目资金申请报告代可行性研究报告
- 2025年国网西藏电力有限公司招聘568人(第一批)笔试参考题库附带答案详解
- 2025届新华人寿保险股份有限公司安徽分公司“新雁”管培生招聘12人笔试参考题库附带答案详解
- 2025年上半年宜春市政府北京办事处招考服务员易考易错模拟试题(共500题)试卷后附参考答案
- 2025年上半年宜昌长阳城市发展投资集团限公司招聘【若干人】易考易错模拟试题(共500题)试卷后附参考答案
- 2025四川德阳科安安全技术有限公司招聘11人笔试参考题库附带答案详解
- 2025年上半年安徽铜陵市公安局义安分局义安区城管局招聘19人易考易错模拟试题(共500题)试卷后附参考答案
- 2025年天翼云解决方案架构师认证考试指导题库-上(单选题)
- 2025年春人教版英语八年级下册同步课件 Unit 7 Whats the highest mountain in the world课件 Section A 1a-2d
- 2025年哈尔滨铁道职业技术学院单招职业倾向性测试题库必考题
- 行为规范教育中学校长在国旗下讲话:严格要求自己规范自己的行为
- 七下综合世界真奇妙-共享“地球村”
- 2025年信阳职业技术学院高职单招职业技能测试近5年常考版参考题库含答案解析
- 印刷服务投标方案(技术方案)
- 户政知识技能比武大练兵考试题库(完整版)
- 奶牛胚胎移植课件
- 心脏胚胎发育
- 慢性肾衰竭(慢性肾脏病)诊疗指南(内容清晰)
评论
0/150
提交评论