Swift学习第一练——用Swift实现的FlappyBird小游戏

用Swift实现的FlappyBird小游戏

伴随着apple公司对swift的推广态度深入,swift火的很快,并且swift精简便捷的语法和强大的功能,对于使用Object—C开发iOS的开发者来说,也有必要了解学习一下swift。这篇博客跳过swift干涩的语法,直接从一个小游戏项目开始使用swift,将其中收获总结如下:

FlappyBird是前段时间很火的一款小游戏,通过手指点击屏幕平衡小鸟通过障碍。我是将以前OC版的项目拿来改成了swift,所以整体的思路还是OC的开发思路。

首先,我需要定义两个宏,一个用来模拟重力加速度G,一个用来便捷获取设备屏幕尺寸。因为这个游戏非常简单,开发起来也只需要几个小时,所以我们只需要在一个文件中写代码:viewController.swift。

swift中没有一般语言中的宏定义,但是可以通过定义常量的形式实现宏的效果:

//用常量的形式代理OC中的宏定义
let G:Float=9.8
let SCREEN_SIZE = UIScreen.mainScreen().bounds

我们需要定义一些成员变量,如下:

class ViewController: UIViewController {
    var timer:NSTimer?//背景移动的定时器
    var i:Int=0//背景移动的速度
    var timer2:NSTimer?//柱子和地面移动的定时器
    var timer3:NSTimer?//小鸟移动的定时器
    var bird:UIImageView?
    var t:Float=0.0//小鸟下落的速度
    var isDowm:Bool=false//标记小鸟是否在下落
    var isGameOver:Bool=false//标记是否游戏结束
}

对于?和!号的理解,网上概念很多,简单理解声明变量时如果不初始化系统是不会给变量赋nil的,会报错,?的作用就是告诉系统这里如果没有初始化就是nil。同理,在用这类变量的时候,也需要加上?解包,如果加!就是强制解包,可以理解为让系统认为这个变量一定不是nil。

对于UI的创建等部分函数和OC一样,只是调用的方式略有不同,后面会附上源码。

在控制小鸟下落的部分代码如下,其中有一点需要注意,在swift中没有隐士转换这个概念,比如你要使用int a + float b 你必须手动将int转为float:(Float)(a)+b

func birdMove(){
        if !isDowm{
            if bird?.frame.origin.y < SCREEN_SIZE.height-100{
                var rant:CGRect=bird!.frame
                rant.origin.y += (CGFloat)(G*(t*t/2))
                bird?.frame=rant
                t+=0.025
            }
        }else{
            if t<0.24{
                var rant = bird?.frame
                rant?.origin.y -= 4.9-(CGFloat)(G*t*t/2)
                bird?.frame=rant!
                t+=0.025
            }else{
                isDowm=false
            }
        }
    }

游戏效果图如下:

我相信,实践是学习的必经途径,希望与志同道合的朋友,一起进步。

项目github地址:https://github.com/ZYHshao/swiftFlappyBird

时间: 2024-10-11 06:29:19

Swift学习第一练——用Swift实现的FlappyBird小游戏的相关文章

Swift学习第一天之数组

