新Swiftで行こう…第11回「トランプ1」 田部井保

目次 解説編

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

//
//  ViewController.swift
//  Card
//
//  Created by 保 Tabei on 2024/09/01.
//

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.
    }

    @IBAction func btnGoTouch(_ sender: Any) {
        let mark = Int.random(in: 0 ..< 4)
        let number = Int.random(in: 0 ..< 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 = ""
        }
    }
    
}
 実行してみましょう。
 色々なバリエーションを試してみましょう。

 バリエーション2です。ラベルを1つにしました。

//
//  ViewController.swift
//  Card
//
//  Created by 保 Tabei on 2024/09/01.
//

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var lblCard: UILabel!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }

    @IBAction func btnGoTouch(_ sender: Any) {
        let mark = Int.random(in: 0 ..< 4)
        let number = Int.random(in: 0 ..< 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
    }
    
}

実行してみましょう。

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

//
//  ViewController.swift
//  Card
//
//  Created by 保 Tabei on 2024/09/01.
//

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var lblCard: UILabel!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }

    @IBAction func btnGoTouch(_ sender: Any) {
        let card = Int.random(in: 0 ..< 52)
        
        let strMark:String
        let 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
    }
    
}

 実行してみましょう。

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

//
//  ViewController.swift
//  Card
//
//  Created by 保 Tabei on 2024/09/01.
//

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var lblCard: UILabel!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }

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

    @IBAction func btnGoTouch(_ sender: Any) {
        let card = Int.random(in: 0 ..< 52)
        
        lblCard.text = mark[card / 13] + number[card % 13]
    }
    
}

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

目次 解説編

コメントを残す

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

CAPTCHA