2021-03-14
首先,最重要的是:
1. 保持降序或者升序,顺序一定不能乱;
2. 每个相邻的格子之间的差尽量小,这样可以加起来;
3. 留出尽可能多的格子,空格子不够多就死了
该怎么做到上面三点呢:保持最边上一行塞满并且降序,紧接着的一行如果可以降序就降序,不行就升序。尽量保证一个角是2^k,边上的格子是2^(k-1)。同时在做决定移动格子的时候,最小化移动之后所剩的格子总数。
看起来会是这样的:

诶现在图片load不出来,load出来了我再加上= =
或者这样的:一边升序一边降序

首先分析2048游戏:
1.格子里的总数字会随着步数增加而以2或4地增加。所以,要达到2048,必须有足够多的步数作为支撑。即玩家坚持的步数越多,胜利希望也越大。
2.四个方向地位相等。
3.要持续游戏,需要方格之间的“密度”(即数字大小)相对一致。这样才能使得合并变得可能。
4.游戏系统选择一个空格随机出现2或4。所以当任何一个方块被移动时,它原来的位置都有一定概率出现新的数字,从而可能打乱玩家的安排。
基于以上分析,可以得到下面的想法:
1.使得方格之间的“密度”趋于一致。由于有一个最大的目标(即2048),在完成这个目标前,这个方格的数值是相当大的。为了使得方格之间“密度”趋于一致,我们需要尽量减少与之交接的格子数量。所以,一个最大的数只能放在角上。既然只能放在角上,那么就注定它不能移动(见分析4)。类似的,次大的数(如1024 512之流)只能放在最大数的直接邻域,且顺序固定或无大变化(如最底一行是2048 1024 512 256)。同时,由于角点处有两个方向(如左下角,有最左边和最下边两个方向),而达到目的只需要一个方向的排列就够了,所以我们可以舍弃一个方向(如舍弃最左边,即保留最底一行的排列是2048 1024 512 256,则“up”的操作被舍弃,否则会使得左下角最大数发生可能的位置变化,即我们只用三个方向完成游戏。只要控制好,可以保证不出现非up不可的情况,下面都基于舍弃up来实现)。同时,为了生成和将最大数压在左下角,left和down优先级相对比right高。
2.为了实现想法1,在达到目标前,我们需要保持这样的排列而无变化(注意,是无变化。即无论怎样操作最底一行的排列永远是类似2048 1024 512 256这样的大小顺序),我们需要保证左右移动时最下一行的排列不变,同时也是整个4乘4矩阵中最大的一排。所以,在选择left还是down的时候,当最下一排没有被填满时,用down。填满后视用left将最下一排合并,出空格后继续down,直到用left对最后一排压不出来空格。此时left和right随便用,但是要控制好不出现非up的情况。
3.不断重复以上过程。同时注意不断提高最下一排的密度。注意微调防止死。达到目标只是时间和耐心的问题。
总而言之,开局胡乱down+left,稳定后微调使得最下一排按序排列成等比数列,再按思路走就行了。一般2048用8分钟,斐波那契慢一点但也在15分钟内吧。完全无脑直接按,只有濒死状态才微调,很快又能出无脑按。
本方法不仅对4乘4传统2048有效,还对8乘8的65536以及4乘4的斐波那契也有效。因为我的分析与具体消数规则无关,也与尺寸无关。算法验证还在用matlab写,但估计没那么快做出来,时间有限,关键还是码力太差了?▂?。
标签组:
最新游戏
火爆手游
详情
体育运动丨2.97GB
详情
策略塔防丨61.62M
详情
冒险解谜丨96.84MB
详情
休闲益智丨228.72MB
详情
赛车竞速丨617.25MB
详情
角色扮演丨829.8M
详情
角色扮演丨99.0MB
详情
角色扮演丨462M
详情
角色扮演丨125.1MB
详情
动作闯关丨217.50MB
详情
休闲益智丨11.91MB
详情
策略塔防丨1.62GB
详情
经营养成丨622.39MB
详情
经营养成丨347.1MB
详情
冒险解谜丨164.24MB