我来写个带推导过程的答案吧。2048的玩法就不赘述了,先来看看相关的规则,因为是Gabriele Cirulli让这个游戏火起来的,以他的源代码为准(Gabriele Cirulli的版本的地址:
2048
)。
记分规则
:在
2048/game_manager.js at master · gabrielecirulli/2048 · GitHub
中的167行:
self
.
score
+=
merged
.
value
;
分数就是累加游戏过程中新合成方块的数值。
新方块出现的规则
:在
2048/game_manager.js at master · gabrielecirulli/2048 · GitHub
的71行:
var
value
=
Math
.
random
()
<
0.9
?
2
:
4
;
新方块的取值集为{2, 4},其中4出现的概率是0.1。
题主的第一问:
如果到2048不继续,那么最高分是多少?
2048肯定是由两个1024合成的,所以在合成2048的这一步,记分是2048,同样1024也是由合成得到的,所以在得到两个1024的这两步,积分是1024*2=2048,以此类推,在>4的情况下,每一步分解的逆过程都会积2048分。注意到题主问的是理论最高分,我们当然希望尽可能多的合成新方块,所以不希望4是直接生成的,应该都是由2合成的。假设题主运气足够好,玩的过程中出现的新方块都是2,那么基于以上推导,从2一路合成到2048,理论上的最高分为:
\[2048\times \left( {{\log }_{2}}\left( 2048 \right)-{{\log }_{2}}\left( 2 \right) \right)={{2}^{11}}\times \left( 11-1 \right)=\text{20480}\]
对于任意从2开始合成的\[{{2}^{N}}\]
这个公式可以推广为:
\[{{2}^{N}}\times \left( N-1 \right)\]
题主的第二问:
如果继续,那么最高分是多少?
要回答这个问题首先要来看2048理论上能达到最终布局是怎么样的,假设能达到的最大的数值为\[{{2}^{N}}\]
,那么在最后一步合成\[{{2}^{N}}\]
时一定是占两格的两个\[{{2}^{N-1}}\]
,那么对这两个\[{{2}^{N-1}}\]
做最小的展开,也就是保持一个不变,另一个展开为两个\[{{2}^{N-2}}\]
……如下所示:
\[{{2}^{N}}\xleftarrow{\text{merge}}{{2}^{N-1}},{{2}^{N-1}}\xleftarrow{\text{merge}}{{2}^{N-1}},{{2}^{N-2}},{{2}^{N-2}}\xleftarrow{\text{merge}}\cdots \xleftarrow{\text{merge}}{{2}^{N-1}},{{2}^{N-2}},\cdots 16,8,4,4\]
所以依次类推如果要合成\[{{2}^{N}}\]
,则需要一直展开一个相邻的方块序列直到游戏能产生的方块值,其中序列长度由要展开的级数的初始值决定,比如要展开到\[{{2}^{N-M}}\]
,则需要的序列长度是\[M+1\]
,因为游戏一共16个格子,所以\[M+1=16\]
,则\[M=15\]
。考虑到需要最大值,所以认为在这样一个序列中,游戏产生的方块是两个4,那么\[{{2}^{N-M}}={{2}^{N-15}}={{2}^{2}}=4\]
,则\[N=17\]
,所以游戏能达到的方块最大值是\[{{2}^{17}}=\text{131072}\]
。同样道理,当一个131072已经产生之后,还剩下15个格子,那么这种情况下能产生的最大值为65536,依此类推,14个格子能合成的最大值是32768,……所以理论上最大值的情况一定是前15个格子的值依次为\[{{2}^{17}},{{2}^{16}},{{2}^{15}},\cdots ,{{2}^{4}},{{2}^{3}}\]
,也就是\[131072,65536,32768,\cdots ,16,8\]
,而最后一个格子是2或者4。前面好多答主也贴过最后的局面,我这里也贴一例(图用我自己写的
蛋疼99行代码Python版2048
画的):