貓抓老鼠仿真的一种实现方法.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
貓抓老鼠仿真的一种实现方法

猫抓老鼠仿真的一种实现方法 【摘要】本文阐述了一种在固定范围内遵照一定规则的猫抓老鼠的仿真实现方法。仿真程序采用c++语言编制,在vc++软件上运行。本文中的仿真模型,按模型的特性划分,是属于离散事件系统仿真;按仿真时钟与实际时钟的比例关系分类上划分,是属于欠实时仿真;按仿真的系统的结构和实现手段上划分,是属于物理仿真。 0 问题 猫抓老鼠。有1个10*10的方格阵,在一些格中会有一些障碍物。猫和老鼠从方格阵内 任意位置开始,每单位时间只能走一格,且必须走一格。如果在某一刻两者在同一格中,我 们称“猫抓到老鼠”(注意,猫和老鼠交换位置,不算被抓)。猫和老鼠的移动方式相同: 平时沿直线走,下一步如果会走到障碍物上去或者出界,就用1个单位时间做一个左或右转 90度。一开始他们都面向北方。仿真实现猫抓老鼠的过程,同时保证老鼠尽可能地不被猫抓 到。 1 系统定义 1.1 仿真的边界是在一个10*10方格阵。 1.2 仿真的约束条件是猫和老鼠在规定的时间里按照一定的规则行走:(1)、猫和老鼠每单位间只能走一格,且必须走一格;(2)、猫和老鼠的移动方式相同:平时沿直线走,下一步果会走到障碍物上去或者出界,就用1个单位时间做一个左或右转90度;(3)、老鼠尽可能不被猫抓到。 1.3 仿真的的目的是,展现猫抓老鼠的过程。 2 数学建模 猫抓老鼠的仿真系统,是离散系统仿真。该系统的组成如下: 2.1 实体:(1)、永久实体:10*10方格阵,以及里面的障碍物信息;(2)、临时实体:猫和老鼠的坐标信息,以及方格阵中空格的坐标信息。 2.2 事件:(1)时间是共同的主事件。因为,时间协调了实体之间的同步活动。在某种程度上,也实现了各实体间的信息的传递。(2)猫和老鼠的行进是事件。因为,猫和老鼠的行进改变了系统的状态。 2.3 活动:(1)实体所做的事件。在该模型中,是猫和老鼠的行进;(2)、对实体施加的事件。在该设计中,当猫或老鼠进入一种死循环状态时,需要一个系统检测函数,改变猫或老鼠原有的行进方向。 2.4 进程:猫抓老鼠的整个动态过程。 3 仿真建模 3.1 参数设计: (1)、10*10的方格阵用一个10*10矩阵存储。方格阵中的不同内容在矩阵中用不同的常数表示。比如,0表示空格,1表示障碍物等等。 (2)、猫和老鼠,分别用一个猫类Cat和鼠类Rat实现。在两个类中,具有共同的成员变量有:各自的坐标信息,上一时刻的行进方向,以及自仿真开始所走过的路径。 3.2 数据结构设计: 鼠 Int Ratx,Raty;//坐标 Int rat_dir//上一时刻的方向 node rat_stack[]; //记录所走过的坐标的栈 ratroute(); //下一时刻的方向选择 仿真程序采用了c++语言。所以,具体的参数设计采用了c++类的设计方法。 方格阵 Int Table[10][10]; time cat_count[10][10]; time rat_count[10][10]; Initlize();//方格阵初始化 Checkcircle();//死锁检测 Draw();///方格阵绘图 猫 Int Catx,Caty;//坐标 Int cat_dir;//上一时刻的方向 node cat_stack[]; //记录所走过的坐标的栈 catroute(); //下一时刻的方向选择 其中,time和node是自定义数据类型。它们的具体定义如下: typedef struct time{ int x;//走过的次数 int timerecord[10];//走过的时间记录 }time;// cat_count[10][10]、rat_count[10][10]不仅记录了猫或老鼠经过某一点的次数,同时也记录了它们每次经过这一点的时间。 typedef struct node{ int x;//走过的横坐标 int y;//走过的纵坐标 int dir;//方向 }node; //用此数据类型定义的数组cat_stack[]其实是一个栈。 3.3 处理函数设计: 3.3.1 方格阵的处理函数 (1)、方格阵的初始化函数Initlize()。方格阵的初始化可以采用静态初始化或动态初始化两种方式。静态初始化方式是直接对矩阵进行赋初值。这可以采用直接人工赋值,或调用随机函数赋初值。动态初始化,是指当方格阵各单元的信息已经静态初始化之后,还可以对里面的障碍物、猫和老鼠的坐标进行更改,以满足仿真所要求的状态。该设计,就是采用了,动态初始化的方式。 (2)、死锁检测函数Checkcircle(),在该仿真系统中属于系统级的函数。它的功能是防 止猫或老鼠在方格阵中不停

文档评论(0)

cv7c8hj6b4I + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档