Swift学习第一天: 1:数组的使用 数组的定义: let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 2:数组的遍历 for num in numbers { print(num) } 3:也是通过下标来制定内容 let num1 = numbers[0] let num2 = numbers[1] 4.定义可变不可变 `let` 定义不可变数组 `var` 定义可变数组 5.向可变数组里面追加内容 array1.append("wangwu"

Swift学习第二练——Swift项目时光电影

Swift学习第二练--Swift项目时光电影 很早以前的一个OC的练习项目,用swift重新写了一遍,因为xcode版本的更新对swift的兼容度也在不断改变,此版本适用于xcode6.1. 这个项目中,用swift将iOS官方SDK中的HTTP进行了封装,使用了swift编写的异步加载网络图片的方法.练习了用swift操作界面布局,跳转界面等的方法. 下面是封装的下载类的核心代码: private var httpConnection:NSURLConnection? class ZYHHt

Swift学习: 从Objective-C到Swift

文章组织脉络: 从Objective-C到Swift的语法差异.我们熟悉的Objective-C特性在Swift中如何展现. 从Objective-C到Swift的进步改进.研究对比Swift在安全性,易用性上的提升,给我们带来的新编程范式. 目录: 1.属性(property)和实例变量(instance variable) 2.控制流 3.函数 4.类与初始化(Initializers) 5.枚举与结构体 6.协议(Protocols) 7.Swift与Cocoa 8.总结 1.属性(pro

swift学习第二天:swift中的基本数据类型

一:swift基本数据类型 Swift中的数据类型也有:整型/浮点型/对象类型/结构体类型等等 先了解整型和浮点型 整型 有符号 Int8 : 有符号8位整型 Int16 : 有符号16位整型 Int32 : 有符号32位整型 Int64 : 有符号64位整型 Int : 和平台相关(默认,相当于OC的NSInteger) 无符号 UInt8 : 无符号8位整型 UInt16 : 无符号16位整型 UInt32 : 无符号32位整型 UInt64 : 无符号64位整型 UInt : 和平台相关(

swift学习第一天:认识swift以及swift的常量和变量

一:认识swift // 1.导入框架 //#import <UIKit/UIKit.h> import UIKit // 2.定义一个标识符 // int a = 10; // swift中定义标识符:必须制定该标识符是一个常量还是一个变量 // var(变量)/let(常量) 标识符的名称 : 标识符的类型 = 初始化值 var a : Int = 10; let b : Double = 3.14; a = 29; // b = 3.11 错误写法 // 3.语句结束后可以不跟; //

swift学习第一天

相关资料 马上着手开发 iOS 应用程序 (Start Developing iOS Apps Today) 苹果开发中文站 cocoachina swift 开发官方网站 iOS Developer Library The Swift Programming Language中文完整版 检查器面板 视图控制器 构建了基本的视图层次后,下一步就需要控制可视元素并响应用户输入.在 iOS 应用程序中,您可以使用视图控制器 (UIViewController) 来管理内容视图及其分视图层次. 视图控

Swift学习第一天值字典

1:字典的定义: * `let` 不可变字典 * `var` 可变字典 2:`[String : NSObject]` 是最常用的字典类型 3:赋值直接使用 `dict[key] = value` 格式 * 如果 key 不存在,会设置新值 * 如果 key 存在,会覆盖现有值 4:字典的合并:直接添加key 和Value即可 //: 合并字典 var dict1 = [String: NSObject]() dict1["nickname"] = "大老虎" di

swift学习第一天---常量变量基础数据类型

1 import Foundation 2 3 /** 4 * 1.常量 变量 5 知识要点:常量的定义用let 变量的定义用var 6 常量一旦定义便不可再更改. 7 变量定义之后可以在定义之后的程序中任意地方进行修改. 8 */ 9 // 常量的定义 10 let constants1:Int = 10 11 12 print("constants1 = \(constants1)") 13 14 // 变量的定义 15 var variables1:Int = 11 16 17

canvas学习作业,模仿做一个祖玛的小游戏

这个游戏的原理我分为11个步骤,依次如下: 1.布局, 2.画曲线(曲线由两个半径不同的圆构成) 3.画曲线起点起始圆和曲线终点终止圆 4.起始的圆动起来, 5.起始的圆沿曲线走起来 6.起始的圆沿曲线走起来,并在曲线初始位置处产生新圆 7.添加图片,这个图片是为了发射子弹 8.让图片跟随鼠标动起来 9.让动起来的图片跟随鼠标的位置发送子弹,并让子弹的颜色变红 10.图片发射的子弹和轨迹上的小圆碰撞检测 11.碰撞检测后让发射的子弹和轨迹上的小圆消失 这就是该程序步骤的的分解. 第一点:布局 <