思路:先在神经猫所在位置的六个逃跑方向寻找通路(左、左上、右上、左下、右下、右),再在通路里找到最短路径作为神经猫的逃跑方向,若六个方向都没有通路,则随机选择一个方向移动。

代码实现(注:需要在类中声明字段Hashtable escDir = new Hashtable(); //存放往各个方向逃跑的步数)

/// <summary>
/// 神经猫逃跑方向
/// </summary>
/// <param name="pot">格子信息</param>
/// <param name="x">神经猫所在格子对应二维数组下标的x值</param>
/// <param name="y">神经猫所在格子对应二维数组下标的y值</param>
/// <param name="direction">神经猫移动方向</param>
public void EscDir(Pot[,] pot, int x, int y, out EscapeDirection direction)
{int min = int.MaxValue; //逃跑的最少步数EscapeDirection tempDir = EscapeDirection.CATCH; //临时存储逃跑方向//朝左上方逃跑(局部方法)void LeftUp(){int stepDir = 0; //逃跑步数for (int i = x, j = y; i > 0 && j > 0;){j = (i + 1) % 2 != 0 ? j : j - 1;i = i - 1;if (pot[i, j].PotStu == PotStatus.PASSABLE){stepDir++;}else{//该逃跑方向上遍历到被阻塞的点,证明该方向没有通路,则把逃跑步数记录为int.MaxValueescDir.Add(EscapeDirection.TOPLEFT, int.MaxValue);return;}}escDir.Add(EscapeDirection.TOPLEFT, stepDir);}//朝右上方逃跑(局部方法)void RightUp(){int stepDir = 0; //逃跑步数for (int i = x, j = y; i > 0 && j < pot.GetLength(1) - 1;){                j = (i + 1) % 2 != 0 ? j + 1 : j;i = i - 1;if (pot[i, j].PotStu == PotStatus.PASSABLE){stepDir++;}else{escDir.Add(EscapeDirection.TOPRIGHT, int.MaxValue);return;}}escDir.Add(EscapeDirection.TOPRIGHT, stepDir);}//朝左下方逃跑(局部方法)void LeftDown(){int stepDir = 0; //逃跑步数for (int i = x, j = y; i < pot.GetLength(0) - 1 && j > 0;){j = (i + 1) % 2 != 0 ? j : j - 1;i = i + 1;if (pot[i, j].PotStu == PotStatus.PASSABLE){stepDir++;}else{escDir.Add(EscapeDirection.LEFTDOWN, int.MaxValue);return;}}escDir.Add(EscapeDirection.LEFTDOWN, stepDir);}//朝右下方逃跑(局部方法)void RightDown(){int stepDir = 0; //逃跑步数for (int i = x, j = y; i < pot.GetLength(0) - 1 && j < pot.GetLength(1) - 1;){j = (i + 1) % 2 != 0 ? j + 1 : j;i = i + 1;if (pot[i, j].PotStu == PotStatus.PASSABLE){stepDir++;}else{escDir.Add(EscapeDirection.RIGHTDOWN, int.MaxValue);return;}}escDir.Add(EscapeDirection.RIGHTDOWN, stepDir);}//朝左方逃跑(局部方法)void Left(){int stepDir = 0; //逃跑步数for (int i = x, j = y; j > 0;){j = j - 1;if (pot[i, j].PotStu == PotStatus.PASSABLE){stepDir++;}else{escDir.Add(EscapeDirection.LEFT, int.MaxValue);return;}}escDir.Add(EscapeDirection.LEFT, stepDir);}//朝右方逃跑(局部方法)void Right(){int stepDir = 0; //逃跑步数for (int i = x, j = y; j < pot.GetLength(1) - 1;){j = j + 1;if (pot[i, j].PotStu == PotStatus.PASSABLE){stepDir++;}else{escDir.Add(EscapeDirection.RIGHT, int.MaxValue);return;}}escDir.Add(EscapeDirection.RIGHT, stepDir);}LeftDown();Left();LeftUp();RightUp();Right();RightDown();//遍历哈希表,找到逃跑的最少步数foreach (DictionaryEntry entry in escDir){if ((int)entry.Value < min){min = (int)entry.Value;tempDir = (EscapeDirection)entry.Key;}}direction = tempDir;escDir.Clear();
}

围住神经猫--逃跑算法相关推荐

  1. 《围住神经猫》的逃跑路径算法

    关于<围住神经猫>的逃跑路径算法 <围住神经猫>是去年在微信上挺火的H5游戏,在学习unity3d的过程中我就想把这个游戏用我学习到的unity3d知识重新编写.神经猫的逃跑路 ...

  2. 蓝桥杯 算法提高 逃跑的牛(BFS)

    资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 农夫John的一头牛逃跑了,他想要将逃跑的牛找回来.现假设农夫John和牛的位置都在一条直线上,农夫John的初始位置为N(0≤N≤1 ...

  3. 可能是最难围住的神经猫——寻找必胜路径的算法实现

    标题借鉴了一下老罗的风格,哈哈(*^__^*) 原来围住神经猫游戏刚火的时候,恰巧当时正在学QML,顺手就给弄了一个,不知道大家还记不记得这个游戏,简单说就是设置障碍把中间的猫围住就获胜了(橙色圆即为 ...

  4. HTML5APP实战(1): 围住神经猫(一)

    2014年7月小伙伴们的朋友圈被一款名为"围住神经病猫"的小游戏刷屏.这只露着屁股.腰身细长的白猫,在手机屏幕中贱贱地扭动腰肢,一副欠扁的模样.之前学习到了一款WebAPP开发神器 ...

  5. 听完411头猪的哼哼,他们找到了理解“猪语”的算法 | Scientific Reports

    图片来源:Pixabay 来源  哥本哈根大学 翻译  闭诗林 编辑  魏潇 我们现在可以解读猪的情绪了.一个国际研究小组利用猪从出生到死亡的生命过程中收集到的数千份录音,首次在其一生各个阶段的大量场 ...

  6. 无惧秋招,您的NLP算法工程师魔鬼训练计划请查收

    自然语言处理无非是目前最大的风口,从Word2Vec.ElMo.GPT.Bert到XLNet, 我们见证了这个领域的高速发展以及未来的前景.互联网中的大量的文本以及IOT时代赋予我们的全新交互带来了这 ...

  7. python 决策树 math库 c45算法

    2019独角兽企业重金招聘Python工程师标准>>> 每周一搏,提升自我. 这段时间对python的应用,对python的理解越来越深.摸索中修改网上实例代码,有了自己的理解. c ...

  8. 算法取代了保释金:被抓能不能保释?先听系统怎么说

    方栗子 发自 凹非寺  量子位 报道 | 公众号 QbitAI 从明年10月开始,加州就没有保释金这回事了. 加州州长杰里·布朗 (Jerry Brown) 已经签署了SB10法案,废除现金保释制度. ...

  9. C#常见算法题目(面试准备)

    1.写出冒泡,选择,插入排序算法. //冒泡排序     public class bubblesorter     { public void sort(int[] list)         { ...

最新文章

  1. 周三多管理学第七版pdf_考研(管理学)相对好考的211院校推荐
  2. gitlab更新配置无效_GitMaster 发布 v1.11.0 版本,支持 GitLab 多级分组,Gist支持文件列表...
  3. 白盒测试之初识gtest工具
  4. 29个人,耗时84天,硬刚Python,实验结果如下。
  5. 逐步加深的异步操作(上)
  6. java接口安全怎么处理_Restful API 接口安全性设计
  7. Java中的传值与传引用
  8. 美国高校开源迄今为止最大新冠肺炎CT数据集
  9. 四部门联合约谈马云等蚂蚁集团有关人员,蚂蚁集团回应...
  10. 程序设计与算法----分治之归并排序
  11. 【1024开发者节】:2019科大讯飞声博会会议记录——AI+女性,AI+5G
  12. Unity2019中文补丁下载
  13. c语言程序设计全文阅读,C语言程序设计(谭浩强).doc
  14. 计算机截屏无法保存,win7电脑自带截图软件保存图片失败怎么办?
  15. javascript趣味钢琴小游戏(附源码)js+css+html
  16. 中国科学院大学计算机学院夏令营,中科院计算所2019年夏令营名单
  17. LOAM系列——LeGO-LOAM配置、安装、问题解决及VLP16测试效果(完结版)
  18. Unity导出视频/截图
  19. 7-4 使用递归输出杨辉三角形 (18 分)输出杨辉三角形,用户输入一个正整数n,输出n行的直角三角形的杨辉三角。要求使用递归函数实现
  20. 力扣算法——78_子集

热门文章

  1. 模拟器 android 升级,android – 如何在模拟器和真实设备上升级SystemUI.apk
  2. 基于springboot vue elementui新闻发布系统源码(毕设)
  3. C语言程序问答基础题5
  4. FastAdmin 如何部署到虚拟主机
  5. 精灵图,背景图缩放。盒子阴影,
  6. 阿里云上利用virtiope+colinux实现linux系统盘动态无损多分区
  7. Android 蓝牙游戏开发(一)
  8. [JavaScript实例解析]简易TODO List
  9. 产教融合 | 数字技术工程师培育项目-大数据工程技术人员开班啦
  10. 串行数字接口(SDI)