Swift入門第014天-十賭九輸之骰子猜大小
Published in
5 min readJan 9, 2020
延時執行/搖動控制/播放聲音/文字視窗維持底部/Switch/for迴圈的活用
這次要做的是骰子猜大小機
功能包含:
- 能夠顯示贏錢輸錢,現有金額等等
- 加上一些生動的音效, 例如贏的時候會有勝利的聲音;
輸的時候會有悲哀的叫聲;骰子轉動時會有骰子聲;
加值時會有收銀的聲音 - 開始賭骰子後需要等骰子聲落地才出現結果,且此時按鈕不能再按
- 文字訊息欄可不斷更新,可以拖動觀看舊訊息
- 可以賭大、賭小、賭21點,賠率不同
- 可以豪賭,最高一次可下注10000美金
- 可以加值,一次加值1000美金
廢話不多說~直接看影片演示:
當中有碰到一些問題,有興趣的請往下繼續看~
關鍵計算:六顆骰子骰出21點的賠率怎麼計算?
- Google大神 → 我找不到
- 用高中的機率公式慢慢推導 → 我懶得算…而且算出來無法驗證對錯
- 使用PlayGround直接跑程式看結果 ✓
程式碼如下:
//在10萬組結果中,6~20點[小]的次數;22~36點[大]的次數;及21點的次數共3個值
var countSum:[Int] = [0,0,0]for _ in 1...100000{ //sum要宣告在10萬次的裡面,這樣每次重跑時才會歸零
var sum = 0 //用跑6次的迴圈來給出6個隨機值,使sum加總起來
for _ in 1...6 {
let number = Int.random(in: 1...6)
sum += number
} //這裡還在10萬次的迴圈之中,所以在這邊把sum歸類看是[小][21點][大]
switch sum {
case 6...20:
countSum[0] += 1 //第0位放入[小]的計數
case 22...36:
countSum[2] += 1 //第2位放入[大]的計數
default:
countSum[1] += 1 //第1位放入[21點]的計數
}
}//最後再把結果輸出即可
print(countSum)
最後跑出來的次數:100000次中:
[小] 45426次,約45.43%,最高賠率可設為2.2
[21點] 9329次,約9.33%,最高賠率可設為10.7
[大] 45245次,約45.25%,最高賠率可設為2.2
如此,最後決定各自設為賠率2 ; 10 ; 2
因為賭場總要拿你一點基本開銷的,你說對不對?
再來概略說明一下我比較不會的幾段程式,方便日後查找~
關鍵程式1:延時執行的Function
//假設我們想要延時執行1.42秒let time:TimeInterval = 1.42
DispatchQueue.main.asyncAfter(deadline:DispatchTime.now() + time)
{
//這裡面放入想要在延遲後才執行的程式碼,在{}以外的都會立刻執行!
}
關鍵程式2:搖動手機也可以開始賭
override func motionEnded(_ motion: UIEvent.EventSubtype, with event: UIEvent?)
{
//這裡面放入想要在手機搖晃後執行的程式碼,所以跟button Action的內容會一樣!
}
關鍵程式3:在TextView最前面加上文字並換行
//在字串""中加上\n代表換行,後面加上「自己」,就可以在最前面新增文字且換行textView.text = String("要新增的文字&狀態\n") + textView.text
關鍵程式4:在TextView底部加上文字,並使底部維持可見,顯示底部
第一步:
//在viewDidLoad(){}中加入一行指令:override func viewDidLoad() {self.MyTextView.layoutManager.allowsNonContiguousLayout = false}
第二步:
//在想要更新顯示至底部的程式碼下一行,加入一行指令:self.MyTextView.scrollRangeToVisible(NSRange(location: .max, length: 0))
聲音部分程式碼:
//這邊以"name"作為可輸入的變數,方便使用各種名稱的音效/音樂func playSound(name: String){if let url = Bundle.main.url(forResource: name, withExtension: "mp3") {self.player = try? AVAudioPlayer(contentsOf: url)self.player?.play()}}
最後附上GitHub連結: