Swiftで行こう…第18回「ポーカー5」(もちゃち)
2014-12-06
ーーーMavericks Xcode6.1ーーー
前回の問題は、ペアを判別するという事でした。
前回の問題の答の一つです。
以下ソースコードです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 |
import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. for i in 0 ..< cardCount { check += [false] } count = cardCount for i in 0 ..< 5 { var lbl = UILabel(frame: CGRectMake(0, 0, 50, 21)) lbl.center = CGPointMake(50 + 50 * CGFloat(i), 50) lbl.textAlignment = NSTextAlignment.Center lbl.text = "⬛️" eachCard += [lbl] self.view.addSubview(lbl) let btn = UIButton(frame: CGRectMake(0, 0, 50, 21)) as UIButton btn.center = CGPointMake(50 + 50 * CGFloat(i), 100) btn.setTitle("off", forState: .Normal) btn.setTitleColor(UIColor.blackColor(), forState: .Normal) btn.addTarget(self, action: "btnTapped:", forControlEvents: .TouchUpInside) btn.tag = i eachButton += [btn] self.view.addSubview(btn) } } func btnTapped(sender: UIButton) { if sender.currentTitle == "off" { sender.setTitle("on", forState: .Normal) eachCard[sender.tag].text = "⬛️" } else { sender.setTitle("off", forState: .Normal) var card = eachCard[sender.tag].tag var strCard: String if card == 52 { strCard = "JK" } else { strCard = mark[card / 13] + number[card % 13] } eachCard[sender.tag].text = strCard } } let mark: [String] = ["♣️","♦️","♥️","♠️"] let number: [String] = ["A","2","3","4","5","6","7","8","9","T","J","Q","K"] let cardCount = 52 var check: [Bool] = [] var count = 0 var eachCard: [UILabel] = [] var eachButton: [UIButton] = [] override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } func put(i: Int) { var card: Int = 0 var randInt = Int(arc4random_uniform(UInt32(count))) for i in 0 ... randInt { while check[card] { card++ } if i < randInt { card++ } } check[card] = true count-- var strCard: String if card == 52 { strCard = "JK" } else { strCard = mark[card / 13] + number[card % 13] } eachCard[i].text = strCard eachCard[i].tag = card } func flush() { var chk:Bool = true var mark: Int = eachCard[0].tag / 13 for i in 1 ..< 5 { if mark != eachCard[i].tag / 13 { chk = false break } } if chk { var alert = UIAlertView() alert.title = "フラッシュ" alert.message = "フラッシュです" alert.addButtonWithTitle("OK") alert.show() } else { var ck:Bool = false for i in 0 ..< 5 { for j in i + 1 ..< 5 { if eachCard[i].tag % 13 == eachCard[j].tag % 13 { ck = true } } } if ck { var alert = UIAlertView() alert.title = "ペア" alert.message = "ペアがあります" alert.addButtonWithTitle("OK") alert.show() } } } @IBAction func btnGoTouch(sender: AnyObject) { for i in 0 ..< cardCount { check[i] = false } count = cardCount for i in 0 ..< 5 { put(i) } flush() } @IBAction func btnReTouch(sender: AnyObject) { for i in 0 ..< 5 { if eachButton[i].currentTitle == "on" { put(i) eachButton[i].setTitle("off", forState: .Normal) } } flush() } } |
さて、今回追加したペアの判定部分、
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
var ck:Bool = false for i in 0 ..< 5 { for j in i + 1 ..< 5 { if eachCard[i].tag % 13 == eachCard[j].tag % 13 { ck = true } } } if ck { var alert = UIAlertView() alert.title = "ペア" alert.message = "ペアがあります" alert.addButtonWithTitle("OK") alert.show() } |
後半部分は、単にメッセージを出す部分なので、前半部分が肝となります。
カードを全パターン比較して、同じ番号のものがあるか判別しています。このコードを少し変更する事で、ワンペア、ツーペア、スリーカード、フルハウス、フォーカードの区別が出来ないでしょうか。