圈小猫游戏

news/2024/11/26 0:27:24/

前言

我之前写过一篇关于圈小猫游戏的文章,写了一半没有写完,但已经大致把我的容错值理论表达出来了。感觉由于个人学术能力不足,还是没有把这个游戏讲清楚,或者说文章太过于理论化了,难以真正应用在游戏里面。这篇文章希望通过一些简单的表达,讲清楚圈小猫游戏的具体获胜方法。

圈小猫游戏介绍

圈小猫游戏介绍
如图所示,在一个11*11的接近正方形的棋盘上,每个格子按照六边形规则排列(即每个内部的格子都与六个格子相邻)。最中间是小猫的初始位置,它想逃出棋盘。而我们不想让它逃出棋盘,所以要利用手中的棋子和初始障碍物(深色格子)围住它。执棋者先手,小猫后手。
这个游戏可以一人扮演小猫,一人下棋,两个人玩。也可以电脑扮演小猫,跟电脑玩。下面是我用matlab写的游戏代码:

axis([1 22 1 11])
hold on
p=zeros(22,11);
for ii=1:11if (mod(ii,2)==1) for j=1:2:21 plot(j,ii,'c.')endelsefor j=2:2:22plot(j,ii,'c.')endend
end
x0=12;
y0=6;
h=plot(x0,y0,'r*');
p(x0,y0)=2;
x=x0;
y=y0;
for ii=1:8 %%8表示初始障碍物的个数,初始障碍物越多越简单,可以自己调节难度x1=fix(rand*21)+1;y1=rand*10+1;if (mod(x1,2)==mod(fix(y1),2))y1=fix(y1);else y1=ceil(y1);endp(x1,y1)=1;plot(x1,y1,'k*');
end
t=2;
while (1<x&x<22&1<y&y<22)[a,b]=ginput(1);a=round(a);b=round(b);while (mod(a,2)~=mod(b,2))s="你的输入不合法!请重新选择你要设置的障碍物的坐标"[a,b]=ginput(1);a=round(a);b=round(b);endplot(a,b,'k*');p(a,b)=1;c=0;t0=0;if (t>6) t=t-6;endif (t<4)t=1;elseif (t==4) t=2;elseif (t==5) t=3;elseif (t==6) t=4;endwhile (c==0)t0=t0+1;if (t>6) t=t-6;endif (t0>12) break;endif (t==5) x=x-1;y=y+1;if (p(x,y)==1)x=x+1;y=y-1;else c=1;p(x,y)=2;endelseif (t==4)x=x+1;y=y+1;if (p(x,y)==1)x=x-1;y=y-1;else c=1;p(x,y)=2;endelseif (t==6|t==0)x=x-2;if (p(x,y)==1)x=x+2;else c=1;p(x,y)=2;endelseif (t==3)x=x+2;if (p(x,y)==1)x=x-2;else c=1;p(x,y)=2;endelseif (t==1)x=x-1;y=y-1;if (p(x,y)==1)x=x+1;y=y+1;else c=1;p(x,y)=2;endelseif (t==2)x=x+1;y=y-1;if (p(x,y)==1)x=x-1;y=y+1;else c=1;p(x,y)=2;endendif (c==0) t=t+1;endendif (t0>=12)break;endh.Color='c';h=plot(x,y,'r*');x0=x;y0=y;
end
if (t0>=12) s="恭喜你,成功了"
else s="很抱歉,你失败了"
end

代码复制到matlab里面,用实时编辑器运行就能玩了。红点表示小猫的位置,黑点表示初始障碍物,蓝点表示可以设置障碍物的位置。用鼠标点击蓝点表示下一步棋。游戏界面如下:
在这里插入图片描述
关于小猫的行走逻辑,我只是按照我个人的理解进行了模拟,可能并不是最优的走法。为了降低代码复杂度,判定获胜的标准为小猫一步也走不了了,所以即使有时候肉眼可见地把小猫围住了,仍然需要继续走。

圈小猫游戏策略分析

