타닥타닥 개발자의 일상

kotlin으로 while, if, random 이용해서 랜덤 가위바위보 게임 만들기 본문

코딩 기록/Kotlin

kotlin으로 while, if, random 이용해서 랜덤 가위바위보 게임 만들기

NomadHaven 2022. 1. 25. 17:51

 

fun main(args: Array<String>) {

    var userNum: Int //유저가 선택한 가위/바위/보 값
    var comNum: Int //컴퓨터의 가위/바위/보 값
    var win: Int //승리 횟수
    var lose: Int //패배 횟수
    var draw: Int //무승부 횟수
    var result: Int //결과 값

    win = 0.also { draw = it }.also { lose = it } 
    // win = lose = draw =0

    println("가위바위보 게임입니다.")

    while (true) { //while문 시작!

        println("start game >>>")

        //random
        comNum = (Math.random() * 3).toInt() //0~2 사이 값

        //user input
        print("가위(0) 바위(1) 보(2) = ")
        userNum = readLine()!!.toInt() // user는 0~2 사이 정수를 입력한다.


        result = (comNum - userNum + 2) % 3
        var resultMsg = "" //resultMsg 초기화
        when (result) {
            1 -> {
                resultMsg = "You win"
                win++
            }
            0 -> {
                resultMsg = "You lose"
                lose++
            }
            2 -> {
                resultMsg = "Draw"
                draw++
            }
        }
        var userChar = ""
        var comChar = ""

        //가위(0) 바위(1) 보(2)
        userChar = if (userNum == 0) "가위" else if (userNum == 1) "바위" else "보"
        comChar = if (userNum == 0) "가위" else if (userNum == 1) "바위" else "보"

        println("${resultMsg}로 당신은 ${userChar}이고 컴퓨터는 ${comChar} 입니다.")
        println("$win 승 $lose 패 $draw 무 입니다.")

        println("try agin?(y/n)")
        
        val msg = readLine() //다시 시작할지 말지 입력
        
        if(msg == "n" || msg =="N"){ //대답 n혹은 N이면 while문 탈출
            println("see ya")
            break
        }

        println("restart!") //다시 while문 반복

    }//while문 끝!
}

 

   //win 0-2 , 1-0 ,  2-1

   if(userNum == 0 && comNum ==2){
       result = 0
   }else  if(userNum == 1 && comNum ==0){
       result =0
   }else  if(userNum == 2 && comNum ==1) {
       result = 0
   }

보통은 내가 가위- 컴퓨터가 보, 내가 가위 - 컴퓨터가 묵 같은 여러 세부적인 상황을 고려하여 위와 같이 코딩하지만,

 {(컴퓨터 결과값 - 유저 결과 값)+2 }/3 의 나머지가 상황별로 같다는 것을 이용하여 문제를 해결했다.

 

  가위(0) 바위(1) 보(2)

                                 (3으로 나눈 나머지)
    com     user                        win
     2    -   0 +2 =4       %3          ->1
     0    -   1 +2 =1                   ->1
     1    -   2 +2 =1                   ->1

                                        lose
     0    -   2 +2 =0                     0
     1    -   0 +2 =3                     0
     2    -   1 +2 =3                     0

                                         draw
     0    -   0 +2 =2                     2
     1    -   1 +2 =2                     2
     2    -   2 +2 =2                     2

 

 

Comments