新Swiftで行こう…第93回「ババ抜き15解説」 田部井保

目次 通常版

 例外として前回は考慮しなかった、1番目と2番目が選ばれた時の処理を追加します。

 また、配り直しボタンを押した時に、選択用の青ガイドが出ていたら消す処理も加えます。

    ///再配布ボタン
    @IBAction func btnGoTouch(_ sender: Any) {
        //配る
        share()
        //表示する
        show()
        
        //カード選択ボタンを画面から消す
        for cardBtn in eachCardButton {
            cardBtn.removeFromSuperview()
        }
        //カード選択ボタン配列を消去する
        eachCardButton.removeAll()
        
        //ユーザー並び替えボタンを画面から消す
        for changeBtn in eachChangeButton {
            changeBtn.removeFromSuperview()
        }
        //ユーザー並び替えボタン配列クリア
         eachChangeButton.removeAll()
    }
    
    ///ペアを除くボタン押下時処理
    @IBAction func btnPairTouch(_ sender: Any) {
        //選択されているかフラグとりあえず選択されていない
        var selected = false
        //4人分調べる
        for i in 0 ..< 4 {
            //黒丸があったら
            if eachButton[i].currentTitle == "⚫️" {
                //選択されている
                selected = true
                //自分(ユーザー)はi
                mine = i
                //ループを抜ける
                break
            }
        }
        //選択されていない時
        if !selected {
            //アラートを出す
            let alert = UIAlertController()
            alert.title = "選択"
            alert.message = "4組のうちのどれかを選択して下さい。"
            alert.addAction(UIAlertAction(title: "OK", style: .default))
            present(alert, animated: true, completion: nil)
            //処理を抜ける
            return
        }
        //自分選択が出来ない様に
        btnEnable = false
        //4人分ループ
        for i in 0 ..< 4 {
            //最大13枚ループ
            for j in 0 ..< 13 {
                //ジョーカーかカードのタグが−1なら次のjのループへ
                if (eachCard[i][j].tag == 52) || (eachCard[i][j].tag == -1) {
                    //以下の処理は行わず次のjのループへ
                    continue
                }
                //jの次のカードから14枚目までループ
                for k in j + 1 ..< 14 {
                    //ジョーカーかカードのタグが−1なら次のkのループへ
                    if (eachCard[i][k].tag == 52) || (eachCard[i][k].tag == -1) {
                        //以下の処理は行わず次のkのループへ
                        continue
                    }
                    //jの位置のカード番号とkの位置のカード番号が同じなら
                    if (eachCard[i][j].tag % 13) == (eachCard[i][k].tag % 13) {
                        //jの位置のカードのタグを−1に
                        eachCard[i][j].tag = -1
                        //kの位置のカードのタグを−1に
                        eachCard[i][k].tag = -1
                        //kのループは終了
                        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
                    }
                    //左側カード位置を+1する
                    k += 1
                }
            }
        }
        //表示する
        show()
        //現在の順番は0(1人目)
        step = 0

        //自分が1人目だったら
        if mine == 0 {
            //ユーザー並び替え開始
            btnChangeTouch()
        //自分が2人目だったら
        } else if mine == 1 {
            //ユーザーの前の人のカードにボタンを付けてユーザーが引くカードを選択できる様にする
            get()
        }
    }

 まずは、配り直しボタンを押した時に、選択用の青ガイドが出ていたら消す処理です。

 9行目から13行目で、カード選択ボタンを画面から消して、配列をクリアしています。

 16行目から20行目で、ユーザー並び替えボタンを画面から消して、配列をクリアしています。

 例外として前回は考慮しなかった、1番目と2番目が選ばれた時の処理です。

 108行目から110行目が、1番目が選ばれた時の処理です。ユーザー並び替え開始処理を呼んでいます。

 112行目から114行目が、2番目が選ばれた時の処理です。ユーザーの前の人のカードにボタンを付けてユーザーが引くカードを選択できる様にする処理を呼んでいます。

 意外と変更点は少なかったです。

目次 通常版

コメントを残す

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

CAPTCHA