C# WinForm小游戏:2048

实际上,想要开发出一个单独的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的多少次方,

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

  • 8
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值