新Swiftで行こう…第35回「ババ抜き4」 田部井保

目次 解説編

 最初からカードが配られるように変更します。本来は伏せるのですが、きちんと処理されているのを確かめる為に、表にして処理します。そして配るボタンを配り直しボタンにします。今までは、配るボタン、1回配ってからもう一回押すとエラーになっていました。

 今回関数構成を見直しました。

以下ソースコードです。

//
//  ViewController.swift
//  baba
//
//  Created by 保 Tabei on 2024/09/15.
//

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        put53()
    }

    var eachCard: [[UILabel]] = [[],[],[],[]]
    var cardObj:Card = Card(cdCnt: Card.EnumCard.joker)
    func put53() {
        for i in 0 ..< 4 {
            for j in 0 ..< 14 {
                let lbl = UILabel(frame: CGRectMake(0, 0, 50, 21))
                lbl.center = CGPointMake(50 + 40 * CGFloat(j % 7), 150 + 120 * CGFloat(i) +
                                         50 * CGFloat(j / 7))
                lbl.textAlignment = NSTextAlignment.center
                if i != 0 && j == 13 {
                    lbl.text = " "
                } else {
                    lbl.text = "⬛️"
                }
                eachCard[i] += [lbl]
                self.view.addSubview(lbl)
            }
        }
        share()
        show()
    }

    func share() {
        cardObj.reset()
        for i in 0 ..< 4 {
            for j in 0 ..< 14 {
                if i != 0 && j == 13 {
                    eachCard[i][j].tag = -1
                } else {
                    var ii: Int
                    ii = cardObj.put()
                    eachCard[i][j].text = cardObj.disp(card: ii)
                    eachCard[i][j].tag = ii
                }
            }
        }
    }

    func show() {
        for i in 0 ..< 4 {
            for j in 0 ..< 14 {
                if eachCard[i][j].tag >= 0 {
                    eachCard[i][j].text = cardObj.disp(card: eachCard[i][j].tag)
                } else {
                    eachCard[i][j].text = " "
                }
            }
        }
    }

    @IBAction func btnGoTouch(_ sender: Any) {
        //for i in 0 ..< 4 {
        //    for j in 0 ..< 14 {
        //        if i != 0 && j == 13 {
        //        } else {
        //            eachCard[i][j].tag = cardObj.put()
        //            eachCard[i][j].text = cardObj.disp(card: eachCard[i][j].tag)
        //        }
        //    }
        //}
        share()
        show()
    }
    
    @IBAction func btnPairTouch(_ sender: Any) {
        for i in 0 ..< 4 {
            for j in 0 ..< 13 {
                if (eachCard[i][j].tag == 52) || (eachCard[i][j].tag == -1) {
                    continue
                }
                for k in j + 1 ..< 14 {
                    if (eachCard[i][k].tag == 52) || (eachCard[i][k].tag == -1) {
                        continue
                    }
                    if (eachCard[i][j].tag % 13) == (eachCard[i][k].tag % 13) {
                        eachCard[i][j].tag = -1
                        eachCard[i][k].tag = -1
                        break
                    }
                }
            }
            var find = false
            var k = 0
            for j in 0 ..< 14 {
                if eachCard[i][j].tag == -1 {
                    find = true
                } else {
                    if find {
                        eachCard[i][k].tag = eachCard[i][j].tag
                        eachCard[i][j].tag = -1
                    }
                    k += 1
                }
            }
            //for j in 0 ..< 14 {
            //    if eachCard[i][j].tag >= 0 {
            //        eachCard[i][j].text = cardObj.disp(card: eachCard[i][j].tag)
            //    } else {
            //        eachCard[i][j].text = " "
            //    }
            //}
        }
        show()
    }
}

目次 解説編

コメントを残す

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

CAPTCHA