撲克牌遊戲-射龍門

原本想說連假第一天就要把這個app完成,結果…

最後一天才完成…

射龍門是從小到大過年會玩的遊戲

規則是:

  1. 下籌碼
  2. 開龍門
  3. 開牌
  4. 若牌在龍門範圍內,莊家則會給你籌碼的錢;在龍門外,莊家則會把錢收回去
  5. 若撞柱,卡牌與龍門數字相符,則要給出Double的籌碼;若卡牌與龍門數字3個都一樣,則要給出3倍的籌碼

用到的action

  1. UIStepper 控制下注金額
  2. UIButton 控制龍門圖片及射龍門

— — — —

  1. 撲克牌

利用 func 來方便可以重複使用

func createPoker() {
Pokers = [ Poker(suit: "♠️" , number: "A"),
Poker(suit: "♠️" , number: "2"),
Poker(suit: "♠️" , number: "3"),
Poker(suit: "♠️" , number: "4"),
Poker(suit: "♠️" , number: "5"),
Poker(suit: "♠️" , number: "6"),
Poker(suit: "♠️" , number: "7"),
Poker(suit: "♠️" , number: "8"),
Poker(suit: "♠️" , number: "9"),
Poker(suit: "♠️" , number: "10"),
Poker(suit: "♠️" , number: "J"),
Poker(suit: "♠️" , number: "Q"),
Poker(suit: "♠️" , number: "K"),
Poker(suit: "❤️" , number: "A"),
Poker(suit: "❤️" , number: "2"),
Poker(suit: "❤️" , number: "3"),
Poker(suit: "❤️" , number: "4"),
Poker(suit: "❤️" , number: "5"),
Poker(suit: "❤️" , number: "6"),
Poker(suit: "❤️" , number: "7"),
Poker(suit: "❤️" , number: "8"),
Poker(suit: "❤️" , number: "9"),
Poker(suit: "❤️" , number: "10"),
Poker(suit: "❤️" , number: "J"),
Poker(suit: "❤️" , number: "Q"),
Poker(suit: "❤️" , number: "K"),
Poker(suit: "♦️" , number: "A"),
Poker(suit: "♦️" , number: "2"),
Poker(suit: "♦️" , number: "3"),
Poker(suit: "♦️" , number: "4"),
Poker(suit: "♦️" , number: "5"),
Poker(suit: "♦️" , number: "6"),
Poker(suit: "♦️" , number: "7"),
Poker(suit: "♦️" , number: "8"),
Poker(suit: "♦️" , number: "9"),
Poker(suit: "♦️" , number: "10"),
Poker(suit: "♦️" , number: "J"),
Poker(suit: "♦️" , number: "Q"),
Poker(suit: "♦️" , number: "K"),
Poker(suit: "♣️" , number: "A"),
Poker(suit: "♣️" , number: "2"),
Poker(suit: "♣️" , number: "3"),
Poker(suit: "♣️" , number: "4"),
Poker(suit: "♣️" , number: "5"),
Poker(suit: "♣️" , number: "6"),
Poker(suit: "♣️" , number: "7"),
Poker(suit: "♣️" , number: "8"),
Poker(suit: "♣️" , number: "9"),
Poker(suit: "♣️" , number: "10"),
Poker(suit: "♣️" , number: "J"),
Poker(suit: "♣️" , number: "Q"),
Poker(suit: "♣️" , number: "K"),
]
}

2.UIStepper

當龍門還沒開時,還可以進行下注動作

//下注按鈕
@IBAction func ChangeStepper(_ sender: UIStepper) {
if MaxPokerImage.image == nil && MinPokerImage.image == nil {
sender.maximumValue = Double(MaxMoneyLabel.text!) ?? 0
PayMoneyLabel.text = "\(Int(sender.value))"
if Int(PayMoneyLabel.text!)! > Int(MaxMoneyLabel.text!)! {
alert(title: "注意", message: "籌碼不夠", button: "確認")
}
}
}

3.UIButton

3–1 開龍門

使用亂數隨機翻牌,前提是還有錢錢可以玩時

