• swift实战项目之 2048游戏 之前看过网上很多写小项目的文章,但大多是旧版或者不全的,这里推出swift5 项目之2048给大家分享 【2019年12月更新,我重新写了一份,源码地址,源码与文章不一样,毕竟差了两年半】 1...

    swift 实战项目之 2048游戏

    之前看过网上很多写小项目的文章,但大多是旧版或者不全的,这里推出swift5  项目之2048给大家分享

     

    【2020年更新,建议直接看源码:源码地址

     

    本文将要使用的思路和上面2020更新的源码思路不一样,本文的思路清晰但是代码复杂。

    1.首先新建一个项目,自动生成我们的viewController,添加如下代码,构造最简单的起始页面:

    class ViewController:UIViewController {

     

        override func viewDidLoad() {

            super.viewDidLoad()

     

           view.backgroundColor = UIColor.black

            let wid =view.bounds.width

            let hei =view.bounds.height

     

    // 想点button跳转入游戏界面,因此  

            let startButton1 =UIButton(frame:CGRect(x:0, y:hei/3, width: wid, height:20))

            startButton1.setTitleColor(UIColor.red, for: .normal)

            startButton1.setTitle("2048",for: .normal)

    //文字居中

           startButton1.contentHorizontalAlignment = .center

     

            startButton1.addTarget(self,action:#selector(start1),for: .touchUpInside)

       

            view.addSubview(startButton1) 

        }

    // 点击事件:需要新建一个swift文件:GamePanel.swift ,继承UIViewController。点击按钮后就进这个ViewController界面。

      func start1(){

            self.presentGamePanel(),  animated: false, completion: nil)

        }

     

     

    GamePanel.swift:  

    import Foundation

    import UIKit

     

    class GamePanel:UIViewController{

     

        let dimension:Int =4   // 四行四列,等项目做完,试试自定义行列数。

        let boardwidth:CGFloat!    //  游戏区域宽度

        let scorewidth:CGFloat=50    // 记分板垂直方向的宽度

        let thinPadding:CGFloat=5   // 最小滑块的间距

        var unit:CGFloat!   //  最小滑块的边长

        var x:CGFloat!    //  包容小方块的大正方形的位置 x,y,也就是游戏区域

        var y:CGFloat!

     

    说到这,我们有大正方形,有最小滑块,有记分板,那就得先新建三个类:

     

    1、新建: GameView.swift,是大正方形,里面包着16个小正方形 

    然后: 

        var game:GameView!

    2、新建: ScoreView.swift,是记分板,显示分数 

    然后:

        var scoreBoard:ScoreView!

     3、一会再说,大正方形还没写呢,何谈小块?

     

    构造方法

     

     init( ) {

           boardwidth = 400 // 设成多宽随意

           super.init(nibName: nil, bundle: nil   // 这句没意思 可照抄

        }

     

        override func viewDidLoad() {

           super.viewDidLoad()

    准备好游戏区域大正方形的位置 x,y,为了居中,下面是简单的计算

           x = (view.bounds.width-boardwidth)/2

           y = (view.bounds.height-boardwidth+scorewidth)/2

           self.view.backgroundColor =UIColor(red:0.95, green:0.83, blue:1, alpha:1)

        

        展示大正方形和积分板的俩方法:      

           showGridView()

           showScoreBoard()

     

        }

      

        requiredinit?(coderaDecoder:NSCoder) {

           fatalError("init(coder:) has not beenimplemented")

        }

     

    GamePanel是负责控制游戏的(Controller),其他view要单设类重写

     

    这两个方法可以在写完那两个类的构造方法再来写,现在先写个方法头扔这就行

    1 展示大正方形:

     

        func showGridView(){   

     

          unit = (boardwidth-thinPadding*CGFloat(dimension+1))/CGFloat(dimension)

     

       game =GameView(unit:unit,dime:dimension,x:x,y:y,thin:thinPadding)  //一会写

     

         view.addSubview(game)

        }

     

    2 展示记分板,

     

        func showScoreBoard(){

     

           scoreBoard =ScoreView(unit:unit,y:y,screenX:view.bounds.width) //一会写

           scoreBoard.score =0

     

           view.addSubview(scoreBoard)

        }

    }

     

    大方块GameView.swift:

     

    import Foundation

    import UIKit

    class GameView:UIView {

     

        var dimension:Int!

        var unitwidth:CGFloat!

        var thinPadding:CGFloat!

     

        var x:CGFloat!

        var y:CGFloat!    // 这几个属性看之前注释 一样的意思

     

    构造方法 

     

        init(unit:CGFloat,dime:Int,x:CGFloat,y:CGFloat,thin:CGFloat){

           self.x= x

           self.y= y

           self.thinPadding= thin

           self.dimension= dime

           self.unitwidth= unit

     

           let wid = thinPadding!*CGFloat(dime+1)+unit*CGFloat(dime)

     

        确定frame位置:    

         super.init(frame:CGRect(x:x, y: y, width: wid, height: wid))

     

        调用下面的方法初始化小单元方格 :      

         setGrid()

     

     }

     

        required init?(coderaDecoder: NSCoder) {

           fatalError("init(coder:) has not beenimplemented")

     }

     

       //初始化空的小单元们  PS。这只是初始化单元的位置,不是最小块。

        func setGrid(){

     

           layer.cornerRadius =10

       clipsToBounds = true

           backgroundColor =UIColor(red: 0.73, green: 1, blue: 0.85, alpha: 1)

     

          

    两个for循环初始化位置:

     

       var tempy:CGFloat0

     

           for in  0..<dimension{

     

               var tempx:CGFloat =0

     

               for in 0..<dimension{

     

                   let viewUnit=UIView(frame:CGRect(x:thinPadding+tempx, y:thinPadding+tempy, width:unitwidth,height: unitwidth))

     

                   viewUnit.layer.cornerRadius =8

     

           viewUnit.clipsToBounds =true

                   viewUnit.backgroundColor=UIColor(red: 0.9, green: 1, blue: 0.97, alpha: 1)

     

                   addSubview(viewUnit)

     

                   tempx += unitwidth+thinPadding

     

               }

     

               tempy += unitwidth+thinPadding

     

           }

        }

     

    下面是记分板类ScoreView.swift  继承 UILabel 。你也可以继承UIView。我为了省事就这样了。。

    import Foundation

    import UIKit

    class ScoreView:UILabel{

     

    属性观察者 传score值

        var score:Int =0{

           didSet{

               text ="SCORE:\(score)"

           }

        }

     

    初始化

        init(unit:CGFloat,y:CGFloat,screenX:CGFloat){

     

           let height:CGFloat=68   // 随便

           let width =2.5*unit    // 自己定

     

    根据屏幕和游戏区位置确定记分板位置:

           let localX = (screenX-width)/2

           let localY = (y-height)/2

     

           super.init(frame:CGRect(x: localX, y: localY, width: width,height: height))

           

           backgroundColor =UIColor(red: 0.47, green: 0.84, blue: 0.97, alpha: 1)

           textColor = UIColor.red

           textAlignment = .center    

        }

        required init?(coderaDecoder: NSCoder) {

           fatalError("init(coder:) has not beenimplemented")

        }  

    }

     

    写完排排错 运行看看什么样子

     

    展开全文
  • 2048游戏swift-2048.zip 2020-07-02 23:30:25
    swift-2048 是用 Swift 语言实现的 2048 游戏。 标签:swift
  • 用IOS Swift实现的游戏2048源码
  • 苹果设备越来越普及,拿着个手机就想捣鼓点啥,于是乎就有了这个系列,会一步一步教大家学习swift编程,学会自己做一个自己的app,github地址:https://github.com/scarlettbai/2048.git。 这篇文章需要大家了解一些...
  • 上篇地址:swift实战入门之手把手教你编写2048(二) github地址:https://github.com/scarlettbai/2048.git。 今天给大家带来2048最后一篇,之前已经实现了向游戏区域中随机插入数字块,接下来要做的,就是当我们...
  • Swift实战之2048游戏 2019-07-03 04:57:49
    上周在图书馆借了一本Swift语言实战入门,入个门玩一玩^_^正好这本书的后面有一个2048游戏的实例,笔者跟着实战了一把。 差不多一周的时间,到今天,游戏的基本功能已基本实现,细节我已不打算继续完善,就这么...
  • A 2048 game writing with SwiftUI
  • github上目前最火的两个swift实现的游戏flappybird和2048源码打包下载。需要的请自行下载。
  • 使用SpriteKit实现iOS版本的2048游戏
  • 最近工作不是很忙,就继续学习swift,想着干学习语法提高太慢,就试着用swift写了一个2048游戏,中间遇见的一些问题在这里记录一下: 1、自定义类  首先自定义类就花费了很大的力气,主要是因为swift自定义类时...
  • swift项目开发基础教程 2020-06-10 23:07:31
    swift项目开发基础教程整本书代码,及课件学习资源。里面分别有蛇棋游戏2048游戏项目完整源码。
  • 2019独角兽企业重金招聘Python工程师标准>>> ...
  • 友情提示:为了方便大家快速上手项目...游戏的雏形已经基本实现,呈现了背景,地面持续滚动,Player上下跳窜以及源源不断的仙人掌。不过细心的你也应当发现有以下几个不足: Player可以通过不断点击升高到屏幕外。 仙人掌
  • 源代码: 用IOS Swift语言实现的Flappy Bird源代码:http://download.csdn.net/detail/estellise/7449547 用IOS Swift实现的游戏2048源代码:http://download.csdn.net/detail/estel...
  • 在刚刚过去的WWDC2014大会上,苹果公司新发布了一种编程语言Swift。据悉,Swift语言继承了C语言以及Objective-C的特性,且克服了C语言的兼容性问题,对于广大开发者来说,这无疑是一剂难以抗拒的兴奋剂。
  • 首先在GameView.swift里添加方法: //限制位置是在16个格内 func isValid(pos:(Int,Int)) ->Bool{  let (x,y) = pos  return x>=0&&y>=0&&xdimension&&ydimension } 插入小块方法: func inser
  • 目录 开源项目Swift-2048学习 这篇博客写了什么? 项目结构 代码分析 TileView.swift AccessoryViews.swift AppearanceProvider.swift GameboardVi...
  • 上篇文章已经中已经把2048游戏区块画好了,这篇来加入计分板以及往游戏面板中插入数字块 计分板同样作为一个view,我们新建一个ScoreView.swift文件,代码如下: import UIKit //这里协议的作用是方便别的
  • 此文章将记录我在iOS Swift开发过程中遇到的问题及相关知识技术点 ,方便自己以后查阅.....博客列表:https://blog.csdn.net/column/details/ios-swift.htmlSwift:解决 Program License Agreement updated问题1 问题...
1 2 3 4 5 ... 20
收藏数 429
精华内容 171
热门标签