C# WinForm小游戏:2048

实际上,想要开发出一个单独的4*4的2048并不难,但如果要开发出能够任意调节地图大小的2048,还是带图形界面的那种,那就涉及到很多知识。

C# WinForm小游戏:2048_第1张图片

3*3的界面

C# WinForm小游戏:2048_第2张图片

 

4*4的界面

C# WinForm小游戏:2048_第3张图片

甚至还有10*10的界面...


显然,对于一个带图形界面的程序来说,如果我们要写一个窗口,必先将所需的控件一个个拖到窗口,排列,然后一个个写代码。

所以,对于n*n的地图,难道每个窗口都要重写一遍代码吗?

NO!


让我们看看,这个程序是怎么实现生成n*n的地图的。

C# WinForm小游戏:2048_第4张图片

这是一个地图类,保存了Tiles(按钮),Matrix(地图本体,即一个矩阵),以及Size(尺寸大小)

底下的成员函数则是各种必需的方法,例如JudgeLose()判断是否无路可走,Move()来相应每一次按键操作,Initialize()用于初始化......

C# WinForm小游戏:2048_第5张图片

Tile类用于规定每个“格子”。对于这个类来说,最重要的莫过于如何确定大小以及在窗口上的位置。

让我们看Resize()方法,这里我经过反复调试,写出了一个宽高自动转换为按钮尺寸的换算方法。

这使得界面无论怎么伸缩,按钮都紧凑排列。

C# WinForm小游戏:2048_第6张图片


对于游戏最核心的“算法”,无非就是Move函数。

C# WinForm小游戏:2048_第7张图片

其实原理非常简单,就是通过循环实现的二维数组的简单变换,比很多OJ题都简单。

有趣的是,C#中的二维数组是array[i,j]而不是array[i][j],后者在C#中具有别的意义。


另外,每个格子根据数字大小会呈现不同的颜色,这一点的实现也让我花了不少时间...

C# WinForm小游戏:2048_第8张图片

首先会用while循环算出格子中的数字是2的多少次方,

然后根据次数大小,经过配比换算出应该呈现的颜色,最后被赋值到格子中。

你可能感兴趣的:(C#,桌面开发,c#,开发语言,.net)