BlackJack 21

💣 21點,爆啦爆啦!💥

對於卡牌遊戲向來不在行的我,會玩的撲克牌遊戲少到五隻手指頭都數得出來啊🤪,在建立遊戲規則及判斷輸贏條件裡卡了許久,最後完成了最少也有87%像的BlackJack 21點遊戲。能夠從完全0基礎到自己獨立完成這項遊戲app也算是為文組班劃下一個美好的句點,交出了一個自己還算滿意的成績單。
感謝彼得潘的教導有方,及感謝勇敢的自己從完全八竿子打不著的幼教業轉換跑道踏進了寫iOS程式的道路上🥰🥰

BlackJack 21點遊戲規則:

A=1, JQK = 10
兩方卡牌比大小,超過21點爆掉輸,剛好21點贏,過五關贏

1. 建立IBOutlet

一張撲克牌UIView 顯示2個suit, 1個rank,因此拉了很多許多IBOutlet
1. AB方 : [撲克牌View]、[rankLabel]、[suitLabel小]、[suitLabel大]、[卡牌數字總數Label]
2. 計算賭金:顯示持有賭金Label、欲出賭金Label、控制金額多少Btns & segment

2. viewDidLoad( )

生成52張卡牌 在cards array裡,使用迴圈將卡牌UIView加上底色及邊框

3. 建立IBAction

UIButton 欲出賭金金額

UILabel顯示欲出賭金金額,UISegmentedControl金額數字,兩個UIButton呈現金額數字加減。設定欲出賭金金額不能小於零&不能超過持有賭金。

UIButton HIT 控制我方抽牌,及判斷輸贏

只截取部分程式碼,完整程式碼請至下方GitHub觀看

🔅我方抽牌,最多五張牌(每按一下抽一張牌,計算我方牌數字總和)

🔅我方判斷輸贏(以超過21點(Burst爆掉)為例
我方判斷輸贏就是 if 裡面有 if ,單方面判斷輸贏
判斷得到的數字符合什麼條件將得到對應的結果,翻譯蒟蒻⬇️

我方卡牌點數>21點時 {
持有賭金等於持有賭金-欲出賭金
持有賭金為零時 {
重新遊戲
}持有賭金為不是零時{
扣掉欲出賭金,繼續下一局
}
}

模擬器畫面:
圖左-尚有賭金,繼續下一局
圖右- 扣掉欲出賭金後,持有賭金≤零,遊戲重新開始

🔅在這邊想提一下寫程式時,先後順序的重要,也許答案相同但過程不同,將帶給人的使用感受也會有些微不同。
圖左-還沒按下OK就直接顯示扣掉的金額
圖右-按下OK才會顯示扣掉的金額。(我個人比較喜好這個)

程式的差異在哪裡呢?
if
bSum > 21 {
//下方兩行誰先誰後,顯示過程將不同
totalBetAmount = totalBetAmount-betAmount
totalBetAmountLabel.text = "$\(totalBetAmount)"
(片段程式碼,完整請至Github)}圖左:先算持有金額再顯示(顯示運算過後的持有金額)
圖右:先顯示金額在算持有金額(顯示未運算前的持有金額)

UIButton STAND 判斷敵方抽牌與否,及判斷輸贏

🔅敵方抽牌,不同於我方抽牌是一張一張抽,敵方需以點數判斷是否抽牌及抽牌數量。因此設定若敵方牌的數字≤16時需抽牌,for i in 2…4數字範圍為撲克牌UIView array 範圍(第三張~第五張)。當敵方牌數字≤17就會一直抽牌。

🔅判斷兩方輸贏
if 裡面有 if 再有 if,一切都是考驗我的邏輯能力啊(遠望…)
翻譯蒟蒻⬇️


//當 A>B 時,有可能會遇到同時符合 "a>21, a=21, a過五關時的牌數總和"的條件,為了避免程式重複判斷,因此將此三項條件寫入A>B內
//A敵方 B我方
if
A>B {
if A>21 {
A方輸,B方持有賭金加上欲出賭金
}else if A==21 { if 持有賭金為零時 {
重新遊戲

}else if 持有賭金為不是零時{
扣掉欲出賭金,繼續下一局
}else if A過五關 {
if持有賭金為零時 {
重新遊戲
}else if持有賭金為不是零時{
扣掉欲出賭金,繼續下一局
}else if A==B {
//AB平手
}else if A<B {
//A方輸,B方持有賭金加上欲出賭金
}
}

Github

--

--