Swift入門第014天-十賭九輸之骰子猜大小

延時執行/搖動控制/播放聲音/文字視窗維持底部/Switch/for迴圈的活用

這次要做的是骰子猜大小機

功能包含:

  1. 能夠顯示贏錢輸錢,現有金額等等
  2. 加上一些生動的音效, 例如贏的時候會有勝利的聲音;
    輸的時候會有悲哀的叫聲;骰子轉動時會有骰子聲;
    加值時會有收銀的聲音
  3. 開始賭骰子後需要等骰子聲落地才出現結果,且此時按鈕不能再按
  4. 文字訊息欄可不斷更新,可以拖動觀看舊訊息
  5. 可以賭大、賭小、賭21點,賠率不同
  6. 可以豪賭,最高一次可下注10000美金
  7. 可以加值,一次加值1000美金

廢話不多說~直接看影片演示:

當中有碰到一些問題,有興趣的請往下繼續看~

關鍵計算:六顆骰子骰出21點的賠率怎麼計算?

  1. Google大神 → 我找不到
  2. 用高中的機率公式慢慢推導 → 我懶得算…而且算出來無法驗證對錯
  3. 使用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連結:

--

--

賽思Sethought
彼得潘的 Swift iOS / Flutter App 開發教室

一隻co-founder但不太懂分工,涉足研發.採購.製程.業務.設計.行銷;一位工程師但不學無術,略懂cad.cam.PS.IL.PR.swift.db。內向.喜思考.樂遊戲.愛動漫.重健康,只是位功不成名不就的小小貨色