很多人在初次看到这个游戏的时候,往往会在离小猫很近的地方去围堵。其实这样做很不好,因为这个棋盘的特殊性,小猫可以有非常多选择,所以离太近,小猫很容易逃出去。玩这个游戏,要有大局观。可以发现,要围住小猫,就要形成一个很大的包围圈,使得小猫无论往哪走都逃不出去。而我们就要把棋子都用在这个包围圈上,不在其它地方浪费棋子(因为本来步数就很有限)。经过一些理论分析,可以证明,这个包围圈是越大越好的(证明略)。一个比较容易想到的地方是,这个包围圈上有更多初始障碍物,肯定就越好(可以证明,如果一个初始障碍物也没有,小猫是必胜的)。于是我们的策略就是,在下棋之前,先根据初始障碍物,在脑海中想象一个包围圈,这个包围圈尽量大,尽量包含更多初始障碍物。
以下图为例,白棋围出来的包围圈是一种解法。黑线画出来的包围圈是最优解法,充分利用了棋盘和初始障碍物。
最优策略
这个包围圈是一个多边形。需要注意的是,在脑海中构想这个多边形的时候,一定不要出现锐角(在图上画一画就知道了,如果是锐角的话,把顶点去掉仍然是一个包围圈)。一般来说,包围圈需要包含至少3个初始障碍物,才能围住小猫(这个3是理论和经验结合,得出的一个粗略结果)。

总结

这是一个很好玩的游戏。我第一次玩这个游戏的时候,连输了好几把都没找到方法。玩这个游戏,需要一定的大局观。在掌握方法之前,小猫很容易就逃出去了。但是在掌握方法之后,可以大大提高胜率。这一篇文章比较偏应用,关于这个游戏更多的理论研究,可以看我的另一篇文章(点这里)。


http://www.ppmy.cn/news/307400.html

相关文章

刘强东和他的四个梦想

Python实战社群 Java实战社群 长按识别下方二维码&#xff0c;按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群▲ 作者 | 赵云合 来源 | 电商之家&#xff08;ID&#xff1a;iechome&#xff09; 转载请联系授权&#xff08;微信ID&#xff1a;laodia…

闲谈“自我认知“

注: 纯记录个人此刻想法,无主题,瞎写,不保证有人看通我写的啥 0 对于一个人的大脑活动,应该主要有四个重要部分情绪,动机,逻辑,固执 其中情绪是最高决策,动机和人的欲望有关,逻辑是理性思考,固执拒绝某信息输入,各自互相双向连接. 当你听一个励志演讲的时候是不是十分激动,情绪…

“抓住神经猫”的2D游戏创作

经过一阵子的学习&#xff0c;再次上传一份小游戏&#xff0c;叫“抓住神经猫”的游戏&#xff0c;通过二维数组&#xff0c;实例化出场景并进行游戏&#xff0c;直到围住神经猫或者让它逃脱为止。 首先呢&#xff0c;我把用到的图片上传&#xff0c;然后感兴趣的朋友可以保存…

文本挖掘学习笔记(二):文档信息向量化与主题关键词提取

注&#xff1a;学习笔记基于文彤老师文本挖掘的系列课程 全文基于《射雕英雄传》语料库&#xff0c;下面是读入数据的一个基于Pandas的通用操作框架。 读入为数据框 import pandas as pd from matplotlib import pyplot as plt %matplotlib inline # 有的环境配置下read_tab…

转换接头PL8000V-B 0-70MPa

校验台PL8000-TH 0-70MPa 量程PL8000V-B 转换接头PL8000V-B 0-70MPa 数字压力表PL8000T 0-10MPa 友谊森林奇遇记 小故事网 森林的故事   在一片森林中&#xff0c;有一群小动物快乐地生活着&#xff0c;过得无忧无虑。 有一天&#xff0c;来了一个巨人&#xff0c;他把整…

七夕节赚取徽章啦

*七夕来袭&#xff01;是时候展现专属于程序员的浪漫了&#xff01;你打算怎么给心爱的人表达爱意&#xff1f;鲜花礼物&#xff1f;代码表白&#xff1f;还是创意DIY&#xff1f;或者…无论那种形式&#xff0c;快来秀我们一脸吧&#xff01; 记录一起走过的那些日子 今天是…

Android 安卓益智休闲源码

分享104个益智休闲PHP源码&#xff0c;总有一款适合你 链接&#xff1a;https://pan.baidu.com/s/1ZqvTmaOWBN_t-D8zeL1l5Q?pwdexck 提取码&#xff1a;exck 下面是文件的名字&#xff0c;我放了一些图片&#xff0c;文章里不是所有的图主要是放不下...&#xff0c;大家下…

摸鱼,我是认真的

苏生不惑第370 篇原创文章&#xff0c;将本公众号设为星标&#xff0c;第一时间看最新文章。 今天分享几个有趣好玩的摸鱼网站/app &#xff0c;摸鱼&#xff0c;我是认真的。 童年游戏博物馆 这个网站收录了各种童年记忆游戏&#xff08;冒险岛&#xff0c;超级马里奥等&#…