前提・実現したいこと
バラバラになった一枚の画像が揃ったところでボタンを押して揃えるゲームを作っています。RUNしてみたところxcodeに戻ってきてしまいました。まだまだ無知なので簡単に教えてもらえると嬉しいです。
発生している問題・エラーメッセージ
Thread 1: Fatal error: Index out of range
該当のソースコード
swift
1import UIKit 2 3class GameViewController: UIViewController { 4 5 @IBOutlet var imgView1: UIImageView! 6 @IBOutlet var imgView2: UIImageView! 7 @IBOutlet var imgView3: UIImageView! 8 @IBOutlet var imgView4: UIImageView! 9 @IBOutlet var imgView5: UIImageView! 10 @IBOutlet var imgView6: UIImageView! 11 @IBOutlet var imgView7: UIImageView! 12 13 @IBOutlet var resultLabel: UILabel! 14 15 16 var timer: Timer! 17 var score: Int = 1000 18 let defaults: UserDefaults = UserDefaults.standard 19 20 let width: CGFloat = UIScreen.main.bounds.size.width 21 22 var positionX: [CGFloat] = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] 23 24 var dx: [CGFloat] = [1.0, 0.5, -1.0] 25 26 func start() { 27 resultLabel.isHidden = false 28 29 timer = Timer.scheduledTimer(timeInterval: 0.005, target: self, 30 selector: #selector(self.up), userInfo: nil, repeats: true) 31 32 timer.fire() 33 34 } 35 36 override func viewDidLoad() { 37 super.viewDidLoad() 38 positionX = [width / 2, width / 2, width / 2, width / 2, width / 2, width / 2, width / 2] 39 self.start() 40 } 41 42 @objc func up() { 43 for i in 0..<7{ 44 if positionX[i] > width || positionX[i] < 0 { 45 dx[i] = dx[i] * (-1) 46 } 47 positionX[i] += dx[i] 48 } 49 imgView1.center.x = positionX[0] 50 imgView2.center.x = positionX[1] 51 imgView3.center.x = positionX[2] 52 imgView4.center.x = positionX[3] 53 imgView5.center.x = positionX[4] 54 imgView6.center.x = positionX[5] 55 imgView7.center.x = positionX[6] 56 } 57 58 @IBAction func stop() { 59 if timer.isValid == true{ 60 timer.invalidate() 61 } 62 for i in 0..<7 { 63 score = score - abs(Int(width/2 - positionX[i]))*2 64 } 65 resultLabel.text = "Score : " + String(score) 66 resultLabel.isHidden = false 67 68 let highScore1: Int = defaults.integer(forKey: "score1") 69 let highScore2: Int = defaults.integer(forKey: "score2") 70 let highScore3: Int = defaults.integer(forKey: "score3") 71 let highScore4: Int = defaults.integer(forKey: "score4") 72 let highScore5: Int = defaults.integer(forKey: "score5") 73 let highScore6: Int = defaults.integer(forKey: "score6") 74 let highScore7: Int = defaults.integer(forKey: "score7") 75 76 if score > highScore1{ 77 defaults.set(score, forKey: "score1") 78 defaults.set(highScore1, forKey: "score2") 79 defaults.set(highScore2, forKey: "score3") 80 } else if score > highScore2{ 81 defaults.set(score, forKey: "score2") 82 defaults.set(highScore2, forKey: "score3") 83 } else if score > highScore3{ 84 defaults.set(score, forKey: "score3") 85 } else if score > highScore4{ 86 defaults.set(score, forKey: "score4") 87 } else if score > highScore5{ 88 defaults.set(score, forKey: "score5") 89 } else if score > highScore6{ 90 defaults.set(score, forKey: "score6") 91 } else if score > highScore7{ 92 defaults.set(score, forKey: "score7") 93 } 94 95 func retry() { 96 score = 1000 97 positionX = [width / 2, width / 2, width / 2, width / 2, width / 2, width / 2, width / 2] 98 99 if timer.isValid == true { 100 self.start() 101 } 102 } 103 104 func toTop() { 105 self.dismiss(animated: true, completion: nil) 106 } 107 108} 109 110} 111 112
試したこと
まだまだ学び始めたばかりで模写の段階です。自分でできたことは、for-in の部分の数字を変えてみることぐらいでした。
補足情報(FW/ツールのバージョンなど)
imgViewに入れた画像を左右に動かして揃ったところでボタンを押すと止まる、そして1000点満点で点数が出るゲームを作っています。RUNしてみたところスタートの画面からゲームの画面に移ることすらできませんでした。。。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/03 08:32
2020/11/03 08:46 編集
2020/11/03 08:49
2020/11/03 12:58