Swiftで行こう…第9回「トランプ1」(もちゃち)

2014-10-26

目次ページへ

ーーーMavericks Xcode6.1ーーー
M009-01
M009-02
画面にラベルを2つ横に並べて、下にボタンを1個用意して下さい。そして以下のコードを書きます。
import UIKit

class ViewController: UIViewController {
    @IBOutlet weak var lblMark: UILabel!
    @IBOutlet weak var lblNumber: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBAction func btnGoTouch(sender: AnyObject) {
        var mark = arc4random_uniform(4)
        var number = arc4random_uniform(13)

        switch mark {
        case 0:
            lblMark.text = "♣️"
        case 1:
            lblMark.text = "♦️"
        case 2:
            lblMark.text = "♥️"
        case 3:
            lblMark.text = "♠️"
        default:
            lblMark.text = ""
        }

        switch number {
        case 0:
            lblNumber.text = "A"
        case 1:
            lblNumber.text = "2"
        case 2:
            lblNumber.text = "3"
        case 3:
            lblNumber.text = "4"
        case 4:
            lblNumber.text = "5"
        case 5:
            lblNumber.text = "6"
        case 6:
            lblNumber.text = "7"
        case 7:
            lblNumber.text = "8"
        case 8:
            lblNumber.text = "9"
        case 9:
            lblNumber.text = "T"
        case 10:
            lblNumber.text = "J"
        case 11:
            lblNumber.text = "Q"
        case 12:
            lblNumber.text = "K"
        default:
            lblNumber.text = ""
        }
    }
}
実行してみましょう。
色々なバリエーションを試してみましょう。
M009-03
M009-04
バリエーション2です。ラベルを1つにしました。
import UIKit

class ViewController: UIViewController {
    @IBOutlet weak var lblCard: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBAction func btnGoTouch(sender: AnyObject) {
        var mark = arc4random_uniform(4)
        var number = arc4random_uniform(13)

        var strMark: String
        var strNumber: String

        switch mark {
        case 0:
            strMark = "♣️"
        case 1:
            strMark = "♦️"
        case 2:
            strMark = "♥️"
        case 3:
            strMark = "♠️"
        default:
            strMark = ""
        }

        switch number {
        case 0:
            strNumber = "A"
        case 1:
            strNumber = "2"
        case 2:
            strNumber = "3"
        case 3:
            strNumber = "4"
        case 4:
            strNumber = "5"
        case 5:
            strNumber = "6"
        case 6:
            strNumber = "7"
        case 7:
            strNumber = "8"
        case 8:
            strNumber = "9"
        case 9:
            strNumber = "T"
        case 10:
            strNumber = "J"
        case 11:
            strNumber = "Q"
        case 12:
            strNumber = "K"
        default:
            strNumber = ""
        }

        lblCard.text = strMark + strNumber
    }
}
実行してみましょう。
M009-05
M009-06
バリエーション3です。ランダムに出す数をマークとナンバーで分けなくしました。ここで、”/”は商、”%”は剰余を求めます。トランプの場合、一度配られたカードは捨てられたカードを復活させた場合以外はもう出て来ません。そこでマークとナンバーを分けていると、例えばハート♥️はもう出尽くしたのにマークのハート♥️が出てしまうという事が考えられます。ランダムに出す数は一つの方が良いと思われます。もっとも数が一つでも重複しますが。ジョーカーの事を考えると一つの方が良いと思われます。
import UIKit

class ViewController: UIViewController {
    @IBOutlet weak var lblCard: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBAction func btnGoTouch(sender: AnyObject) {
        var card = arc4random_uniform(52)
        var strMark: String
        var strNumber: String

        switch card / 13 {
        case 0:
            strMark = "♣️"
        case 1:
            strMark = "♦️"
        case 2:
            strMark = "♥️"
        case 3:
            strMark = "♠️"
        default:
            strMark = ""
        }

        switch card % 13 {
        case 0:
            strNumber = "A"
        case 1:
            strNumber = "2"
        case 2:
            strNumber = "3"
        case 3:
            strNumber = "4"
        case 4:
            strNumber = "5"
        case 5:
            strNumber = "6"
        case 6:
            strNumber = "7"
        case 7:
            strNumber = "8"
        case 8:
            strNumber = "9"
        case 9:
            strNumber = "T"
        case 10:
            strNumber = "J"
        case 11:
            strNumber = "Q"
        case 12:
            strNumber = "K"
        default:
            strNumber = ""
        }

        lblCard.text = strMark + strNumber
    }
}
実行してみましょう。
M009-07
バリエーション4です。配列という仕組みを使ってみました。シンプルになりました。
import UIKit

class ViewController: UIViewController {
    @IBOutlet weak var lblCard: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    let mark: [String] = ["♣️","♦️","♥️","♠️"]
    let number: [String] = ["A","2","3","4","5","6","7","8","9","T","J","Q","K"]

    @IBAction func btnGoTouch(sender: AnyObject) {
        var card = Int(arc4random_uniform(52))

        lblCard.text = mark[card / 13] + number[card % 13]
    }
}
さて問題です。更にジョーカーを出すにはどうすれば良いでしょうか。やり方はいろいろあると思います。ただいずれにせよスマートではなくなると思います。ジョーカーは”JK”として下さい。
ーーーMavericks Xcode6.0.1ーーー

画面にラベルを2つ横に並べて、下にボタンを1個用意して下さい。そして以下のコードを書きます。

09-01

09-02

色々なバリエーションを試してみましょう。
バリエーション2です。ラベルを1つにしました。

09-03

09-04

バリエーション3です。ランダムに出す数をマークとナンバーで分けなくしました。ここで、”/”は商、”%”は剰余を求めます。トランプの場合、一度配られたカードは捨てられたカードを復活させた場合以外はもう出て来ません。そこでマークとナンバーを分けていると、例えばハート♥️はもう出尽くしたのにマークのハート♥️が出てしまうという事が考えられます。ランダムに出す数は一つの方が良いと思われます。もっとも数が一つでも重複しますが。ジョーカーの事を考えると一つの方が良いと思われます。

09-05

09-06

バリエーション4です。配列という仕組みを使ってみました。シンプルになりました。

09-07

さて問題です。更にジョーカーを出すにはどうすれば良いでしょうか。やり方はいろいろあると思います。ただいずれにせよスマートではなくなると思います。ジョーカーは”JK”として下さい。

目次ページへ

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