2016-11-18 5 views
-2

Ich bin im Moment der Swift Guy Tutorial für ein Tic Tac Toe Spiel (https://www.youtube.com/watch?v=rD3uqeLdal8) und ich bin wirklich auf ein Problem mit dem Code stecken.Tic Tac Toe Krawatte Swift 3

Während das Spiel bestimmt, ob es ein Unentschieden gibt (Gleichstand), manchmal, wenn alle Felder auf dem Brett genommen werden und es einen Gewinn gibt, sagt das Spiel, dass es ein Gleichstand ist, wenn das Kreuz oder Nichts gewinnen sollte. Es registriert nicht den Gewinn. Wenn mir jemand dabei helfen könnte, würde ich das schätzen.

var activePlayer = 1 //Cross 
var gameState = [0, 0, 0, 0, 0, 0, 0, 0, 0] 

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]] 
var gameIsActive = true 


@IBOutlet weak var label: UILabel! 



@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: UIControlState()) 
      activePlayer = 2 
     } 
     else 
     { 
      sender.setImage(UIImage(named: "Nought.png"), for: UIControlState()) 
      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 = "NOUGHT HAS WON!" 
      } 

      playAgainButton.isHidden = false 
      label.isHidden = false 
     } 
    } 

    gameIsActive = false 

    for i in gameState 
    { 
     if i == 0 
     { 
      gameIsActive = true 
      break 
     } 
    } 

    if gameIsActive == false 
    { 

      label.text = "IT WAS A DRAW" 
      label.isHidden = false 
      playAgainButton.isHidden = false 
     } 

} 

enter image description here

+0

löschen 'gameIsActive = false' vor' für i in gameState' –

+0

@CleverError leider noch es sagen, es ist ein Unentschieden, wenn Quer gewinnt. – danya

+0

ich denke, es ist meine Nacht für dumme Fragen. Ich sehe, wo Ihr winningCombinations-Array Null-Base ist (wie man es erwarten würde). Aber ich sehe auch, dass Sie 1 von der Tag-Eigenschaft dekrementieren. Ist das das Problem? – dfd

Antwort

0

ich Ihren Code für die Sieger Erkennung etwas Überlastung, weil der Array-Kombinationen zu gewinnen. Ich habe die gleiche Aufgabe für meinen iOS-Kurs an meiner Universität und kam damit auf. Mein gamefields alle auf 0 Player1 gesetzt ist = X Player2 = O

Vielleicht wird es einige ppl helfen, wenn sie diesen Beitrag finden.

func checkRow(theRow: Int) -> String { 
    if gameField[theRow][0] != "0" { 
     let checkThisPlayer: String = gameField[theRow][0] 
     if gameField[theRow][1] == checkThisPlayer && 
      gameField[theRow][2] == checkThisPlayer { 
      return checkThisPlayer 
     } 
    } 
    return "0" 
} 

func checkColumn(theColumn: Int) -> String { 
    if gameField[0][theColumn] != "0" { 
     let checkThisPlayer: String = gameField[0][theColumn] 
     if gameField[1][theColumn] == checkThisPlayer && 
      gameField[2][theColumn] == checkThisPlayer { 
      return checkThisPlayer 
     } 
    } 
    return "0" 
} 

func checkDiagonal() -> String { 
    if gameField[0][0] != "0" { 
     let checkThisPlayer: String = gameField[0][0] 
     if gameField[1][1] == checkThisPlayer && 
      gameField[2][2] == checkThisPlayer { 
      return checkThisPlayer 
     } 
    } else if gameField[0][2] != "0" { 
     let checkThisPlayer: String = gameField[0][2] 
     if gameField[1][1] == checkThisPlayer && 
      gameField[2][0] == checkThisPlayer { 
      return checkThisPlayer 
     } 
    } 
    return "0" 
} 

func playerWon() -> String { 
    //TODO Implement Draw check 
    var winner: String = "0" 
    for index in 0...gameField.count - 1 { 
     winner = checkRow(theRow: index) 
     if (winner != "0") { 
      break 
     } 
     winner = checkColumn(theColumn: index) 
     if (winner != "0") { 
      break 
     } 
    } 
    if winner == "0" { 
     winner = checkDiagonal() 
    } 
    return winner 
}