다 짰는데 코틀린이 익숙하지 않아서 시간이 오래걸렸습니다.
힌트 있는걸 못보고 고생고생했네요 ㅠㅠ
코드도 지저분하구요.. 그래도 성공해서 기쁜마음에 올려봅니당,,
package tictactoe
fun main() {
val line = makeLine()
line.Play()
}
fun readInts() = readLine()!!.split(',').map{it.toInt()}
class makeLine() { // 3 x 3 배열 생성
var line = Array(3) { Array(3) { i -> " " } }
fun getline(i: Int, j: Int): String { //배열[줄,칸]의 값 가져오기
return line[i][j]
}
fun setline(i: Int, j: Int, player: Int) { //배열[줄,칸]의 값 설정
if (line[i][j] != " ") throw Exception()
line[i][j] = (if (player == 1) {
"O"
} else {
"X"
}).toString()
}
fun playerInput(turnCount: Int): Boolean { // 입력 및 에러처리
try {
print("Player ${turnCount % 2 + 1} 입력(줄,칸): ")
val (row, col) = readInts()
setline(row, col, turnCount % 2 + 1)
return true
} catch (e: Exception) {
println("ERROR: 잘못된 입력")
return false
} finally {
println()
}
}
fun printline() { //현재 판 출력
println(" 0 1 2")
for (i in 0..2) {
print("$i ")
for (j in 0..2) {
print(getline(i, j))
print("|")
}
println()
println(" -+-+-")
}
println()
}
fun isWin() : Boolean { //승리 체크
val arrayForCheck = mutableListOf<String>("0", "1", "2")
for (i in 0..2) { // 가로 체크
for (j in 0..2) {
if(line[i][j] != " ")
arrayForCheck.set(j,line[i][j])
if (arrayForCheck.get(0) == arrayForCheck.get(1) && arrayForCheck.get(1) == arrayForCheck.get(2))
return true
}
for(k in 0..2) arrayForCheck.set(k,k.toString())
}
for (i in 0..2) { // 세로체크
for (j in 0..2) {
if(line[j][i] != " ")
arrayForCheck.set(j,line[j][i])
if (arrayForCheck.get(0) == arrayForCheck.get(1) && arrayForCheck.get(1) == arrayForCheck.get(2))
return true
}
for(k in 0..2) arrayForCheck.set(k,k.toString())
}
for(i in 0..2){ // 대각선 체크
for(j in 0..2){
if(i == j && line[i][j] != " ")
arrayForCheck.set(i,line[i][j])
}
}
if (arrayForCheck.get(0) == arrayForCheck.get(1) && arrayForCheck.get(1) == arrayForCheck.get(2))
return true
else
for(k in 0..2) arrayForCheck.set(k,k.toString())
for(i in 0..2){ //대각선 체크
for(j in 0..2) {
if((i+j) == 2 && line[i][j] != " ")
arrayForCheck.set(j,line[i][j])
}
}
if (arrayForCheck.get(0) == arrayForCheck.get(1) && arrayForCheck.get(1) == arrayForCheck.get(2))
return true
else
for(k in 0..2) arrayForCheck.set(k,k.toString())
return false
}
fun Play(){ //게임 진행
var win: Boolean = false
var turnCount: Int = 0
while (!win) {
if (turnCount > 8) {
printline()
println("무승부!!")
return
}
print(turnCount + 1)
println("번째 턴")
printline()
if(!playerInput(turnCount)) continue
else turnCount++
win = isWin()
}
printline()
println("Player ${(turnCount+1)%2+1} 승리!")
}
}
comment