《围住神经猫》最小步数技巧详解

陈佐 阅读:4374 2014-08-21 14:16:03 评论:0

最近又一款蛇精病游戏《围住神经猫》横空爆炸出世!无数神经病院的小伙伴争相玩耍,齐刷刷在朋友圈秀智商,根本是想停都不可能了。于是本组内除了本人无手机外,其他人均已经被!刷!屏!了!

点击这里直接玩!

围住神经猫最小步数和最优策略

《围住神经猫》开发仅用了一天半,美术一人,程序一人。但是可能很多人也都发现了,《围住神经猫》只是个老游戏换了画面。已知最早原作是日本游戏设计师伊東太郎2007年制作的“黑猫”( Chat Noir),当然原案风格和本作完全不同,本作实际上成功之处在于整体的外在包装正符合了其广大受众群的胃口。不论是,神经病,出逃,还是那只脑洞猫等设计元素对其成功拥有很大贡献。于是大概就是这样就被疯传了。

围住神经猫最小步数和最优策略

其实这游戏没有理论最小步数,因为初始点亮的格子是随机的,有小伙伴4步就围住神经猫了,纯属运气好!

所以,这游戏好玩的地方不是比拼最小步数,而是面对各种不同的开局都能找到解法啊!

定理1:如果你在猫边上2格之内布子,除非有很好的地形,不然猫必定从你身边跑掉。所以在开阔场地,你的棋子至少和猫中间隔2个空格。

围住神经猫最小步数和最优策略

设猫的目标是向右上开阔地逃跑。如果你走1,猫向右上走2,你再走5,猫走10……显然完全拦不住,猫直接往右上方跑走了。

如果你在4布点,猫还是向2移动,你走5的话和刚才一样了,走10的话猫走5,等等,还是不行。

但是如果在7布点,就不一样了。猫1,你8,猫5,你11,就拦在了猫前面,逼迫它转向。如果猫2,你可以13,等等,同样可以拦住。

定理2:当你在开阔场地布下第一子时,封锁线会形成于你的这个子和猫中线的靠你那一侧。你应当让盘上已有子力和你的新子位于这条线上。

围住神经猫最小步数和最优策略

图来自网络,假设猫只能往右上逃而不能往左下跑。

红色方块代表猫的起始点,绿色六边形代表你的开局第一子。红色数字代表猫需要那么多步才能跑过去,绿色数字代表你的子需要那么多步才能连过去。

显然,如果某个格子上红字小于等于绿字,表明猫会比你先到,那么朝那里布防就是没有意义的,会被突破。想象一下你的棋子是在追猫的狗。

而蓝线标记的,就是刚好红字大于绿字的那条线。

所以你在布子的时候不要太激进,和猫靠的太近会被绕过去。要尽可能在封锁线的我方一侧布子,远远地形成包围之势。

定理3:猫是“贪心”的,所以你的布子方位要挡在猫的前方。

有些人想耍小聪明,不堵前方而堵后面,寄希望于猫犯蠢。根据我们的观察,这是没有必要的,猫的走法是“贪心法”——当前局势下,哪一步最有助于它逃脱,它就走哪一步。注意是当前局势,它不会玩佯攻,不会有长远考虑,所以其实是可以预判的。

而且利用这个特点,还可以给猫下陷阱:留一个开口,任猫向那里逃跑,同时加固别的防线;在最后一刻把那里封死。

猜想1:在足够大的棋盘上玩家有必胜策略。

之所以会有这个猜想,是因为博弈论里有一个问题,叫做“天使问题”(Angelproblem)或者“天使与魔鬼”游戏。这是约翰·康威提出来的,就是那个生命游戏的康威。

围住神经猫最小步数和最优策略

在天使问题里,棋盘不是六边,而是标准的围棋盘;猫(天使)分级,一阶天使可以向3*3范围(周围8格内)没有魔鬼存在的任何一格移动,二阶天使可以向5*5范围内任何一格移动,等等。魔鬼可以向任何一个没有天使的格子里布子,有限步困住天使则魔鬼胜,天使无限存活下去则天使胜。

现在我们已经证明了:

二阶以上天使是有必胜策略的

一阶天使在32*33或者更小的棋盘上会输,否则也有必胜策略

如果天使的纵坐标永远不减少,或者距离原点的距离永远增加,那么会输。

微信围住神经猫“1步”作弊玩法

今天被“围住神经猫”的游戏在微信朋友圈刷票了~ 自己也试了试,运气好能在10步左右OK。然后点击别人分享的页面直接进入游戏状态,发现分享的时候仅仅是分享网页的title不一样而已,且击败的对手百分比=(100-步数)%。于是“作弊”了下,仅仅“娱乐”罢了。

原理很简单,分享的是一个网页url,于是自己生成一个html页面即可, title自己设置,当然想多少步就多少步,把原来网页的图片引用一份放到自己页面里,好让weixin抓取这个图片生成缩略图。为了让对方点这个url后跳转到原始游戏的url,可以让浏览器在onload时直接通过location.href跳转至原始游戏的url。然后分享这个网页的url出去即可。于是也就有了如下效果~ 不知为何缩略图没生成。

<script>

var imgUrl = "http://1251001823.cdn.myqcloud.com/1251001823/wechat/mao80.jpg";

var lineLink = "http://1251001823.cdn.myqcloud.com/1251001823/wechat/sjm/launcher";

var descContent = '在9×9范围内的格子中,使用色块围住白色神经猫。';

var shareTitle = '我用了1步围住神经猫,击败99%的人,你能超过我吗?';

var appid = '';

function shareFriend() {

    WeixinJSBridge.invoke('sendAppMessage',{

        "appid": appid,

        "img_url": imgUrl,

        "img_width": "200",

        "img_height": "200",

        "link": lineLink,

        "desc": descContent,

        "title": shareTitle

    }, function(res) {

    })

}

function shareTimeline() {

    WeixinJSBridge.invoke('shareTimeline',{

        "img_url": imgUrl,

        "img_width": "200",

        "img_height": "200",

        "link": lineLink,

        "desc": descContent,

        "title": shareTitle

    }, function(res) {

    });

}

function shareWeibo() {

    WeixinJSBridge.invoke('shareWeibo',{

        "content": descContent,

        "url": lineLink,

    }, function(res) {

    });

}

document.addEventListener('WeixinJSBridgeReady', function onBridgeReady() {

    WeixinJSBridge.on('menu:share:appmessage', function(argv){

        shareFriend();

    });

    WeixinJSBridge.on('menu:share:timeline', function(argv){

        shareTimeline();

    });

    WeixinJSBridge.on('menu:share:weibo', function(argv){

        shareWeibo();

    });

}, false);

</script>

后来发现微信有自己的分享时的API,就更简单了。随便一个给一个网页,设置好缩略图url,title和描述,以及点击后跳转的url,然后weixin内置浏览器打开的时候就会去调用相应的事件,比如分享给朋友、分享到朋友圈等。

api里面有一个appid,以为要向TX申请后才OK,后来发现暂时不填也暂时能OK。效果如下:


本文 陈佐博客 原创,转载保留链接!网址:http://chenzuo.net/post/237.html

标签:陈佐博客
可以去百度分享获取分享代码输入这里。
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

发表评论
搜索
排行榜
关注我们

支持博客公益捐赠