实际上,想要开发出一个单独的4*4的2048并不难,但如果要开发出能够任意调节地图大小的2048,还是带图形界面的那种,那就涉及到很多知识。
3*3的界面
4*4的界面
甚至还有10*10的界面...
显然,对于一个带图形界面的程序来说,如果我们要写一个窗口,必先将所需的控件一个个拖到窗口,排列,然后一个个写代码。
所以,对于n*n的地图,难道每个窗口都要重写一遍代码吗?
NO!
让我们看看,这个程序是怎么实现生成n*n的地图的。
这是一个地图类,保存了Tiles(按钮),Matrix(地图本体,即一个矩阵),以及Size(尺寸大小)
底下的成员函数则是各种必需的方法,例如JudgeLose()判断是否无路可走,Move()来相应每一次按键操作,Initialize()用于初始化......
Tile类用于规定每个“格子”。对于这个类来说,最重要的莫过于如何确定大小以及在窗口上的位置。
让我们看Resize()方法,这里我经过反复调试,写出了一个宽高自动转换为按钮尺寸的换算方法。
这使得界面无论怎么伸缩,按钮都紧凑排列。
对于游戏最核心的“算法”,无非就是Move函数。
其实原理非常简单,就是通过循环实现的二维数组的简单变换,比很多OJ题都简单。
有趣的是,C#中的二维数组是array[i,j]而不是array[i][j],后者在C#中具有别的意义。
另外,每个格子根据数字大小会呈现不同的颜色,这一点的实现也让我花了不少时间...
首先会用while循环算出格子中的数字是2的多少次方,
然后根据次数大小,经过配比换算出应该呈现的颜色,最后被赋值到格子中。