下記の様なコードで四択クイズの様なものを作っているのですが、回答を選択するところがうまくいきません。
setQuestion()で問題をランダムに生成。
setAnswer()で回答選択肢のimageViewに画像をセットし、その後正解の配置を決定し正解のimageViewだけ上書きで画像を設定。それぞれの選択肢にtapAnswer()のタップイベントを設定。
正解の画像タップでスコアをプラスし次の問題へ。間違った場合ライフをマイナス。
といったことを実装したいのですが、実際の挙動は4番目のimageViewをタップした場合だけ4択の画像だけが代わり問題の画像の変更やスコアの変動などの処理が行われません。また確認のためのprint()も表示されていません。
なぜ4番目だけ動きがあるのかといったことやsetAnswer()の処理だけ行われるのかが全くわからず困っています。
よろしくお願いします。
import UIKit class GameViewController: UIViewController { var score = 0 var life = 3 var correct = 0 @IBOutlet weak var qiv1: UIImageView! @IBOutlet weak var qiv2: UIImageView! @IBOutlet weak var aiv1: UIImageView! @IBOutlet weak var aiv2: UIImageView! @IBOutlet weak var aiv3: UIImageView! @IBOutlet weak var aiv4: UIImageView! @IBOutlet weak var heart1: UIImageView! @IBOutlet weak var heart2: UIImageView! @IBOutlet weak var heart3: UIImageView! @IBOutlet weak var scoreLabel: UILabel! var hearts :[UIImageView] = [UIImageView]() override func viewDidLoad() { super.viewDidLoad() hearts = [heart1,heart2,heart3] setQuestion() } //問題を設定 func setQuestion(){ //省略 setAnswer() } //回答を設定 @objc func setAnswer(){ let ivs = [aiv1,aiv2,aiv3,aiv4] for iv in ivs{ //問題の画像をセット } //正解の場所を設定 correct = Int.random(in: 0...3) ivs[correct]?.image = UIImage(named: "正解の画像") let tap = UITapGestureRecognizer(target: self, action: #selector(self.tapAnswer)) for iv in ivs{ iv?.addGestureRecognizer(tap) } } //答えタップ時 func tapAnswer(sender: UITapGestureRecognizer){ let tappedView = sender.view as? UIImageView print("tap") if(tappedView!.tag == correct){ score += 1 scoreLabel.text = String(score) setQuestion() }else{ life -= 1 hearts[life].image = UIImage(named: "damageHeart") if(life == 0){ gameOver() } } } //ゲームオーバー func gameOver(){ //省略 } }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/27 06:46