Swiftで行こう…第25回「ポーカー12」(もちゃち)

2015-01-03

目次ページへ

ーーーMavericks Xcode6.1ーーー
さて、ゲームオーバーの表示ですが、僕は最初、単純にflush関数の最後に入れました。するとゲームオーバーと出た後にブタと出てしまいます。そこでdisplay関数にいれようと思い入れてみると、点を賭けている時に元の点が0になるとゲームオーバーの表示が出てしまいます。考えてみれば当たり前ですね。馬鹿な事をしました。そこでflush関数のメッセージ表示部分、ペアとペア以外で分かれていますが、これを一つにして、ここでゲームオーバーも表示するようにする事にしました。この改造をやってみると、結構すっきりしました。そもそもメッセージ表示部分が二つに分かれていたのが問題でした。これは順番にまずフラッシュを入れて、ペアを入れてとやったので2つに分かれていました。
以下flush関数のソースコードです。

    func flush() {
        var ck:Int = 0
        for i in 0 ..< 5 {
            for j in i + 1 ..< 5 {
                if eachCard[i].tag % 13 == eachCard[j].tag % 13 {
                    ck += 1
                }
            }
        }
        var msg: String
        var title: String
        var mul:Int = 0
        if ck > 0 {
            title = "ペア"
            var alert = UIAlertView()
            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 = ""
            }
        } else {
            var chk:Bool = true
            var mark: Int = eachCard[0].tag / 13
            for i in 1 ..< 5 {
                if mark != eachCard[i].tag / 13 {
                    chk = false
                    break
                }
            }
            var min:Int = 0
            var max:Int = 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
                }
            }
            var up:Bool = 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 {
                        msg = "ロイヤルストレートフラッシュ"
                        mul = 10
                    } else {
                        msg = "ロイヤルストレート"
                        mul = 9
                    }
                } else {
                    if chk {
                        msg = "ストレートフラッシュ"
                        mul = 7
                    } else {
                        msg = "ストレート"
                        mul = 4
                    }
                }
            } else {
                if chk {
                    msg = "フラッシュ"
                    mul = 5
                } else {
                    msg = "ブタ"
                    mul = 0
                }
            }
            title = msg
        }
        point = point + betPoint * mul
        betPoint = 0
        if point == 0 {
            title = "ゲームオーバー"
            msg = "ゲームオーバー"
            point = 10
        }
        var alert = UIAlertView()
        alert.addButtonWithTitle("OK")
        alert.title = title
        alert.message = msg + "です"
        alert.show()
        display()
    }

さて、これでゲームをやってみると判るのですが、配られた時に既にワンペアが出来ていた場合、ワンペアの所を残せば、賭け点を全部賭けても必ず還ってくるので絶対に損はしません。もっと大きな役が出来ていたら必ず得をします。そこで、最初配られたカードで出来ていた役を0倍として、それより上の役が出来たらその倍数から、配られたカードで出来ていた役の倍数を引いて得点とするようにします。分かりにくいので例を示すと、最初ツーペアが出来ていて、1枚替えてフルハウスになったとします。ツーペアの倍数は2、フルハウスの倍数は6なので、6から2を引いて4倍となります。この改造をやってみて下さい。

目次ページへ

Since1991 © Shimayugu All Rights Reserved.
アップルおよびアップルのロゴは、米国および他の国々で登録されたApple Inc.の商標です。
湘南マッキントッシュユーザーズグループは、独立したユーザグループで、Apple Japan合同会社が権限を与えた団体、支援する団体、またはその他に承認する団体ではありません。