Skip to content

Instantly share code, notes, and snippets.

@wadva474
Created October 10, 2019 14:59
Show Gist options
  • Save wadva474/05e1dad0e69e3260e383077a6b63bb28 to your computer and use it in GitHub Desktop.
Save wadva474/05e1dad0e69e3260e383077a6b63bb28 to your computer and use it in GitHub Desktop.
A kotlin Programm that allows user to play the popular O and X game
package practice
import java.util.*
import kotlin.system.exitProcess
class TicTacToe {
private val board: Array<CharArray> = Array(3) { CharArray(3) }
var currentPlayerMark: Char = ' '
init {
currentPlayerMark = 'X'
initializeBoard()
}
private fun initializeBoard() {
for (i in 0..2) {
for (j in 0..2) {
board[i][j] = ' '
}
}
}
fun printBoard() {
println("----------")
for (i in 0..2) {
print("|")
for (j in 0..2) {
print(board[i][j] + "|")
}
println()
println("---------")
}
}
fun isBoardFull(): Boolean {
var isFull = true
for (i in 0..2) {
for (j in 0..2) {
if (board[i][j] == ' ') {
isFull = false
}
}
}
return isFull
}
fun checkForWinner(): Boolean {
fun checkRowColumn(c: Char, c1: Char, c2: Char): Boolean {
return ((c != ' ') && (c == c1) && (c1 == c2))
}
fun checkRowsForWin(): Boolean {
for (i in 0..2) {
if (checkRowColumn(board[i][0], board[i][1], board[i][2])) {
return true
}
}
return false
}
fun checkDiagonalsForWin(): Boolean {
return (checkRowColumn(board[0][0], board[1][1], board[2][2]) or checkRowColumn(
board[0][2],
board[1][1],
board[2][0]
))
}
fun checkColumnsForWin(): Boolean {
for (j in 0..2) {
if (checkRowColumn(board[0][j], board[1][j], board[2][j])) {
return true
}
}
return false
}
return (checkColumnsForWin() or checkDiagonalsForWin() or checkRowsForWin())
}
fun changePlayer() {
currentPlayerMark = if (currentPlayerMark == 'X') {
'O'
} else {
'X'
}
}
fun placeMark(row: Int, column: Int): Boolean {
require((row >= 0) && (row < 3)) { println("please Enter a valid row Number") }
require((column >= 0) && (column < 3)) { println("please Enter a valid column Number") }
if (board[row][column] == ' ') {
board[row][column] = currentPlayerMark
return true
}
return false
}
}
fun main() {
val ticTacToe = TicTacToe()
val scanner = Scanner(System.`in`)
var row: Int
var column: Int
println("Get ready to play game *****************")
ticTacToe.printBoard()
while (true) {
println("Player ${ticTacToe.currentPlayerMark}, Please Enter the Co-ordinate you want to Play")
row = scanner.nextInt()
column = scanner.nextInt()
ticTacToe.placeMark(row, column)
ticTacToe.printBoard()
println()
when {
ticTacToe.checkForWinner() -> {
println("Congratulations Player ${ticTacToe.currentPlayerMark} wins")
exitProcess(0)
}
ticTacToe.isBoardFull() -> {
println("The game Ended a draw")
exitProcess(0)
}
else -> ticTacToe.changePlayer()
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment