# 智闯鬼屋
## 问题一
总体思路: 第一步 机器人猜想鬼所有可能的位置作为知识库 第二步 输入机器人的位置和寒意值,不断更新知识库 第三步 通过知识库来做决策,前进 or 停止
![](https://www.writebug.com/myres/static/uploads/2022/4/30/a74a9c4af0cf7ea52760aaf4e50544bf.writebug)
## 具体操作步骤:
![](https://www.writebug.com/myres/static/uploads/2022/4/30/99d1ee3ca1308b29373d6955df367ef2.writebug)
1. 通过循环,遍历鬼的可能性,构建知识库
2. 初始化幽灵,机器人。 这里的幽灵和机器人是通过面向对象的编程来实现的,因为幽灵和机器人的特征明 显,而且数据和函数封闭起来调用,会十分方便。具体的 Ghoust,,Robot 函数在文件 ghoust_robot.py 中
![](https://www.writebug.com/myres/static/uploads/2022/4/30/61637e8c214566fb6c19ed0aee4403b3.writebug)
3. 只要搜集的信息越多,知识库就越接近真实的鬼的位置。 所以我让鬼走右、上、右、上这四步来到(3,3),这样能使鬼探测的区域最大。 为了方便写,直接将这四步路放进 way 的数组中 Select_ghoust 这 个 函 数 是 用 来 更 新 知 识 库 的 , 具 体 在 文 件coolanddead_imagineghoust.py 中
![](https://www.writebug.com/myres/static/uploads/2022/4/30/4f33c594e5ec0d86c1a0c59f1ce24937.writebug)
\4. 之后就可以自动走了,判断下一步是否会撞鬼或者越界,如果不撞的话,就可以走
![](https://www.writebug.com/myres/static/uploads/2022/4/30/debef5b287691f5da4b8c9264483a925.writebug)
这一步,直到机器人走到[6,6]; 5. 让机器人只能向右或者向上走是符合 A 星算法最优的,A 星算法实现起来不太容易, 所以就直接让机器人只能向上或者向右走
![](https://www.writebug.com/myres/static/uploads/2022/4/30/e152030c970c61bc9e2f03936be5cb6b.writebug)
\6. 最后写个函数打印路径即可 最终结果输出路径(图比较长,所以分了三次截图)
![](https://www.writebug.com/myres/static/uploads/2022/4/30/46fb7022c30d93524c38dcd2caf484b5.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/4/30/01bef0a8ae6d36c6583e73e7a679b4fa.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/4/30/4b8c9d46cfbe97e2eaf87e9c5f273cb5.writebug)
## 问题二
总体思路: 总体思路与第一步类似,只不过要多判断一下是否撞墙、是否陷入死角、是否进入老路
具体操作步骤: 1. 将图中的墙壁读入列表,为了方便调用与代码整洁,墙的初始化函数 wall()定义在 wall.py 文件中,方便调用。墙在两个房间之间,所以用 0.5 来确定墙壁的位置,比如
![](https://www.writebug.com/myres/static/uploads/2022/4/30/517229e5cb832c54872f9863d0372aa8.writebug)
2. 墙壁定义完之后,初始化鬼与幽灵,与第一问相同
3. 仍然是使用 A*搜索的原则,即只进行向右、向上或者停止动作,(向右或者向上优先级相同)(但没有真正实现 A*搜索)
![](https://www.writebug.com/myres/static/uploads/2022/4/30/cb94eaf4e5c8b12ac05b01cbc5808e44.writebug)
4. 因为我的知识库是非常聪明的,不会出现被鬼卡两步的情况;因为鬼只有一种可能 吃掉机器人,最坏的情况下,机器人停留一步就知道这个鬼是什么情况了,所以停 留两步就一定是卡进了死胡同,那就让他退回去叭
![](https://www.writebug.com/myres/static/uploads/2022/4/30/b5212e1906de5a92a6d3d9210108935a.writebug)
\5. 然后记录所有的路径和时间耗散,排序,计算成功率,得到最短的两条路径
![](https://www.writebug.com/myres/static/uploads/2022/4/30/483be223eda54b913d9ececa0fe8b690.writebug)
6. 结果发现,这种方法成功率比较低,调试发现,这种方法容易停在沟沟角角,从而 被鬼撞死,于是加入一个判断,就是如果停一步会死,那就保命要紧,哪个方向能 走就往哪个方向跑
![](https://www.writebug.com/myres/static/uploads/2022/4/30/4592608f0b37d0f0b37bc6730a49f81f.writebug)
\7. 最终结果成功率变为了 1,但是平均路径耗散也大约提高了 1,
![](https://www.writebug.com/myres/static/uploads/2022/4/30/5fe1df2013de0c95e721b370d85ee7a3.writebug)
\8. 也许这就是要在时间与准确率之间权衡叭
问题三
问题三的总体思路:
1. 让机器人上下左右随机走路
2. 遍历足够多次
然后将机器人的路径与鬼行走路径比对,如果有一个路径相同,那就是一条失败的 路径 4. 将成功的路径添加进数组,然后排序 5. 得到路径耗散最低的一条路,打印出来 这个方法非常笨拙,但是有了问题一问题二的基础,这种方法是最容易实现的
具体实现方法: 1. 初始化鬼和机器人的方法和问题一问题二相同
![](https://www.writebug.com/myres/static/uploads/2022/4/30/79087c88f9a0af83045e23eb9ee6c376.writebug)
2. 通过,控制 i 和 j 的大小,控制计算次数,j 要大于 10,因为最短的路径就是 10
3. 清理数据,把重复的路径、遇到鬼的路径去掉,排序得到前三短的路径(但是问题 只要求了最短的)
![](https://www.writebug.com/myres/static/uploads/2022/4/30/f4c67a6e923e0aa99879f5ac5a1932ad.writebug)
4. 最后打印出路径即可,打印方法与问题一一致
![](https://www.writebug.com/myres/static/uploads/2022/4/30/49bd189c787bc15837ab7a3fd7cb27c0.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/4/30/64c4cbaefb80e382a51a248187eca90c.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/4/30/8b6d242201a76eb67978c2793e6531a7.writebug)
总结: 1. 我将函数打包成 py 文件,在写代码时直接 import 文件,这样使主函数行数非常少, 而且更加简洁;但是打包时就要注意函数的编写,尽量让函数独立,这样可移植性 才强
2. 问题三解决的非常笨拙,使用的是运算时间空间换取求解效果的方法,A*搜索实现 起来效果应该非常好,但是我尝试了并没有写成,所以还是采用第一版的暴力穷举 法;以后有时间将 A*搜索开发出来。
3. 问题一与问题二解决的较好,主要是因为使用了知识库的推理。其中在编写代码过 程中,最需要注意的是深层拷贝的理解,我就曾因为这个知识没能理解,浪费了 1 个 小时的调试时间
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
100011929-基于Python实现(控制台)智闯鬼屋小游戏.zip (10个子文件)
neu-basic-ai
LICENSE 1KB
wall.py 536B
instruction.pdf 587KB
coolanddead_imagineghoust.py 2KB
wenti2_main.py 14KB
wenti1_main.py 3KB
wenti3_main.py 3KB
iswallandisold.py 952B
ghoust_robot.py 2KB
README.md 6KB
共 10 条
- 1
资源评论
神仙别闹
- 粉丝: 2704
- 资源: 7645
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- MySQL是一种广泛使用的开源关系型数据库管理系统
- MySQL是一种广泛使用的开源关系型数据库管理系统
- MySQL是一种广泛使用的开源关系型数据库管理系统
- 012c3c44c465a099108e0d8570b86a70.zip
- 基于Java和JavaWeb的网上商城项目设计源码 - myshopping
- 基于Vue和JavaScript的书城项目设计源码 - Demo12.18
- wp2787778-map-wallpaper.jpg
- 基于Javascript的杜王町打工人仓库管理系统设计源码 - 杜王町打工人的仓库
- 基于C#的报销材料合并工具设计源码 - 报账材料合并
- 基于Java的驾校一点通后端服务设计源码 - jiaxiaoServer
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功