新Swiftで行こう…第73回「ポーカー11解説」 田部井保

目次 通常版

 得点獲得部分です。

    ///役判定関数
    func flush() {
        //チェック変数
        var ck = 0
        //基準カード
        for i in 0 ..< 4 {
            //比較カード
            for j in i + 1 ..< 5 {
                //ナンバーが同じなら
                if eachCard[i].tag % 13 == eachCard[j].tag % 13 {
                    //チェック変数を+1する
                    ck += 1
                }
            }
        }
        //リターン倍率
        var mul = 0
        //ペアのメッセージ保持変数
        var msg: String
        //チェック変数の値によりペア名を指定する
        switch ck {
        case 1:
            msg = "ワンペア"
            mul = 1
        case 2:
            msg = "ツーペア"
            mul = 2
        case 3:
            msg = "スリーカード"
            mul = 3
        case 4:
            msg = "フルハウス"
            mul = 6
        case 6:
            msg = "フォーカード"
            mul = 8
        default:
            msg = ""
        }
        //ペアなら
        if ck > 0 {
            //ペアダイアログを表示
            let alert = UIAlertController()
            alert.title = "ペア"
            alert.message = msg + "です"
            alert.addAction(UIAlertAction(title: "OK", style: .default))
            present(alert, animated: true, completion: nil)
        //ペア以外
        } else {
            //フラッシュ変数とりあえずフラッシュ
            var chk = true
            //1番目(0の位置)のマークを取得(0〜3)
            let mark: Int = eachCard[0].tag / 13
            //2番目から5番目の位置のマークと比較
            for i in 1 ..< 5 {
                //1番目のマークと2〜5番目のマークを比較して違っていたら
                if mark != eachCard[i].tag / 13 {
                    //フラッシュ変数をfalse(フラッシュではない)に
                    chk = false
                    //ループを終了
                    break
                }
            }
            //エースがあるか
            var isAce = false
            //キングがあるか
            var isKing = false
            //5枚のカードについて調べる
            for i in 0 ..< 5 {
                //エースがあったら
                if eachCard[i].tag % 13 == 0 {
                    isAce = true
                }
                //キングがあったら
                if eachCard[i].tag % 13 == 12 {
                    isKing = true
                }
            }
            //エースとキング両方あったらup変数をtrueに
            let up = isAce && isKing
            //最小値変数を宣言
            var min = 0
            //最大値変数を宣言
            var max = 0
            //1番目から5番目までループ
            for i in 0 ..< 5 {
                //変数にそのカードのナンバーを入れる
                var val = eachCard[i].tag % 13
                //エースとキング両方があった場合
                if up {
                    //4以下のカードに
                    if val < 4 {
                        //13加える
                        val = val + 13
                    }
                }
                //1番目ならmin,maxにvalを入れる
                if i == 0 {
                    min = val
                    max = val
                //2番目以降
                } else {
                    //変数が最小値より小さい時
                    if val < min {
                        //最小値を変数に
                        min = val
                    }
                    //変数が最大値より大きい時
                    if max < val {
                        //最大値を変数に
                        max = val
                    }
                }
            }
            //ストレート変数とりあえずストレートでない
            var chk2 = false
            //ロイヤル判定とりあえずロイヤルでない
            var chk3 = false
            //最大値と最小値の差が丁度4の時
            if max - min == 4 {
                //ストレート変数、ストレートに
                chk2 = true
                //最大がエースなら
                if max == 13 {
                    //ロイヤル
                    chk3 = true
                }
            }
            //メッセージ保持変数
            var msg: String = ""
            //ロイヤルなら
            if chk3 {
                msg = "ロイヤル"
            }
            //ストレートなら
            if chk2 {
                //メッセージ変数にストレートを追加する
                msg += "ストレート"
            }
            //フラッシュなら
            if chk {
                //メッセージ変数にフラッシュを追加する
                msg += "フラッシュ"
            }
            //ストレート
            if chk2 {
                //フラッシュ
                if chk {
                    //ロイヤル
                    if chk3 {
                        mul = 10
                    //ロイヤルでない
                    } else {
                        mul = 7
                    }
                //フラッシュでない
                } else {
                    //ロイヤル
                    if chk3 {
                        mul = 9
                    //ロイヤルでない
                    } else {
                        mul = 4
                    }
                }
            //ストレートでない
            } else {
                //フラッシュ
                if chk {
                    mul = 5
                }
            }
            //フラッシュ変数がtrueまたはストレート変数がtrue
            if chk || chk2 {
                //ストレート、フラッシュダイアログを表示
                let alert = UIAlertController()
                alert.title = msg
                alert.message = msg + "です"
                alert.addAction(UIAlertAction(title: "OK", style: .default))
                present(alert, animated: true, completion: nil)
            }
        }
        //ポイントに賭け点×リターン倍率を足す
        point = point + betPoint * mul
        //賭け点0
        betPoint = 0
        //点数表示
        display()
    }

 ストレート、フラッシュの部分を分かり易くしました。

    ///役判定関数
    func flush() {
        //チェック変数
        var ck = 0
        //基準カード
        for i in 0 ..< 4 {
            //比較カード
            for j in i + 1 ..< 5 {
                //ナンバーが同じなら
                if eachCard[i].tag % 13 == eachCard[j].tag % 13 {
                    //チェック変数を+1する
                    ck += 1
                }
            }
        }
        //リターン倍率
        var mul = 0
        //ペアのメッセージ保持変数
        var msg: String
        //チェック変数の値によりペア名を指定する
        switch ck {
        case 1:
            msg = "ワンペア"
            mul = 1
        case 2:
            msg = "ツーペア"
            mul = 2
        case 3:
            msg = "スリーカード"
            mul = 3
        case 4:
            msg = "フルハウス"
            mul = 6
        case 6:
            msg = "フォーカード"
            mul = 8
        default:
            msg = ""
        }
        //ペアなら
        if ck > 0 {
            //ペアダイアログを表示
            let alert = UIAlertController()
            alert.title = "ペア"
            alert.message = msg + "です"
            alert.addAction(UIAlertAction(title: "OK", style: .default))
            present(alert, animated: true, completion: nil)
        //ペア以外
        } else {
            //フラッシュ変数とりあえずフラッシュ
            var chk = true
            //1番目(0の位置)のマークを取得(0〜3)
            let mark: Int = eachCard[0].tag / 13
            //2番目から5番目の位置のマークと比較
            for i in 1 ..< 5 {
                //1番目のマークと2〜5番目のマークを比較して違っていたら
                if mark != eachCard[i].tag / 13 {
                    //フラッシュ変数をfalse(フラッシュではない)に
                    chk = false
                    //ループを終了
                    break
                }
            }
            //エースがあるか
            var isAce = false
            //キングがあるか
            var isKing = false
            //5枚のカードについて調べる
            for i in 0 ..< 5 {
                //エースがあったら
                if eachCard[i].tag % 13 == 0 {
                    isAce = true
                }
                //キングがあったら
                if eachCard[i].tag % 13 == 12 {
                    isKing = true
                }
            }
            //エースとキング両方あったらup変数をtrueに
            let up = isAce && isKing
            //最小値変数を宣言
            var min = 0
            //最大値変数を宣言
            var max = 0
            //1番目から5番目までループ
            for i in 0 ..< 5 {
                //変数にそのカードのナンバーを入れる
                var val = eachCard[i].tag % 13
                //エースとキング両方があった場合
                if up {
                    //4以下のカードに
                    if val < 4 {
                        //13加える
                        val = val + 13
                    }
                }
                //1番目ならmin,maxにvalを入れる
                if i == 0 {
                    min = val
                    max = val
                //2番目以降
                } else {
                    //変数が最小値より小さい時
                    if val < min {
                        //最小値を変数に
                        min = val
                    }
                    //変数が最大値より大きい時
                    if max < val {
                        //最大値を変数に
                        max = val
                    }
                }
            }
            //ストレート変数とりあえずストレートでない
            var chk2 = false
            //ロイヤル判定とりあえずロイヤルでない
            var chk3 = false
            //最大値と最小値の差が丁度4の時
            if max - min == 4 {
                //ストレート変数、ストレートに
                chk2 = true
                //最大がエースなら
                if max == 13 {
                    //ロイヤル
                    chk3 = true
                }
            }
            //メッセージ保持変数
            var msg: String = ""
            //ロイヤルなら
            if chk3 {
                msg = "ロイヤル"
            }
            //ストレートなら
            if chk2 {
                //メッセージ変数にストレートを追加する
                msg += "ストレート"
            }
            //フラッシュなら
            if chk {
                //メッセージ変数にフラッシュを追加する
                msg += "フラッシュ"
            }
            if msg == "ストレート" {
                mul = 4
            } else if msg == "フラッシュ" {
                mul = 5
            } else if msg == "ストレートフラッシュ" {
                mul = 7
            } else if msg == "ロイヤルストレート" {
                mul = 9
            } else if msg == "ロイヤルストレートフラッシュ" {
                mul = 10
            }
            //フラッシュ変数がtrueまたはストレート変数がtrue
            if chk || chk2 {
                //ストレート、フラッシュダイアログを表示
                let alert = UIAlertController()
                alert.title = msg
                alert.message = msg + "です"
                alert.addAction(UIAlertAction(title: "OK", style: .default))
                present(alert, animated: true, completion: nil)
            }
        }
        //ポイントに賭け点×リターン倍率を足す
        point = point + betPoint * mul
        //賭け点0
        betPoint = 0
        //点数表示
        display()
    }

 分かり易くなりましたね。

 もう少し変更しました。

    ///役判定関数
    func flush() {
        //チェック変数
        var ck = 0
        //基準カード
        for i in 0 ..< 4 {
            //比較カード
            for j in i + 1 ..< 5 {
                //ナンバーが同じなら
                if eachCard[i].tag % 13 == eachCard[j].tag % 13 {
                    //チェック変数を+1する
                    ck += 1
                }
            }
        }
        //リターン倍率
        var mul = 0
        //ペアのメッセージ保持変数
        var msg: String
        //チェック変数の値によりペア名を指定する
        switch ck {
        case 1:
            msg = "ワンペア"
            mul = 1
        case 2:
            msg = "ツーペア"
            mul = 2
        case 3:
            msg = "スリーカード"
            mul = 3
        case 4:
            msg = "フルハウス"
            mul = 6
        case 6:
            msg = "フォーカード"
            mul = 8
        default:
            msg = ""
        }
        //ペアなら
        if ck > 0 {
            //ペアダイアログを表示
            let alert = UIAlertController()
            alert.title = "ペア"
            alert.message = msg + "です"
            alert.addAction(UIAlertAction(title: "OK", style: .default))
            present(alert, animated: true, completion: nil)
        //ペア以外
        } else {
            //フラッシュ変数とりあえずフラッシュ
            var chk = true
            //1番目(0の位置)のマークを取得(0〜3)
            let mark: Int = eachCard[0].tag / 13
            //2番目から5番目の位置のマークと比較
            for i in 1 ..< 5 {
                //1番目のマークと2〜5番目のマークを比較して違っていたら
                if mark != eachCard[i].tag / 13 {
                    //フラッシュ変数をfalse(フラッシュではない)に
                    chk = false
                    //ループを終了
                    break
                }
            }
            //エースがあるか
            var isAce = false
            //キングがあるか
            var isKing = false
            //5枚のカードについて調べる
            for i in 0 ..< 5 {
                //エースがあったら
                if eachCard[i].tag % 13 == 0 {
                    isAce = true
                }
                //キングがあったら
                if eachCard[i].tag % 13 == 12 {
                    isKing = true
                }
            }
            //エースとキング両方あったらup変数をtrueに
            let up = isAce && isKing
            //最小値変数を宣言
            var min = 0
            //最大値変数を宣言
            var max = 0
            //1番目から5番目までループ
            for i in 0 ..< 5 {
                //変数にそのカードのナンバーを入れる
                var val = eachCard[i].tag % 13
                //エースとキング両方があった場合
                if up {
                    //4以下のカードに
                    if val < 4 {
                        //13加える
                        val = val + 13
                    }
                }
                //1番目ならmin,maxにvalを入れる
                if i == 0 {
                    min = val
                    max = val
                    //2番目以降
                } else {
                    //変数が最小値より小さい時
                    if val < min {
                        //最小値を変数に
                        min = val
                    }
                    //変数が最大値より大きい時
                    if max < val {
                        //最大値を変数に
                        max = val
                    }
                }
            }
            //メッセージ保持変数
            var msg: String = ""
            //ロイヤルなら
            if max - min == 4 && max == 13 {
                msg = "ロイヤル"
            }
            //ストレートなら
            if max - min == 4 {
                //メッセージ変数にストレートを追加する
                msg += "ストレート"
            }
            //フラッシュなら
            if chk {
                //メッセージ変数にフラッシュを追加する
                msg += "フラッシュ"
            }
            if msg == "ストレート" {
                mul = 4
            } else if msg == "フラッシュ" {
                mul = 5
            } else if msg == "ストレートフラッシュ" {
                mul = 7
            } else if msg == "ロイヤルストレート" {
                mul = 9
            } else if msg == "ロイヤルストレートフラッシュ" {
                mul = 10
            } else {
                msg = "ブタ"
                mul = 0
            }
            //ストレート、フラッシュダイアログを表示
            let alert = UIAlertController()
            alert.title = msg
            alert.message = msg + "です"
            alert.addAction(UIAlertAction(title: "OK", style: .default))
            present(alert, animated: true, completion: nil)
        }
        //ポイントに賭け点×リターン倍率を足す
        point = point + betPoint * mul
        //賭け点0
        betPoint = 0
        //点数表示
        display()
    }

 今回もそんなに難しくないと思います。

目次 通常版

コメントを残す

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

CAPTCHA