[Kotlin] 2일차 - 가위바위보 게임 만들기

가위바위보를 만들기 위해선 세 가지의 조건이 있어야한다.

 

1. 사용자의 선택을 저장

2. 컴퓨터의 선택을 저장

3. 승자가 누군지 확인하기

 

1. 사용자의 선택을 저장

다음의 조건을 충족시키기 위하여 다음의 코드를 작성하였다.

fun main() {
    var computerChoice = ""
    var userChoice = ""
    println("Rock, Paper or Scissors? Enter your choice!!")
    userChoice = readln()
}

 

2. 컴퓨터의 선택을 저장

다음과 같이 random함수를 이용하여 1일경우 Rock, 2일경우 Paper, 3일경우 Sissors로 정의되게 하였다

val randomNumber = (1..3).random()
if(randomNumber == 1) {
    computerChoice = "Rock"
}else if (randomNumber == 2) {
    computerChoice = "Paper"
}else if (randomNumber == 3) {
    computerChoice = "Scissors"
}
println(computerChoice)

 

when으로 대체해보기

다음과 같이 IDE내에서 when으로 사용되기를 추천한다

 

다음과 같이 when으로 표현이 가능하다

when(randomNumber){
    1 -> {
        computerChoice = "Rock"
    }
    2 -> {
        computerChoice = "Paper"
    }
    3 -> {
        computerChoice = "Scissors"
    }
}
println(computerChoice)

 

3. 승자가 누군지 확인하기

그리고 다음과 같이 when과 if을 이용하여 승자를 판별할 수가 있다

val winner = when {
    userChoice == computerChoice -> "Tie"
    userChoice == "Rock" && computerChoice == "Scissors" -> "User"
    userChoice == "Paper" && computerChoice == "Rock" -> "User"
    userChoice == "Scissors" && computerChoice == "Paper" -> "User"
    else -> "Computer"
}
if (winner == "Tie") {
    println("It's a tie")
}
else if (winner == "User"){
    println("User Won!")
}
else {
    println("Computer Won!")
}

 

결과 콘솔창의 모습

 

다음과 같은 식으로 표현할 수 있다

fun main() {
    var computerChoice = ""
    var userChoice = ""
    println("Rock, Paper or Scissors? Enter your choice!!")
    userChoice = readln()

    val randomNumber = (1..3).random()
    when(randomNumber){
        1 -> {
            computerChoice = "Rock"
        }
        2 -> {
            computerChoice = "Paper"
        }
        3 -> {
            computerChoice = "Scissors"
        }
    }
    println("Computer : " + computerChoice)

    val winner = when {
        userChoice == computerChoice -> "Tie"
        userChoice == "Rock" && computerChoice == "Scissors" -> "User"
        userChoice == "Paper" && computerChoice == "Rock" -> "User"
        userChoice == "Scissors" && computerChoice == "Paper" -> "User"
        else -> "Computer"
    }
    if (winner == "Tie") {
        println("It's a tie")
    }
    else {
        println(winner+"Won!")
    }
}

 

이렇게 기본적인 기능을 제작했다

하지만 입력에 대한 검증과, 이를 반복적으로 실행할 수 있는 기능 또한 추가하고자 한다

 

while loops

while내에 조건이 true면 그 안의 코드를 지속적으로 실행시키는 것을 말한다

다음과 같이 간단하게 구현할 수 있다

var count = 0
while(count <3) {
    println("count : $count")
    count++
}

 

break

다음과 같이 break를 이용하여 loop 중간에 나갈수도 있다

var userInput = readln()
while (userInput == "1"){
    println("While loop executed")
    break
}

 

Throw exceptions

다음을 이용하여 error를 만들 수 있다

 

이렇게 위에서 나온 모든걸 합쳐서 만든 최종 게임은 다음과 같다.

 

fun main() {
    var userInput = "1"
    while (userInput == "1") {
        println("Rock, Paper or Scissors? Enter your choice!!")
        var computerChoice = ""
        var userChoice = ""
        userChoice = readln()
        userChoice.lowercase() // 유효성검사를 위한 소문자 변환
        if (userChoice !="rock" && userChoice!="paper"&& userChoice!="scissors"){
            throw IllegalArgumentException()
        }
        val randomNumber = (1..3).random()
        when (randomNumber) {
            1 -> {
                computerChoice = "rock"
            }

            2 -> {
                computerChoice = "paper"
            }

            3 -> {
                computerChoice = "scissors"
            }
        }
        println("Computer : $computerChoice")

        val winner = when {
            userChoice == computerChoice -> "Tie"
            userChoice == "rock" && computerChoice == "scissors" -> "User"
            userChoice == "paper" && computerChoice == "rock" -> "User"
            userChoice == "scissors" && computerChoice == "paper" -> "User"
            else -> "Computer"
        }
        if (winner == "Tie") {
            println("It's a tie")
        } else {
            println("$winner Won!")
        }
        println("If you enter number 1, the game will continue, " +
                "and press another number, the game will stop")
        userInput = readln()
    }
}