Проблема с массивом с отображаемой меткой - PullRequest
1 голос
/ 30 января 2020

В этой игре ti c ta c toe все работает, за исключением отображения метки "ничья", когда нет победителя. Метка будет меняться, когда выигрывают крест или кружки, но не когда ie. Я в тупике. E

import UIKit

class ViewController: UIViewController {
    @IBOutlet weak var label: UILabel!
    var count = 1
    var activePlayer = 1 //Cross
    var gameState = [0,0,0,0,0,0,0,0,0]
    var gameIsActive = true
    let winningCombinations = [[0,1,2], [3,4,5], [6,7,8], [0,3,6], [1,4,7], [2,5,8], [0,4,8], [2,4,6]]

    @IBAction func action(_ sender: AnyObject) {
        if (gameState[sender.tag-1] == 0 && gameIsActive == true) {
            gameState[sender.tag-1] = activePlayer
            if (activePlayer == 1) {
                sender.setImage(UIImage(named: "cross.png"), for: UIControl.State())
                activePlayer = 2
            } else {
                sender.setImage(UIImage(named: "nought.png"), for: UIControl.State())
                activePlayer = 1
            }
        }
        for combination in winningCombinations {
            if gameState[combination[0]] != 0 && 
            gameState[combination[0]] == gameState[combination[1]] && 
            gameState[combination[1]] == gameState[combination[2]] {
                gameIsActive = false
                if gameState[combination[0]] == 1 {
                    label.text = "Cross has won!"
                } else {
                    label.text = "Circle has won!"
                }
                if gameIsActive == true {
                    for i in gameState {
                        count = i*count
                    }
                    if count != 0 {
                        label.text = "It was a draw."
                        label.isHidden = false
                        playAgainButton.isHidden = false
                    }
                }
                playAgainButton.isHidden = false
                label.isHidden = false
            }
        } 
    } // End Button Action

    @IBOutlet weak var playAgainButton: UIButton!

    @IBAction func playAgain(_ sender: Any) {
        gameState = [0,0,0,0,0,0,0,0,0]
        gameIsActive = true
        activePlayer = 1
        playAgainButton.isHidden = true
        label.isHidden = true

        for i in 1...9 {
            let button = view.viewWithTag(i) as! UIButton
            button.setImage(nil, for: UIControl.State())
        }
    }
    override func viewDidLoad() {
        super.viewDidLoad()
        playAgainButton.isHidden = true
        label.isHidden = true
    }
} // End ViewController

Ответы [ 2 ]

1 голос
/ 30 января 2020

Вы говорите

            gameIsActive = false
            // ... some other stuff ...
            if gameIsActive == true {
                // check for a draw
            }

Но gameIsActive равно , а не верно, потому что вы просто установили для него значение false. Поэтому мы никогда не проводим проверку на ничью.

0 голосов
/ 01 февраля 2020

Спасибо за помощь всем! Наконец-то у меня все заработало.

import UIKit

class ViewController: UIViewController {

@IBOutlet weak var playAgainButton: UIButton!
@IBOutlet weak var label: UILabel!
var count = 1
var activePlayer = 1 //Cross
var gameState = [0,0,0,0,0,0,0,0,0]
var gameIsActive = true
let winningCombinations = [[0,1,2], [3,4,5], [6,7,8], [0,3,6], [1,4,7], [2,5,8], [0,4,8], [2,4,6]]


@IBAction func action(_ sender: AnyObject) {

count = 1;
if (gameState[sender.tag-1] == 0 && gameIsActive == true) {

if (activePlayer == 1) {
    gameState[sender.tag-1] = activePlayer
    sender.setImage(UIImage(named: "cross.png"), for: UIControl.State())
    activePlayer = 2

} else {

    sender.setImage(UIImage(named: "nought.png"), for: UIControl.State())
    gameState[sender.tag-1] = activePlayer
    activePlayer = 1

        }
}

for combination in winningCombinations {
if gameState[combination[0]] != 0 && gameState[combination[0]] ==
    gameState[combination[1]] && gameState[combination[1]] ==
    gameState[combination[2]]{
    gameIsActive = false

if gameState[combination[0]] == 1 {
    label.text = "Cross has won!"
} else {
    label.text = "Circle has won!"
}
    playAgainButton.isHidden = false
    label.isHidden = false
}

}

if gameIsActive == true{
    for i in gameState{
        count = i * count
    }
    if count != 0{
        label.text = "DRAW!"
    playAgainButton.isHidden = false
    label.isHidden = false
    }
}

}

@IBAction func playAgain(_ sender: Any) {

gameState = [0,0,0,0,0,0,0,0,0]
    gameIsActive = true
    activePlayer = 1
    playAgainButton.isHidden = true
    label.isHidden = true

for i in 1...9
{
    let button = view.viewWithTag(i) as! UIButton
    button.setImage(nil, for: UIControl.State())
}

}

override func viewDidLoad() {
super.viewDidLoad()
    playAgainButton.isHidden = true
    label.isHidden = true
}

}

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