第二周Swift总结

##猜拳游戏


import UIKit

class ViewController: UIViewController {
    
    var thyAnswer = 0
    
    @IBOutlet weak var cloth: UIButton!
    
    @IBAction func showCloth(sender: AnyObject) {
        cloth.backgroundColor = UIColor.blackColor()
        thyAnswer = 3
    }

    @IBAction func showStone(sender: AnyObject) {
        thyAnswer = 2
    }

    @IBAction func showScissor(sender: AnyObject) {
        thyAnswer = 1
    }

    @IBAction func okAction(sender: AnyObject) {
        
        let cp = Int(arc4random_uniform(4)) + 1   
        if thyAnswer == 1 && cp == 2 || thyAnswer == 2 && cp == 3 || thyAnswer == 3 && cp == 1{
            if thyAnswer == 1{
                overLabel("你输了,你出的剪刀,电脑出的石头")
            }else if thyAnswer == 2{
                overLabel("你输了,你出的石头,电脑出的布")
            }else{
                overLabel("你输了,你出的布,电脑出的剪刀")
            }
        }
        else if thyAnswer == cp{
            overLabel("和,你们出的一样的")
        }
        else if thyAnswer == 0{
            overLabel("请做出你要出的选择")
        }
        else{
            if thyAnswer == 1{
                overLabel("你赢了,你出的剪刀,电脑出的布")
            }else if thyAnswer == 2{
                overLabel("你赢了,你出的石头,电脑出的剪刀")
            }else {
                overLabel("你赢了,你出的布,电脑出的石头")
            }
        }
    }
    func overLabel(stl:String){
        showEnd.text = stl
    }

    @IBOutlet weak var showEnd: UILabel!
    override func viewDidLoad() {
        super.viewDidLoad()
        showEnd.adjustsFontSizeToFitWidth = true
        
    }

}
复制代码

-以上就是代码,个人总结就是将if的灵活运用,if与if的多重嵌套,当然也可以用swith case 这个,个人错的地方比较多的地方就是考虑if的各种情况不全面,有漏掉的地方,比如这个的thyAnswer == 0就容易漏掉。最后还有小地方就是注意showEnd.adjustsFontSizeToFitWidth = true动态变化,就是框框随着文字变动而变动。 ##骰子赌博

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        lastWager.adjustsFontSizeToFitWidth = true
        lastWager.text = "\(money)"
    }
    
    
    @IBOutlet weak var rightDice: UILabel!
    
    
    @IBOutlet weak var leftDice: UILabel!
    var money = 1000000
    var debt = 0
    var isJuge = 0
    @IBAction func okAction(sender: AnyObject) {


        while isJuge == 0 || isJuge == 1{
            debt = Int(showWager.text!)!
            while  debt <= 0 || debt > money{
                alertAlert("请选择你要下的赌注", msg: "你是否继续游戏")
            }
            let firstPoint = roll() + roll()
            if firstPoint == 7 || firstPoint == 11{
                
                alertAlert("你赢了", msg: "你是否继续游戏")
            money += debt
                isJuge = 2
            }
            else if firstPoint == 2 || firstPoint == 3 || firstPoint == 12{
                alertAlert("你输了", msg: "你是否继续游戏")
                money -= debt
                isJuge = 2
            }else{
                isJuge = 1
            }
            while isJuge == 1{
                    let current = roll() + roll()
                    if current == 7{
                alertAlert("你输了", msg: "你是否继续游戏")
                    money -= debt
                        isJuge = 2
                }
                else if current == firstPoint{
                alertAlert("你赢了", msg: "你是否继续游戏")
                    money += debt
                        isJuge = 2
                }
           }
            lastWager.text = "\(money)"
            if money <= 0{
                alertAlert("你的余额不足,请补足再继续游戏", msg: "你是否继续游戏")
                isJuge = 2
            }
        }

    }
    func roll() -> Int{
        return Int(arc4random_uniform(6)) + 1
    }
    func alertAlert(tl:String,msg:String){
        let alertController = UIAlertController(title: tl, message: msg, preferredStyle: .Alert)
        
        let yAction = UIAlertAction(title: "确定", style: .Default, handler: {
            action in
            self.isJuge = 0
            
            
        })
        let nAction = UIAlertAction(title: "取消", style: .Default, handler: {
            action in
            self.isJuge = 2
        })
        alertController.addAction(nAction)
        alertController.addAction(yAction)
        self.presentViewController(alertController, animated: true, completion: nil)
    }
    
    @IBOutlet weak var showWager: UITextField!
    
    @IBOutlet weak var lastWager: UILabel!
    
}
复制代码

