storyboard 畫面製作
主要程式說明
開頭畫面的動畫程式
UIViewPropertyAnimator.runningPropertyAnimator(withDuration: 2, delay: 0, animations: {
self.leaderboard.center.x = self.view.center.x
self.play.center.x = self.view.center.x
self.whackAMole.center.x = self.view.center.x
})
UIViewPropertyAnimator.runningPropertyAnimator(withDuration: 1, delay: 1, animations: {
self.hammer.transform = CGAffineTransform(rotationAngle: CGFloat.pi / 180 * 90)
})
UIViewPropertyAnimator.runningPropertyAnimator(withDuration: 0.5, delay: 2, animations: {
self.hammer.transform = CGAffineTransform(rotationAngle: CGFloat.pi / 180 * -20)
})
隨機顯示地鼠
func showDigletts() {
var hasDigletts = [true, true, true, true, false, false, false, false, false, false, false, false]
hasDigletts.shuffle()
var i = 0
for hasDiglett in hasDigletts {
if hasDiglett {
let image = self.images.randomElement()!
self.diglettButtons[i].setImage(image, for: .normal)
} else {
self.diglettButtons[i].setImage(holeImage, for: .normal)
}
i += 1
}
}
每 0.01 秒更新畫面上的時間, 每 1 秒更新畫面上的地鼠
@IBAction func startButton(_ sender: UIButton) {
sender.isHidden = true
startTime = Date()
self.showDigletts()
Timer.scheduledTimer(withTimeInterval: 0.01, repeats: true) { (timer) in
let now = Date()
let interval = now.timeIntervalSince(self.startTime!)
let dif = 10 - interval
self.timeLable.text = String(format: "%.2f", dif)
if dif <= 0 {
self.timeLable.text = "0.00"
timer.invalidate()
self.performSegue(withIdentifier: "result", sender: nil)
} else if self.timeLable.text?.hasSuffix("00") == true {
self.showDigletts()
}
}
}
判斷打到的地鼠跟算分
@IBAction func tapDigletts(_ sender: UIButton) {
if sender.currentImage != holeImage {
let number = images.firstIndex(of: sender.currentImage)
if number == 0 {
score += 10
alolaDiglett += 1
} else if number == 1 {
score += 20
dugtrio += 1
} else {
score += 30
alolaDugtrio += 1
}
scoreLable.text = "\(score)"
sender.setImage(UIImage(named: "hole"), for: .normal)
}
}
分數明細和儲存分數
override func viewDidLoad() {
super.viewDidLoad()// Do any additional setup after loading the view.
let resultValue = result!
score.text = resultValue.score.description
dugtrio.text = resultValue.dugtrio.description
alolaDugtrio.text = resultValue.alolaDugtrio.description
alolaDiglett.text = resultValue.alolaDiglett.description
var scores = UserDefaults.standard.array(forKey: "scores")
if scores == nil {
scores = [Int]()
}
scores?.append(resultValue.score)
UserDefaults.standard.set(scores, forKey: "scores")
}
分數排行榜
class LeaderBoardViewController: UIViewController {@IBOutlet weak var leaderBoard: UITextView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
var scores = UserDefaults.standard.array(forKey: "scores") as? [Int]
scores?.sort(by: { (grade1, grade2) -> Bool in
return grade1 > grade2
})
var number = 1
if scores != nil {
for score in scores! {
leaderBoard.text.append("NO" + number.description + " " + score.description + "\n")
number += 1
}
}
}