코딩 기록/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