猜拳游戏
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[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()
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的提取,如果是一个还好解决,如果设计到几个,个人觉得又要用数组来记录所提取的值,感觉很麻烦,用字典就很容易解决。如果有直接数组解决的同学可以私我。