作業 34 #骰子吹牛

暫時就先這樣等之後有時間再加新功能。

基礎篇:

進階功能:

1 晃動 iPhone 改變六顆骰子的點數。

2 擲骰子時發出骰子聲。

本次練習:播放搖骰聲,應用之前所學UISwitch&UIButton:開關控制瞇牌&開骰動畫,設置play按鈕

@IBAction func openSwitch(_ sender: UISwitch) {
// 根據開關狀態調整diceCup的垂直位置
if sender.isOn {
diceCup.transform = CGAffineTransform(translationX: 0, y: -180)
}else {
diceCup.transform = CGAffineTransform(translationX: 0, y: 0)
}
}

這邊的Y軸:-180 是因爲垂直打開骰盅將 diceCup 在垂直方向上向上平移(y: -180)。當開關打開時,diceCup 會往上移動。

參考文章

偵測 iPhone 晃動 (shake)

  • 測試搖手機的功能可以在要手機的功能可以在 Device -> shake 觸動
override func motionEnded(_ motion: UIEvent.EventSubtype, with event: UIEvent?) {
if motion == .motionShake {
print("shake")
}
}

播音樂

利用 AVAudioPlayer 或 AVPlayer 播放 App 裡的 mp3 檔

利用 AVPlayer 播放音樂音效

import UIKit
import AVFoundation

class ViewController: UIViewController {




@IBOutlet weak var diceCup: UIImageView!
@IBOutlet weak var dicePlate: UIImageView!
@IBOutlet var diceImageViews: [UIImageView]!

// AVPlayer用於播放音樂
var player = AVPlayer()

override func viewDidLoad() {
super.viewDidLoad()
// 初始化時,將dicePlate進行輕微的旋轉
dicePlate.transform = CGAffineTransform(rotationAngle: .pi / 180 * -2)
}



// 骰子擲骰按鈕觸發的事件
@IBAction func play(_ sender: Any) {
// 播放擲骰音樂
let url = Bundle.main.url(forResource: "dicemusic", withExtension: "mp3")!
let playerItem = AVPlayerItem(url: url)
player.replaceCurrentItem(with: playerItem)
player.play()
// 顯示隨機骰子圖片
let imageNames = ["dice1","dice2","dice3","dice4","dice5","dice6"]
for diceImageView in diceImageViews {
diceImageView.image = UIImage(named: imageNames.randomElement()!)
}
// diceImageViews[0].image = UIImage(named: imageNames.randomElement()!)
// diceImageViews[1].image = UIImage(named: imageNames.randomElement()!)
// diceImageViews[2].image = UIImage(named: imageNames.randomElement()!)
// diceImageViews[3].image = UIImage(named: imageNames.randomElement()!)
// diceImageViews[4].image = UIImage(named: imageNames.randomElement()!)
// diceImageViews[5].image = UIImage(named: imageNames.randomElement()!)
}


// 瞇牌開關設定
@IBAction func checkSwitch(_ sender: UISwitch) {
// 根據開關狀態調整diceCup的透明度
if sender.isOn {
diceCup.alpha = 0.7
}else {
diceCup.alpha = 1
}
}


// 骰盅開關設定
@IBAction func openSwitch(_ sender: UISwitch) {
// 根據開關狀態調整diceCup的垂直位置
if sender.isOn {
diceCup.transform = CGAffineTransform(translationX: 0, y: -180)
}else {
diceCup.transform = CGAffineTransform(translationX: 0, y: 0)
}
}
override func motionEnded(_ motion: UIEvent.EventSubtype, with event: UIEvent?) {
// 檢查是否是晃動手機的事件
if motion == .motionShake {
// 在晃動時播放音樂
let url = Bundle.main.url(forResource: "dicemusic", withExtension: "mp3")!
let playerItem = AVPlayerItem(url: url)
player.replaceCurrentItem(with: playerItem)
player.play()
}


}
//  diceImageViews[0].image = UIImage(named: imageNames.randomElement()!)
// diceImageViews[1].image = UIImage(named: imageNames.randomElement()!)
// diceImageViews[2].image = UIImage(named: imageNames.randomElement()!)
// diceImageViews[3].image = UIImage(named: imageNames.randomElement()!)
// diceImageViews[4].image = UIImage(named: imageNames.randomElement()!)
// diceImageViews[5].image = UIImage(named: imageNames.randomElement()!)
}

這是之前還不熟練迴圈的寫法~~~

--

--