仅此记录学习swift 写的第一个程序。
首先上效果图
2048 这个小游戏在页面应该是没有什么难度的, 知道其算法就能很快的写出来.主要的游戏界面,使用collectionView实现
主要的算法(从左向右滑动)
我们使用二维数组来分析
在从左向右滑动的过程 a[0][3] 这个元素的值需要和它前面的值进行对比,有以下几种情况
- a[0][3] = 0, 当遇到前面不为0的数时,需要交换两者的位置,然后,结束与前面值的对比, 然后从a[0][2]开始,继续与它前面的值进行对比,以此类推, 直到a[0][0].
- a[0][3] != 0,当遇到前面的值与a[0][3] 相等的时候,a[0][3]的值等于 a[0][3]的值乘以2,并束与前面值的对比。
比如 a[0][3] =2 , a[0][2] = 2, 那么滑动结束后的结果是 a[0][3]=4, a[0][2] =0。然后从a[0][2]开始,继续与它前面的值进行对比,以此类推, 直到a[0][0].
在程序中我是用的是一维数组,
for k in (0 ..< 4) {
// 确定 i 的范围
for i in (k4 ..< k4 + 4).reversed() {
for j in (k*4 ..< i).reversed()
{
let obj1:YSHY2048Obj = myArray[i] as! YSHY2048Obj
let obj2:YSHY2048Obj = myArray[j] as! YSHY2048Obj
let isBreak:Bool = self.exchangePosition(obj1: obj1, obj2: obj2)
if isBreak {
break
}
}
}
}
func exchangePosition(obj1:YSHY2048Obj,obj2:YSHY2048Obj) -> Bool {
if obj1.title == 0 && obj2.title != 0{
obj1.title = obj2.title
obj2.title = 0
visiableArray.remove(obj1)
visiableArray.add(obj2)
}
else if obj1.title == obj2.title && obj1.title != 0 && obj2.title != 0
{
obj1.title = obj1.title * 2
obj2.title = 0
visiableArray.add(obj2)
score += obj1.title
bestScroe = score > bestScroe ?score: bestScroe
self.setLabText()
if(bestScroe >= targetScore)
{
targetScore = targetScore * 2
tipLab?.text = "您的新挑战是获得(targetScore)方块"
}
return true
}
return false
}
剩下三种情况(从右向左,从上到下,从下到上)也是以此类推.
以上.
PS: 源码连接
https://github.com/DecembeGrirl/swift-2048