纸牌接龙的成就 BECOME IMMORTAL 比龙腾部分通关成就 EMPLOYEE OF THE MONTH 还要多啊,果然深圳 IO 是纸牌游戏吗
但是—— BECOME IMMORTAL 需要通关100盘纸牌游戏,然而对于没有远见运存不足的普通人类来说,这通常需要花很久很久……这对于我来说是不可接受的,于是,就让计算机来自己解决一切吧!
对了刚才没提到这个游戏的玩法,这个游戏有三种花色,每种花色 1~9 共 9 张牌,除此之外还有白板,发财和红中三张字牌各四张,和一张花牌。游戏开始时,所有牌打乱放在下方的八个堆中,你需要将所有普通牌按照1~9的顺序垒到右上方的区域内,将花牌移动到中上方的区域内(花牌露出来的时候会自动移动),将所有字牌并到左上方的三个槽位里。

这个游戏有两种操作,一种是移动,你可以将牌堆顶的一些叠起来的牌叠到另一堆里的最后一张(堆顶)牌上,可以叠当且仅当后面的牌的数字是前面的牌的数字减一且后面的牌和前面的牌的花色不同。你还可以将单张卡片移动到空的槽里或移动回来,槽里不能叠。你随时可以将一张堆顶的正确顺序的牌移动到右上角区域。
第二种操作是合龙,当四张相同字牌都露出来(位于堆顶或槽位里)的时候,如果这时候有空闲的槽位或者这种字牌占据了一个槽位,就可以把这四张这种字牌合起来翻面放到一个槽位里,这个槽位之后就不能再放其他的东西了。
(如果你还是没看懂怎么玩的,可以看看这个人的文章:https://zhuanlan.zhihu.com/p/705218285)
这个游戏不允许撤销,所以玩起来很容易陷无解的死胡同,甚至有些开局局面本来就无解,所以正常赢一局耗时挺久的……
我搜到的自动解这个游戏的程序只有这个:
但是他代码闭源我拿不到,而且他使用了一种深度很浅的启发式搜索,导致程序可能会在无解的初始条件下耗费很多时间,或是走着走着把自己走无解了。同时,这种类似象棋类游戏的走一步算一步导致他的程序通关一次耗时很长。
那有没有从开局直接获取到如何通关的方法呢?有的有的,我搜到了这个开源项目:
这是一个网页版的自动解决游戏的程序,网站在这里:https://smankusors.com/projects/shenzhen_solitaire_solver/,他使用了启发式搜索,定义了当前局面,转移方案和优先级,然后用优先队列维护所有搜到的可以到达的局面个数,但是他是网站形式,自己输入东西还是太慢了。
于是我参考他的代码进行了 js 到 python 的移植,使用 pyautogui 截图,使用 opencv 的 matchTemplate 判断每个固定位置的卡牌是什么牌,将卡牌状态记录,然后运行 solve,得到方案后使用 pyautogui 执行方案即可。
最后我的代码在这里,之后有空往B站上传一份:
深圳 IO 是一款 编程游戏 纸牌游戏 编程游戏