import UIKit
class ViewController: UIViewController {
@IBOutlet weak var playerLabel: UILabel!
@IBOutlet weak var winnerLabel: UILabel!
// Add 9 buttons to your storyboard and connect them to these outlets
@IBOutlet weak var button1: UIButton!
@IBOutlet weak var button2: UIButton!
@IBOutlet weak var button3: UIButton!
@IBOutlet weak var button4: UIButton!
@IBOutlet weak var button5: UIButton!
@IBOutlet weak var button6: UIButton!
@IBOutlet weak var button7: UIButton!
@IBOutlet weak var button8: UIButton!
@IBOutlet weak var button9: UIButton!
var gameLogic = GameLogic()
override func viewDidLoad() {
super.viewDidLoad()
updateUI()
}
@IBAction func buttonTapped(_ sender: UIButton) {
let row = sender.tag / 3
let column = sender.tag % 3
gameLogic.playMove(row: row, column: column)
computerPlay()
updateUI()
}
func updateUI() {
playerLabel.text = "Player: \(gameLogic.currentPlayer == .x ? "X" : "O")"
if let winner = gameLogic.winner {
winnerLabel.text = "Winner: \(winner == .x ? "X" : "O")"
disableButtons()
} else {
winnerLabel.text = ""
}
button1.setTitle(playerString(for: gameLogic.board[0][0]), for: .normal)
button2.setTitle(playerString(for: gameLogic.board[0][1]), for: .normal)
button3.setTitle(playerString(for: gameLogic.board[0][2]), for: .normal)
button4.setTitle(playerString(for: gameLogic.board[1][0]), for: .normal)
button5.setTitle(playerString(for: gameLogic.board[1][1]), for: .normal)
button6.setTitle(playerString(for: gameLogic.board[1][2]), for: .normal)
button7.setTitle(playerString(for: gameLogic.board[2][0]), for: .normal)
button8.setTitle(playerString(for: gameLogic.board[2][1]), for: .normal)
button9.setTitle(playerString(for: gameLogic.board[2][2]), for: .normal)
}
func playerString(for player: Player?) -> String {
if player == nil {
return ""
} else if player == .x {
return "X"
} else {
return "O"
}
}
func disableButtons() {
button1.isEnabled = false
button2.isEnabled = false
button3.isEnabled = false
button4.isEnabled = false
button5.isEnabled = false
button6.isEnabled = false
button7.isEnabled = false
button8.isEnabled = false
button9.isEnabled = false
}
func computerPlay() {
guard gameLogic.winner == nil else { return }
var bestMove: (row: Int, column: Int)?
for row in 0..<3 {
for column in 0..<3 {
if gameLogic.board[row][column] == nil {
gameLogic.board[row][column] = .o
if gameLogic.winner == .o {
bestMove = (row, column)
}
gameLogic.board[row][column] = nil
}
}
}
if bestMove == nil {
repeat {
let row = Int.random(in: 0..<3)
let column = Int.random(in: 0..<3)
if gameLogic.board[row][column] == nil {
bestMove = (row, column)
}
} while bestMove == nil
}
gameLogic.playMove(row: bestMove!.row, column: bestMove!.column)
}
}