##猜拳遊戲
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的提取,如果是一個還好解決,如果設計到幾個,個人覺得又要用陣列來記錄所提取的值,感覺很麻煩,用字典就很容易解決。如果有直接陣列解決的同學可以私我。