最近迷上了一个小游戏,消灭星星,想到能否用计算机自动处理,一开始觉得很容易,但实际着手后发现比较困难。其中难点在于:
l 变化太多,无法在短时间内穷举。
l 局部影响全局,但又不能决定全局。局部最优不代表全局最优
l 对每个状态没有太好的评估函数,即我们无法简单的比较那个状态好,那个状态差。
在这几点上,POPSTAR和围棋很相似,当然规则上比围棋要简单多了,维度上也比围棋小,可以视为简化的围棋。在优快云网站上发现有人有同样的兴趣,但后来就没有人回复了。
http://bbs.youkuaiyun.com/topics/390145455?page=1#post-395243752
我做了一个小程序,大致的原理是,用四叉树找到所有可消除的块,然后根据块的大小,位置,颜色得到评估指标,并向下搜索一层,根据下一层的状态再进行评估排序,得到评估比较高的状态再进行处理。
由于还没有实现更自动化的方法,因此整个游戏的流程如下:
手机助手截屏-》自动图像识别生成文件-》自动处理文件-》手工操作手机完成,但是后来由于手工输入错误,导致没有达到20万分就结束了,一共进行了54关,时间限制为每题10秒的时间。每个题目的平均分大约为3800,还不足以无限续关,但一般可以达到20万分左右,可以向别人炫耀一下了,呵呵(反正周围的人很少能自己玩到10万分,而用这个程序理论上可以到40万分)。
题目放在了http://download.youkuaiyun.com/detail/firefight/5889619,有兴趣的可以自己编程试试。
消除星星的规则在上面的第一个链接中有,补充几点如下:
维度为10*10,颜色种类五种,分别为红,黄,绿,蓝,紫
同颜色的连接在一起的块可以消除,消除的分数为5*(N^2),N为消除的块数
剩余BONUS的公式为2000-20*(N^2),N为剩余的块数,N<10(N>=10后BONUS为0)
过关分数要求为
1000 |
3000 |
6000 |
8000 |
10000 |
13000 |
15000 |
17000 |
20000 |
20000以上都是每关增加4000分,因此如果平均分为4000分的话,理论上可以无限续关。