Created
October 10, 2019 14:59
-
-
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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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