带有显示标签的阵列问题

问题描述 投票:1回答:2

除了在没有赢家的情况下显示“ Draw”标签外,一切都在此井字游戏中起作用。当十字或圆形获胜时,标签将切换,但出现平局时则不会切换。我很困惑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
swift xcode uilabel
2个回答
1
投票

您在说

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

但是gameIsActivenot true,因为您只是将其设置为false。因此,我们从不执行抽签检查。


0
投票

谢谢大家的帮助!我终于让它正常工作。

导入UIKit

类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
}

}

© www.soinside.com 2019 - 2024. All rights reserved.