做这个做了好久,不过总体还是做出来了,其实后面还可以在添加一些功能,比如充值,本来想用老师的repeat while 的,但是用起来感觉还是没有while 顺手就没有用了,出现的问题就是在第二次和之后的丢骰子的时候没有退出循环,一直在游戏中循环,然后我没用老师的bool类型 我直接的是isJuge赋值0 1 2

##百钱百鸡

for x in 0...20{
    for y in 0...33{
            let z = 100 - x - y
            if  5*x+3*y+z/3==100 && z%3==0{
                print("公鸡:\(x),母鸡:\(y),小鸡:\(z)")
            }
    }
}
复制代码

这里就是三重循环,之前我在吃饭的时候和几个学安卓的同学交流了一下,他们表示三重循环运算没问题,直接就可以得到答案,但是我用swift就会报错,但是没关系,解决办法利用他们之间的函数关系替代第三个变量,就变成二重循环,这里需要注意一个隐含的条件能被三整除小鸡的数量。 ##排序 数组的排序在swift语言中已经帮我们弄了一些方法了,生序降序,删除数组中的一些元素,sort(),sortInplace(),remove()方便了程序员的操作,就是有了这些等等方便的方法与大众化,才能有某些老师大胆的推测未来20年的霸主语言。

1.冒泡排序

var arry = [34,56,2134,2,32345,34,45,12,23,]
//冒泡,两两比较,前面的元素比后面的元素大就交换位置
for i in 0..<arry.count - 1{
    var swapped = false
    for j in 0..<arry.count - 1 - i{
        if arry[j] > arry[j + 1]{
            (arry[j],arry[j + 1]) = (arry[j + 1],arry[j])
            swapped = true
        }
    }
    if swapped == false{
        break
    }
}
print(arry)
复制代码

冒泡排序就是最前面的与后面依次做比较,如果是比较大,最里面的for循环就是拿出最前面的与后面依次做比较,外层的for循环就是需要循环的总次数,当然这里还是比较简单的,值得注意的是对于数组的值的一个标记,这里的true和false就是这个目的,以后如果想用几个以上的标记可以1,2,3...这些来表示,就有点像玩游戏的顶点传送,如果是1就把人传送到哪里,是2就传送到另外一个地方,在后面的练习中会有大量的出现,不仅有这个好处,还有可以停止while循环的好处,比如while isPonit = true{ isPoint = false }比用break优雅一些。 引伸一下知识点,如果要我们删除数组中相同的数值怎么办。

let array = [34,56,2134,2,32345,34,45,12,23,45,23]
var dictInts = Dictionary<String, Int>()

for number in array {
    dictInts[String(number)] = number
}
print(dictInts)

var result = [Int]()
for value in dictInts.values {
    result.append(value)
    print(result)
}
print(result)
复制代码

想了半天,本来不想用字典的,就只想用数组解决的,但是设计到在循环中不能删除相同的数值,在循环之外去删除设计到数组的index的提取,如果是一个还好解决,如果设计到几个,个人觉得又要用数组来记录所提取的值,感觉很麻烦,用字典就很容易解决。如果有直接数组解决的同学可以私我。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值