新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番目が選ばれた時の処理です。ユーザーの前の人のカードにボタンを付けてユーザーが引くカードを選択できる様にする処理を呼んでいます。
意外と変更点は少なかったです。