新Swiftで行こう…第16回「ポーカー1」 田部井保
前回の問題は、5枚のカードを重複無く配るという事でした。
前回の問題の答の一つです。
//
// ViewController.swift
// Poker
//
// Created by 保 Tabei on 2024/09/09.
//
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var lblCard1: UILabel!
@IBOutlet weak var lblCard2: UILabel!
@IBOutlet weak var lblCard3: UILabel!
@IBOutlet weak var lblCard4: UILabel!
@IBOutlet weak var lblCard5: 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"]
enum EnumCard {
static let Count = 52
}
var check: [Bool] = [Bool](repeating: false, count: EnumCard.Count)
var count = EnumCard.Count
@IBAction func btnGoTouch(_ sender: Any) {
for i in 0 ..< EnumCard.Count {
check[i] = false
}
count = EnumCard.Count
for i in 0 ..< 5 {
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
var strCard: String
if card == 52 {
strCard = "JK"
} else {
strCard = mark[card / 13] + number[card % 13]
}
switch i {
case 0:
lblCard1.text = strCard
case 1:
lblCard2.text = strCard
case 2:
lblCard3.text = strCard
case 3:
lblCard4.text = strCard
case 4:
lblCard5.text = strCard
default:
lblCard1.text = strCard
}
}
}
}
5枚程度でもラベルをプログラムで生成する方が良いかも知れません。
プログラムで生成する方法にしてみました。
//
// ViewController.swift
// Poker
//
// Created by 保 Tabei on 2024/09/09.
//
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
for i in 0 ..< 5 {
var lbl = UILabel(frame: CGRectMake(0, 0, 50, 21))
lbl.center = CGPointMake(100 + 50 * CGFloat(i), 250)
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] = [Bool](repeating: false, count: EnumCard.Count)
var count = EnumCard.Count
var eachCard: [UILabel] = []
@IBAction func btnGoTouch(_ sender: Any) {
for i in 0 ..< EnumCard.Count {
check[i] = false
}
count = EnumCard.Count
for i in 0 ..< 5 {
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
var strCard: String
if card == 52 {
strCard = "JK"
} else {
strCard = mark[card / 13] + number[card % 13]
}
eachCard[i].text = strCard
}
}
}
次回は、捨てるカードを選択出来るようにします。これは結構難しいです。