骰子賭大小 App
這個主題有點類似“亂數”結合 “瘋狂購物”的app概念,不過在購物網站有一些coding上得問題,利用畫面的設計把他避掉了,一般有一種是先選擇好數量,然後再按總和(button)得到最後總額,這個在瘋狂購物這個作業卡關了,所以當初設計就把buuton去掉,直接在輸入數量的時候,總額會直接計算出來並顯示在總額欄(text)裡面,就coding上當然變數越少越好寫,但就UI/UX 來說,應該有討論的空間。
不過在這次的作業,同樣的問題還是會發生,而且是無法避掉的。首先,描述畫面如下,第一行的下面3個黃色格子就是代表3個骰子擲出來的數字結果; play使用button代表擲骰子。第二行黑色字都使用label來表示文字含義,第一排的三個黃色為要下注金額,使用stepper增加或減少金額;第二排的黃色為目前所擁有的金額。第三排為得到的結果“賺錢啦“ ”請加油“ 分別代表賺錢或輸錢,而”輸光了“ 代表目前金額賭光了(為0),當然這是不會有負數的。


接下來描述程式碼部分,首先說三個stepper的部分,把它全部連到同一個active。遇到幾個困難,第一個是function裡面計算完的值,要暫時不能影響外面的值,而且裡面的值計算完後,也要看以被拿到外面計算,因此在這裡額外用tempPresentMoney 儲存這個值,最後計算完再把這個值還給presentMoney,有想過是不是要用return,但是應該不是這樣用。第二個是當下注金額,到0的時候,讓stepper不再的值不再增加,不然目前金額會出現不合理的現象 - “負值”。原本是在找stepper裡面的function有沒有可以讓他暫時沒有反應的功能,有找到accssibilty之類的功能,但是好像沒用,不知道是沒寫好還是那個function不是這樣用的,最後想到當金額為0的時候,三個stepper的最大值為當時下注的值,即可以解決此問題,當然更動了最大值,還要再把它改回來,所有又補了else,這個可以想到還蠻不容易的….。

再來是play的部分,有三種狀況,大 小 豹子通殺,所有用if else來處理。這個重點有兩個,就是在第二次下注,必須是跟第一次下注的初始條件是一樣的,因此要把全部的值該歸零要歸零,再來是stepper的最大值也要改回原來的100。還有最後全部輸光的時候,stepper的最大值要改為0,不然也會出現負值,以及play鍵讓他無法使用(enable)。
這個app沒有想像的簡單,要一直開模擬器試那裡有bug,超級耗能….。而且上述的解法都試了好久在想到的方法。有更好的解法歡迎交流。
@IBAction func playDeckButton(_ sender: UIButton) {var deckNumber = [1,2,3,4,5,6]let randomDistribution = GKRandomDistribution(lowestValue: 0, highestValue: 5)let deck1Number = deckNumber[randomDistribution.nextInt()]let deck2Number = deckNumber[randomDistribution.nextInt()]let deck3Number = deckNumber[randomDistribution.nextInt()]deck1Label.text = "\(deck1Number)"deck2Label.text = "\(deck2Number)"deck3Label.text = "\(deck3Number)"let totalDeckNumber = deck1Number+deck2Number+deck3Numberlet compareMoney = presentMoneyif deck1Number == deck2Number && deck2Number==deck3Number {presentMoney = compareMoney + 29 * item3Money - item2Money - item1MoneytotalMoney.text = "\(presentMoney)"bettingItem1.text = "0"bettingItem2.text = "0"bettingItem3.text = "0"bettingStepper1.value = 0bettingStepper2.value = 0bettingStepper3.value = 0item1Money = 0item2Money = 0item3Money = 0// 因為在moneyStepper 當 presentMoney==0 時 會 stepper.maxivalue的值 = 0,在某些情況會出現bugbettingStepper1.maximumValue = 100bettingStepper2.maximumValue = 100bettingStepper3.maximumValue = 100} else if totalDeckNumber <= 9{presentMoney = compareMoney + item2Money - item1Money - item3MoneytotalMoney.text = "\(presentMoney)"bettingItem1.text = "0"bettingItem2.text = "0"bettingItem3.text = "0"bettingStepper1.value = 0bettingStepper2.value = 0bettingStepper3.value = 0item1Money = 0item2Money = 0item3Money = 0bettingStepper1.maximumValue = 100bettingStepper2.maximumValue = 100bettingStepper3.maximumValue = 100} else {presentMoney = compareMoney + item1Money - item2Money - item3MoneytotalMoney.text = "\(presentMoney)"bettingItem1.text = "0"bettingItem2.text = "0"bettingItem3.text = "0"bettingStepper1.value = 0bettingStepper2.value = 0bettingStepper3.value = 0item1Money = 0item2Money = 0item3Money = 0bettingStepper1.maximumValue = 100bettingStepper2.maximumValue = 100bettingStepper3.maximumValue = 100}if presentMoney > compareMoney {result1Label .isHidden = falseresult2Label.isHidden = true} else {result1Label.isHidden = trueresult2Label.isHidden = false}if presentMoney == 0 {result1Label.isHidden = trueresult2Label.isHidden = trueresult3Label.isHidden = false// 要讓stepper的值歸零 不然會出現負值bettingStepper1.maximumValue = 0bettingStepper2.maximumValue = 0bettingStepper3.maximumValue = 0// 當目前金額歸0的時候,play鍵的enable會無法使用playButton.isEnabled = false}}
最後畫面做得沒很好,數字可以改成直接出現骰子的畫面,不知道可不可以用unicode直接顯示,而不用數字顯示或是圖片。再進階一點就是play的時候會出現骰子的動畫,這樣會有讓使用者真的在丟骰子的感覺。





