美文网首页
swift --2048

swift --2048

作者: 十二月的水瓶座 | 来源:发表于2017-07-11 16:48 被阅读15次

仅此记录学习swift 写的第一个程序。
首先上效果图

2048.png

2048 这个小游戏在页面应该是没有什么难度的, 知道其算法就能很快的写出来.主要的游戏界面,使用collectionView实现
主要的算法(从左向右滑动)

image.png

我们使用二维数组来分析
在从左向右滑动的过程 a[0][3] 这个元素的值需要和它前面的值进行对比,有以下几种情况

  1. a[0][3] = 0, 当遇到前面不为0的数时,需要交换两者的位置,然后,结束与前面值的对比, 然后从a[0][2]开始,继续与它前面的值进行对比,以此类推, 直到a[0][0].
  2. 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

相关文章

网友评论

      本文标题:swift --2048

      本文链接:https://www.haomeiwen.com/subject/nkcmhxtx.html