前一段时间迷恋玩手游2048,周末无聊,就想着本身实现一个。源代码在“我分享的代码”中。下面是游戏的设计思路。数组
在设计的时候将整个程序分为两个部分,游戏模型部分和界面展现交互部分。
游戏模型部分主要是处理整个游戏的执行逻辑,首先介绍一下2048的游戏规则,根据用户滑动的方向,界面上的全部数字块会向那个方向靠边,而且将相同的数字合并,合并的数字越大,分数越高。例如向上滑动,全部数字块都会向上滑动合并直到不能上移为止。url
根据游戏规则,游戏模型部分作如下处理,用一个table(数组)存储全部数字块,key(下标)做为数字块所在的位置(1-16),value(数组值)做为数字块上记录的值。
根据滑动的方向,首先须要作一次移动,而后作一次数字块的合并,最后再作一次移动。移动操做是一行一行的向所给方向移动,且移动到没法移动为止。合并从最靠边的倒数第二排向前一排合并,直到离边最远的一排。设计
通过这些步骤,完成用户的一次操做达到的效果。游戏
若是第一次操做全部数字块均不可以移动而且没有可以合并的块,那么认为用户此次操做是无效的,不产生新的数字块。不然产生一个新的数字块。
产生新的数字块的方法是:将全部空闲的位置插入一个table中,而后在该table中随机选择一个位置做为新块的位置。而后产生该新块的值,即一个2或者一个4。我设定的产生几率是4:1。
产生新块后,检查是否全部位置都被占用,若是都被占用则检查向全部方向是否有可以合并的块,若是有,则继续等待用户的下一步操做,不然标记游戏结束。
计分方式:产生一个新块+1分,合并出一个新块,分数等于原来的分数+新块的值。
展现与交互
不断重绘数字块所在的table就能够得到须要的展现效果。
经过鼠标的拖动来肯定移动的方向,那么按下时记录一个位置信息,放开时记录一个位置信息,根据两个位置信息肯定拖动的方向,调用相应的操做。get
可运行的程序能够在百度网盘上下载:http://pan.baidu.com/s/1gdJwDANtable