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

目次 解説編

 前回の問題は、♣️以外のマークのカードもJKを除いてすべて出すというものでした。

 前回の問題の答えの一つです。

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

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var lblCard: UILabel!
    @IBOutlet weak var lblCount: UILabel!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        for i in 0 ..< EnumCard.Count {
            let lbl = UILabel(frame: CGRectMake(0, 0, 50, 21))
            lbl.center = CGPointMake(120 + 50 * CGFloat(i / 13), 100 + CGFloat(i % 13) * 30)
            lbl.textAlignment = NSTextAlignment.center
            lbl.text = "⬛️"
            eachCard += [lbl]
            self.view.addSubview(lbl)
        }
   }

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

    enum EnumCard {
        static let Count = 52
    }
    
    var check = [Bool](repeating: false, count: EnumCard.Count)

    var count = EnumCard.Count
    
    var eachCard: [UILabel] = []

    @IBAction func btnGoTouch(_ sender: Any) {
        if count == 0 {
            for i in 0 ..< EnumCard.Count
            {
                check[i] = false
                eachCard[i].text = "⬛️"
            }
            
            let alert = UIAlertController()
            alert.title = "初期化"
            alert.message = "カードを配り直します"
            alert.addAction(UIAlertAction(title: "OK", style: .default))
            present(alert, animated: true, completion: nil)
            count = EnumCard.Count
        }
        else
        {
            var card = 0
            let randInt = Int.random(in: 0 ..< count)
            for i in 0 ... randInt {
                while check[card] {
                    card += 1
                }
                if i < randInt {
                    card += 1
                }
            }
            
            check[card] = true
            
            count -= 1
            lblCount.text = count.description
            
            if card == 52 {
                lblCard.text = "JK"
            } else {
                lblCard.text = mark[card / 13] + number[card % 13]
            }
            
            eachCard[card].text = lblCard.text
        }
    }
}

 このように大量のラベルを貼る時は、コードで生成してしまった方が楽です。さて次回からポーカーに入ります。問題です。5枚のカードを重複無く配って下さい。

目次 解説編

コメントを残す

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

CAPTCHA