2016-11-18 7 views
-2

私は現在、Tic Tac Toeゲームのスウィフトガイのチュートリアル(https://www.youtube.com/watch?v=rD3uqeLdal8)に従っていますが、実際にはコードの問題に固執しています。Tic Tac Toe Tie Swift 3

ドロー(ネクタイ)があるかどうかを判断する間に、すべてのスペースがボード上で取られて勝利したとき、ゲームは実際にはクロスまたはノーを獲得したはずです。それは勝利を登録しません。もし誰かがこれで私を助けることができたら、それは感謝します。

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

'gameIsActive = false'をgameState' –

+0

で@CleverError残念ながら、まだ時にクロス勝ち、それは引き分けだ言って私のための'の前に削除します。 – danya

+0

私は愚かな質問のための私の夜だと思います。私はあなたのwinningCombinations配列がゼロベースであることを見ています(予想通り)。しかし、私はあなたがタグプロパティから1を減らしているのも見ています。それは問題ですか? – dfd

答えて

0

ため、私は組み合わせを受賞の配列で、勝利の検出ビットの過負荷のためにあなたのコードを見つけます。 私の大学のiOSコースで同じことをやって、これを思いついた。私のgamefieldsが全て0 Player1に設定されている = X Player2は、彼らがこの記事を見つけたときに多分それは、いくつかの皆さんを助ける= O

です。

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 
}