@IBAction func OpenDoor(_ sender: UIButton) {
if MaxPokerImage.image == nil || MinPokerImage.image == nil {
Stepper.isEnabled = false
if Int(MaxMoneyLabel.text!)! > 0 {
if sender.tag == 0 { //尚未開門時,開一扇門
sender.tag = 1
let minRadomNumber = Int.random(in: 0...Pokers.count-1)
opeDragonDoor(num: minRadomNumber, type: "min") //翻盤
Pokers.remove(at: minRadomNumber) //刪除該筆資料
changePokerTotal() //變更剩餘牌數
} else if sender.tag == 1 { //開一扇門時,開第二扇
sender.tag = 2
let maxRadomNumber = Int.random(in: 0...Pokers.count-1)
opeDragonDoor(num: maxRadomNumber, type: "max") //翻牌
Pokers.remove(at: maxRadomNumber) //刪除該筆資料
changePokerTotal()//變更剩餘牌數
//openDrgonButton.setTitle("開龍門", for:.normal)
openDrgonButton.isEnabled = false
}
} else {
alert(title: "注意!!", message: "沒錢怎麼玩...!!", button: "確認")
}
} else {
sender.tag = 0
openDrgonButton.setTitle("開龍門", for:.normal)
Stepper.isEnabled = true
cleanImage()
}
}

3–2 射龍門

簡單的判斷大小,去使用加錢扣錢func

//射龍門
@IBAction func PlayGame(_ sender: UIButton) {
if Int(MaxMoneyLabel.text!)! > 0 {
if openPokerImage.image == nil {
//如果還沒開龍門時
if MinPokerImage.image != nil && MaxPokerImage.image != nil {
let RadomNumber = Int.random(in: 0...Pokers.count-1)
opeDragonDoor(num: RadomNumber, type: "play") //翻牌
Pokers.remove(at: RadomNumber) //刪除該筆資料
changePokerTotal() //變更剩餘牌數

//判斷輸贏 //回傳Int 好比大小
let max : Int = CheckJQKNumber(Poker: tmpMaxPoker)
let min : Int = CheckJQKNumber(Poker: tmpMinPoker)
let open : Int = CheckJQKNumber(Poker: tmpOpenPoker)
//處理牌
if open == max || open == min {
alert(title: "一般撞柱!!", message: "賠下注金額2倍", button: "幫QQ")
changeMaxMoneyLabel(transport: "-", multiple: 2)
} else { //沒撞柱的話才判斷
//先判斷左邊大還是右邊大
if max > min {
if open < max && open > min {
alert(title: "恭喜!!", message: "PASS", button: "確認")
changeMaxMoneyLabel(transport: "+", multiple: 1)
} else {
alert(title: "真可惜", message: "賠下注金額", button: "確認")
changeMaxMoneyLabel(transport: "-", multiple: 1)
}
} else if max < min {
if open > max && open < min {
alert(title: "恭喜!!", message: "PASS", button: "確認")
changeMaxMoneyLabel(transport: "+", multiple: 1)
} else {
alert(title: "真可惜", message: "賠下注金額", button: "確認")
changeMaxMoneyLabel(transport: "-", multiple: 1)
}
} else if max == min {
if open == max && open == min {
alert(title: "對子撞柱!!", message: "賠下注金額3倍", button: "幫QQ")
changeMaxMoneyLabel(transport: "-", multiple: 3)
} else {
alert(title: "真可惜", message: "賠下注金額", button: "確認")
changeMaxMoneyLabel(transport: "-", multiple: 1)
}
}
}
openDrgonButton.setTitle("清空", for:.normal)
openDrgonButton.isEnabled = true
} else {
alert(title: "注意!!", message: "先開門喔~", button: "確認")
}
}
} else {
alert(title: "注意!!", message: "沒錢怎麼玩...!!", button: "確認")
}

3–3 ALLIN

若還沒開牌時,可以allin

//梭哈
@IBAction func allIn(_ sender: UIButton) {
if MinPokerImage.image == nil && MaxPokerImage.image == nil {
PayMoneyLabel.text = MaxMoneyLabel.text
}

}

3–4 重新開始

把基本資訊設回預設值

@IBAction func restart(_ sender: UIButton) {
MaxMoneyLabel.text = "1000"
PayMoneyLabel.text = "100"
createPoker()
cleanImage()
changePokerTotal()
openDrgonButton.tag = 0
openDrgonButton.setTitle("開龍門", for:.normal)
openDrgonButton.isEnabled = true
Stepper.isEnabled = true
}

附上Demo

附上我的GitHub

--

--