新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”として下さい。