源代码的链接可以在最下面找到,源代码中的2048算法包含界面的开发,但本次关于2048算法的讲解不包含界面的开发。
这个算法是我自己思考出来的,没有借鉴其他人的代码,希望大家能从中学到一点东西。算法的整体内容非常简单,主要由两个函数构成,但是在考虑这两个函数之前是什么之前,我们先考虑,怎样让一行四列的数字,完成一次2048模式的移动。比如
[4,2,2,0]
在2048中,如果我们要移动到右侧,该怎样移动。我们可以把这个过程分为两个步骤来实现。
第一个步骤,我们把该合并的块都合并起来。即我们要得到
[4,0,4,0]
第二个步骤,我们把所有的数字都移动到右侧,不留空格。即我们要得到
[0,0,4,4]
第二个步骤非常简单,我们主要考虑的就是第一个步骤的实现。2048,一次移动只有砖块上的数字相等才能合并,从这个点出发,我们只要寻找相等的砖块即可,如果找到两个相等的砖块,且他们的中间没有任何砖块相隔,就合并起来。
在四个砖块都是未知数的情况下,我们需要知道第一个有数字的砖块(即数字不为0)的位置。
我们给出一个简单的函数用于实现它。
def _2048_FindFirstNumber(start_pos:int,row:list) -> int:
''