class Board(var layout: Array[Char]) { if (!layout.mkString.matches("[xo ]{9}")) { println("Invalid layout") layout = " ".toArray } def this() { this(" ".toArray) } def show { println("\n --- ") println("|" + layout.mkString.substring(0,3) + "|") println("|" + layout.mkString.substring(3,6) + "|") println("|" + layout.mkString.substring(6,9) + "|") println(" --- ") } def status:Char = { // Horizontal if (layout(0) == layout(1) && layout(1) == layout(2)) return layout(0) else if (layout(3) == layout(4) && layout(4) == layout(5)) return layout(3) else if (layout(6) == layout(7) && layout(7) == layout(8)) return layout(7) // Vertical else if (layout(0) == layout(3) && layout(3) == layout(6)) return layout(0) else if (layout(1) == layout(4) && layout(4) == layout(7)) return layout(1) else if (layout(2) == layout(5) && layout(5) == layout(8)) return layout(2) // Diagonal else if (layout(0) == layout(4) && layout(4) == layout(8)) return layout(0) else if (layout(2) == layout(4) && layout(4) == layout(6)) return layout(2) return if (layout.contains(' ')) ' ' else 't' } def play { var st = status var player = 'x' var input = "" reset show while (st == ' ') { print("Player " + player + "> ") input = readLine if (input.matches("[0-8]") && layout(input.toInt) == ' ') { layout(input.toInt) = player show player = if (player == 'x') 'o' else 'x' } st = status } if (status == 't') println("There is a tie!") else println("The winner is " + status + "!") } def reset { layout = " ".toArray } } var playBoard = new Board playBoard.play