前段时间粗浅的学习一下 Swift 这个语言,一个多月前的苹果开发者大会上,Swift已经更新到了 SWift2.0 了,相比1.0有了不少的变化,有些适配的 Swift1.0的库,现在已经不能直接拿来用了,需要稍微改一下,比如sqlite3.0,这个在下文中会讲到。本文主要记录一下用 Swift 实现2048游戏这个过程。
基本功能的设计
游戏在启动之后应该包括两个界面,1. 游戏的主界面;2. 游戏的设置界面,比如可以设置过关的分数,设置维度来控制难易度。
这种两个屏用 UINavigationController 就可以搞定,主界面主要是绘图和分数的展示,设置界面主要是通过 Label 和 Button 来展示设置和响应用户设置。
游戏界面的实现
这是主要的工作,分成几步来说明:
游戏模型
游戏模型通过一个 4 x 4 的二维矩阵来实现:
- 要保存当前的各个位置的数字;
- 控制新生成的数字;
- 记录当前的最大值;
- 判断当前是否每个位置上都有了数字;
- 滑动时判断相邻两个是否可以合并,生成合并之后的数字。
这个部分是整个游戏的核心,因为所有界面上展示的数据,都是来自于这个游戏模型的当前数值。
初始界面
第一步:绘制一个初始的界面,也就是 4 X 4 的一个格子;
第二步:初始数字的生成,用随机算法任意生成两个数字,同时控制数字 2 出现的概率是90%,而数字 4 出现的概率是 10%。
第三步:合并相邻数字。
游戏主体玩法
第一步:添加新出现数字的动画;
第二步:添加两个数字合并的动画;
第三步:在主界面增加收拾识别,本游戏中只用支持上下左右四种手势即可;
第四步:数字移动的算法,以向下滑动为例:当向下滑动的时候,从第一行依次向下移动一个位置(如果可以移动的话),同时移动了当前的位置的数字,上面位置的数字也有做相应的移动;
第五步:相邻数字的合并,移动之后,判断相邻的数字,如果相等,就合并;
第六步:合并之后,在剩余的位置上新生成一个数字,然后绘制图形。
小细节适配
剩下要做的就是让游戏的设置生效,同时保存当前的游戏数据,在下一次启动的时候恢复。这里可以用sqlite保存,在github上有一个swift封装好的sqlite库,但是并能直接用到swift2.0上,所以,我做了小小的修改适配。
最后,整个游戏的源码,在这里:点我。
界面太丑了,所以我就不放游戏最后的截图了。等我什么时候心情好了再来美化一下界面。
2015.07.25