Swift - блокировка / нажатие кнопки - PullRequest
0 голосов
/ 06 июня 2018

Я делаю игру с кубиками.Идея состоит в том, чтобы держать / заблокировать кубик.Я сделал кубики как кнопки, чтобы теперь их можно было нажимать.Пример: я выбрасываю «6» и «1».Я нажимаю «6», так что теперь будет выброшена только «1».

Я немного растерялся с этим, мне нужно сделать булевы для их хранения?Вот мой код.Я на самом деле не знаю с чего начать.

class ViewController: UIViewController {

@IBOutlet weak var dice1: UIButton!
@IBOutlet weak var dice2: UIButton!

var audioPlayer:AVAudioPlayer!


var randomDiceIndex1 : Int = 0
var randomDiceIndex2 : Int = 0

let diceArray = ["dice1", "dice2", "dice3", "dice4", "dice5", "dice6"]

func playSoundWith(fileName: String, fileExtenstion: String) -> Void {
    let audioSourceURL: URL!
    audioSourceURL = Bundle.main.url(forResource: fileName, 
    withExtension: fileExtenstion)
    if audioSourceURL == nil {
        print("Geluid werkt niet")
    } else {
        do {

            audioPlayer = try AVAudioPlayer.init(contentsOf: 
            audioSourceURL!)
            audioPlayer.prepareToPlay()
            audioPlayer.play()
        } catch {
            print(error)
        }
    }
}

override func viewDidLoad() {
super.viewDidLoad()
updateDiceImages()
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}


@IBAction func buttonPressed(_ sender: Any) {
updateDiceImages()
playSoundWith(fileName: "dobbelstenen", fileExtenstion: "m4a")
}

func updateDiceImages(){
randomDiceIndex1 = Int(arc4random_uniform(6))
randomDiceIndex2 = Int(arc4random_uniform(6))

dice1.setImage(UIImage(named: diceArray[randomDiceIndex1]), for: 
.normal)
dice2.setImage(UIImage(named: diceArray[randomDiceIndex2]), for: 
.normal)  
}

override func motionEnded(_ motion: UIEventSubtype, with event: 
UIEvent?) {
updateDiceImages()
playSoundWith(fileName: "dobbelstenen", fileExtenstion: "m4a")
}
}

1 Ответ

0 голосов
/ 06 июня 2018

Да, вы можете использовать логические значения для сохранения заблокированных кубиков.

var dice1Locked = false 
var dice2Locked = false

В @OBAction с кнопок (т. Е. При нажатии кнопок) переключайте логические значения:

dice1Locked = !dice1Locked

Затем в updateDiceImages проверьте, не заблокирована ли игральная кость перед изменением ее изображения:

if !dice1Locked {
    randomDiceIndex1 = Int(arc4random_uniform(6))
    dice1.setImage(UIImage(named: diceArray[randomDiceIndex1]), for: 
.normal)
}

if !dice2Locked {
    randomDiceIndex2 = Int(arc4random_uniform(6))
    dice2.setImage(UIImage(named: diceArray[randomDiceIndex2]), for: 
.normal)
}

Я также рекомендую вам создать модель для вашей кости вместо использования кнопок:

struct Dice {
    var number: Int
    var locked: Bool
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...