很多人都玩过2048,我就比较老套,因为我一向看不上这类单机游戏。但是就在某一天泡脚的无聊时光,拿了媳妇儿的手机,左看看右点点,莫名打开了2048。嗯... 这真是一款打发无聊时光的 "good game"。通过滑动来使得每行或每列相邻并且相同的数字相加而得到一个最大的数字,最后的数字越大,得分越高!于是,我在想,是否能像魔方一样,有一定的套路来帮助我们决定每一步该往哪个方向滑动最佳,以便获得最好的成绩呢?
2048是在4×4方格中玩的游戏。方格的每个位置都可能是空的,也可能是一个带有数字的方块。
开始游戏时,方格上会在随机位置产生两个方块,数字为“ 2”或“ 4”。每个方块都有10%的几率是“ 4”,否则为“2”。
通过将所有方块向某个方向(上,下,左或右)移动来进行游戏。这样做时,彼此相邻且一起移动的具有相同值的所有方块将合并成一个新的方块,该方块的值等于前两个方块的和:
进行滑动后,将在随机位置产生一个新的方块。新方块有 90% 的几率为 ”2“, 10% 的几率是 ”4“。
然后,继续进行游戏,直到方格中不再有能移动的方块为止。
按理来说,这游戏的目标是达到一个值为“ 2048”的方块就结束了。但是,we never stop,我们可以继续进行游戏,来争取更大的胜利。理论上,方块最大值为 “ 131072” 。
想要解决这个游戏,是个灰常因缺斯汀的问题。因为我们不仅要正确预测每个新方块产生的位置,而且还要正确地预测它是“ 2”还是“ 4”。这是随机事件,理论上每一次都预测正确是不可能的。
因此,不可能有一种算法每次都能轻松而正确解决难题。我们能尽可能做到的玩好这个概率游戏,确定每个步骤的最佳操作。
不管什么时候,我们只能采取四种行为,然后面临的挑战是确定这四项举措中哪一项将取得最佳的长期效果。
我们的算法基于 [Expectimax] 算法,它本身是 [Minimax] 算法的一种变体,但是树的路由会根据它们发生的可能性进行加权。
从本质上讲,我们将游戏视为两人游戏:
基于此,我们可以根据每个动作发生的概率对每个动作生成结果树。然后,这可以为我们提供确定哪种人员举动可能给出最佳结果所需的详细信息。
游戏玩法的一般流程:
我们可以在“添加随机方块”过程中看到游戏的随机性——既要找到随机的正方形来添加方块,又要为方块选择一个随机值。
然后,我们面临的挑战是在“确定下一步行动”步骤中确定要做什么。这是我们玩游戏的算法。
总体上看似看似简单:
我们需要做的是模拟每一种可能,确定哪个滑动给出最佳结果,然后使用它。
因此,我们现在将算法简化为模拟任何给定的移动并为结果生成分数。
这是一个分为两部分的过程。第一步是看是否可以移动,如果不能移动,则以“ 0”的分数提前终止。如果可以移动,那么我们将继续进行真正的算法,在该算法中确定移动的效果如何:
到目前为止,算法的主要部分是模拟滑动,然而关键的问题是:如何为每个可能的移动进行评分。这下就是 Expectimax 算法发挥作用的时候了!
我将模拟两个玩家的所有可能动作,并进行几个步骤,然后看看其中哪个能带来最佳结果。
对于人类玩家而言,只有“上”,“下”,“左”和“右”的这四个动作。
对于计算机则是,将“ 2”或“ 4” 方块随机放置在空白的位置:
该算法是递归的,每个递归步骤只有在距离真实游戏中的实际移动有一定深度时才会停止。这样导致流程图会循环返回自身,但实际上我们将这么做:
完成此操作后,我们将所有计算出的分数相加,这就是我们要从当前游戏板上进行的移动的最终分数。因为我们执行了四次操作(从当前游戏界面开始,每个可能的动作都获得一个),所以我们最终得到了四个分数,其中得分最高的就是应该做出的动作。
此时,剩下要做的就是计算方格的分数。但还需要考虑,如何从这个位置继续得分。
通过添加几个因素以及适当的权重,可以实现很多方法。例如:
现在我们知道了算法的工作原理,接下来探索一些详细描述算法的伪代码。
我对游戏的实际玩法并不感冒,只对确定移动的算法有点兴趣,所以从这里开始:
现在到了这样的步骤:从第一个方块开始,模拟每一个可能的动作,并返回得分最好的那一个。因此我们需要为新模拟的方格生成分数。
因为使用的是递归算法,所以我增加了一个深度限制,用来停止,否则可能会无止境运行下去。
这又是一个递归,模拟了每个人移动一定数量的步骤,并确定哪些移动可以拿到最佳的结果。
剩下的唯一事情就是为移动后得到的每个方格,计算出最终分数。当然,这也没有十全十美的算法,不同的因素会造成不同的结果。
到目前为止,我们已经有了一种算法来尝试解决游戏问题,但是它效率不高。由于过程的特性,总是会有一定程度的重复。
我们已经在上面的算法中做了一些优化,不处理对游戏没有任何影响的移动。但是,我们还有其他方法可以减少工作量,例如跟踪移动的累积概率,以及在移动的概率太低时停止。
我们还可以动态确定深度次数的限制。上面的伪代码的硬编码限制为3,但我们可以在计算开始时根据方格的形状动态计算该限制。
此外,由于可以多次重新访问同一方格的位置,因此我们可以记住这些位置并缓存这些位置的分数,而不必每次都重新计算它们。潜在地,我们可以提前生成每个方块可能的位置,但是最多有2048个方块,281,474,976,710,656个可能的位置,因此这可能不可行。
但是,我们可以做的最重要的优化是调整生成方格分数的算法。计分的因素和权重与我们的算法发挥得如何直接相关。
2048是一款非常有趣的游戏,可以尝试破解。虽然没有完美的方法,但是我们可以用一些启发式的方法,来探索游戏的最佳路径。
系统工具 6.79M
健康上网专家app是一款帮助家长监护孩子健康上网的手机应用,配合家庭pc版一起使用。具有自动防范有害信息、控制上网时长的防沉迷软件。有助于孩子对上网时间的自我控制,减少被网络不良信息的毒害,健康快乐成长。功
影音播放 17.3M
songtaste手机版是一款非常好用的音乐分享软件,用户可以进行各种各样的音乐分享,而且还有音乐试听、欧美音乐、独立音乐等等,让用户的听歌更加的多样好用,如果你喜欢音乐的话,那么这款软件相信你一定会非常的喜欢,
系统工具 220M
铁三角audiotechnica蓝牙耳机是方便实用的的耳机app,软件功能强大,用户可以根据个人习惯调节功能件,还能调节音量大小和音响效果,软件内含定位功能,不用担心丢失,软件兼容性很强,支持多款耳机型号,喜欢的朋友快来
系统工具 33.4M
qq拼音app,一个能够支持发语音包的输入法软件,这个输入法可真的是太接地气了,自己的联想功能,总是能够给你一个出乎意料的惊喜,各种无厘头的表情包免费使用,让你即使没有网图,也能与好友斗的欢天喜地。欢迎感兴
系统工具 39.4 MB
自动脚本大师APP最新版是一款提供脚本编辑工具的软件,提供有脚本大师教程可以让用户通过对脚本大师教程内容的查看学习来掌握到脚本编辑和执行使用的流程步骤,帮助用户轻松制作脚本使用,用户可以新建任务来将任务在
商务办公 11.5 MB
经济学人app这是一款能够获取到大量要点经济全新资讯新闻报道服务应用软件,内置十分不错经济学知识资讯推荐数据,大家可以获取到很多独特精选文章数据内容,轻松即可满足用户多种文章阅读需求,更多优质英语知识教育
影音播放 74.4M
imaxmv韩剧tv,即国内最火热的韩剧影视平台韩剧tv软件,在这里你可以看到最新最热的韩国电视剧、电影、综艺视频,支持每日打卡签到,对于好剧可以一键收藏,还有不少好剧每日推荐,让您可以每日都不缺精品韩剧看哦~imaxmv
系统工具 7.1M
酷软壁纸是一款手机美化软件,上面有非常多类型的壁纸,都是高清免费的,你可以直接下载使用。同时它还提供多种模板,你可以根据自己的需求选择,这对于喜欢发朋友圈的人来说是非常有帮助的,一定能收到很多点赞。快
社交聊天 134.8 MB
亲亲聊APP最新版本是一款推荐同城陌生人在线交友聊天的软件,用户可以在这里与同城的陌生人进行社交互动,拓展自己的朋友圈认识更多有缘人,同城交友还能邀约对方线下见面约会帮助更多单身人士能够快速脱单,在使用软
社交聊天 197.2M
桃华app,音视频互动交友平台,发现附近小伙伴,随时随地在线聊天,轻松沟通,便捷交友,认识更多志趣相投的人,聊天交友更简单。