新Swiftで行こう…第29回「ポーカー14」 田部井保

目次 解説編

 yaku関数で、得点の他に役名を返すようにします。

    func yaku() -> (Int, String) {
        var ck = 0
        for i in 0 ..< 5 {
            for j in i + 1 ..< 5 {
                if eachCard[i].tag % 13 == eachCard[j].tag % 13 {
                    ck += 1
                }
            }
        }
        var mul = 0
        var msg:String = ""
        if ck > 0 {
            switch ck {
            case 1:
                mul = 1
                msg = "ワンペア"
            case 2:
                mul = 2
                msg = "ツーペア"
            case 3:
                mul = 3
                msg = "スリーカード"
            case 4:
                mul = 6
                msg = "フルハウス"
            case 6:
                mul = 8
                msg = "フォーカード"
            default:
                mul = 0
            }
        } else {
            var chk = true
            let mark:Int = eachCard[0].tag / 13
            for i in 1 ..< 5 {
                if mark != eachCard[i].tag / 13 {
                    chk = false
                    break
                }
            }
            var min = 0
            var max = 0
            min = eachCard[0].tag % 13
            max = eachCard[0].tag % 13
            var isAce:Bool = false
            var isKing:Bool = false
            for i in 0 ..< 5 {
                if eachCard[i].tag % 13 == 0 {
                    isAce = true
                }
                if eachCard[i].tag % 13 == 12 {
                    isKing = true
                }
            }
            let up = isAce && isKing
            for i in 1 ..< 5 {
                var val = eachCard[i].tag % 13
                if up {
                    if val < 4 {
                        val = val + 13
                    }
                }
                if val < min {
                    min = val
                }
                if max < val {
                    max = val
                }
            }
            if max - min == 4 {
                if max == 13 { 
                    if chk {
                        mul = 10
                        msg = "ロイヤルストレートフラッシュ "
                    } else {
                        mul = 9
                        msg = "ロイヤルストレート"
                    }
                } else {
                    if chk { 
                        mul = 7
                        msg = "ストレートフラッシュ"
                    } else {
                        mul = 4
                        msg = "ストレート"
                    }
                }
            } else {
                if chk {
                    mul = 5
                    msg = "フラッシュ"
                } else {
                    mul = 0
                    msg = "ブタ"
                }
            }
        }
        return (mul, msg)
    }
    
    func flush() {
        var mul = 0
        var msg: String 
        (mul, msg) = yaku()
        var title: String
        title = msg
        var realMul: Int
        realMul = mul - beforeMul
        if realMul < 0 { 
            realMul = 0
        }
        point = point + betPoint * realMul
        betPoint = 0

        if point == 0 {
            title = "ゲームオーバー "
            msg = "ゲームオーバー "
            point = 10
        }
        let alert = UIAlertController()
        alert.title = title
        alert.message = msg + "です"
        alert.addAction(UIAlertAction(title: "OK", style: .default))
        present(alert, animated: true, completion: nil)
        display()
    }

    var beforeMul = 0

    @IBAction func btnGoTouch(_ sender: Any) {
        for i in 0 ..< EnumCard.Count {
            check[i] = false
        }
        count = EnumCard.Count
        for i in 0 ..< 5 {
            put(i: i)
        }
        btnRe.isEnabled = true
        var msg:String
        (beforeMul, msg) = yaku()
        lblBefore.text = "基準:" + msg + ":" +  beforeMul.description
    }

 次回は、トランプの基本部分を別クラスに外出ししようと思います。

 バグがありました。第23回「ポーカー8」の最後の方を参照して下さい。

目次 解説編

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA