Kotlin Programming Intermediate - 6

Beautify.log·2022년 1월 25일
0

Kotlin for Android

목록 보기
6/11
post-thumbnail

숫자 맞추기


import kotlin.system.exitProcess

fun main(args: Array<String>) {

    /*
        Random number 찾기
        범위 : 1 ~ 100까지 Random한 숫자를 받는다
        입력 : 범위를 초과하는 숫자는 잘못 입력되었음을 알려준다.
        예) 입력 받은 숫자의 Random Number 도달여부(너무 크다, 너무 작다)를 알려준다.
        기회는 default로 10번만 줄 것
        재시도 여부 묻기
    */

    println("***************************************")
    println("************숫자 맞추기 게임***************")

    while(true) {
        print("도전할 횟수를 입력해주세요 >> ")
        val play:Int = readLine()?.toInt()!!
        println("게임을 시작합니다.")

        val number:Int = ((Math.random() * 100) + 1).toInt()
        // println(number)

        var i:Int = 0
        var ref:Boolean = false
        while (i < play) {
            print("숫자를 입력해주세요. >> ")
            val input:Int = readLine()?.toInt()!!
            if(number == input) {
                println("정답입니다!")
                ref = true
                exitProcess(1)
            } else if (number > input) {
                println("입력된 숫자가 너무 작습니다")
            } else if (number < input) {
                println("입력된 숫자가 너무 큽니다")
            } else {
                println("잘못된 입력입니다.")
            }
            i++
        }

        if (!ref) {
            print("다시 시도하시겠습니까? [Y]es 또는 [N]o >> ")
            val regame: String? = readLine()!!
            if (regame == "N" || regame == "n") {
                println("게임을 종료합니다.")
                break
            } else {
                println("게임을 다시 시작합니다...")
            }
        }

    }




}

가위 바위 보


처음 작성한 코드

import java.util.*
import kotlin.system.exitProcess

// 가위, 바위, 보 배열에서 랜덤으로 가져오기
fun getRandom(arr:Array<String>) : String {
    val random = Random().nextInt(arr.size)
    return arr[random]
}

fun main(args: Array<String>) {

    // 승, 패, 무승부 초기화
    var win:Int = 0             // 승
    var lose:Int = 0            // 패
    var tie:Int = 0             // 무승부
    var res:String = ""         // 결과 값을 담을 변수

    // 게임 진행
    while (true) {

        // 배열에서 무작위로 추출한 값을 변수에 저장
        val rockScissorPaper: Array<String> = arrayOf("가위", "바위", "보")
        var computer:String = getRandom(rockScissorPaper)

        println("************** 가위, 바위, 보 **************")
        println("***게임을 종료하려면 종료를 입력하고 엔터를 누르세요***")
        print("가위, 바위, 보 중에서 입력 >> ")
        val userInput = readLine()

        // 종료시
        if (userInput == "종료") exitProcess(0)

        // 가위
        when (computer == "가위") {
            userInput == "바위" -> res = "승리"
            userInput == "보" -> res = "패배"
            userInput == "가위" -> res = "무승부"
        }

        // 바위
        when (computer == "바위") {
            userInput == "보" -> res = "승리"
            userInput == "가위" -> res = "패배"
            userInput == "바위" -> res = "무승부"
        }

        // 보
        when (computer == "보") {
            userInput == "가위" -> res = "승리"
            userInput == "바위" -> res = "패배"
            userInput == "보" -> res = "무승부"
        }

        // 결과에 따라 1씩 증가
        if (res == "승리") win += 1
        if (res == "패배") lose += 1
        if (res == "무승부") tie += 1

        println("상대방이 낸 것은 $computer 입니다.")
        println("결과는 ${win}${lose}${tie}무 입니다.")
    }


}

두번째로 작성한 코드

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 }

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

    while(true) {

        println("start game....")

        // random 값 얻어오기(0 ~ 2)
        comNum = (Math.random() * 3).toInt()

        // user input
        print("가위(0), 바위(1), 보(2) 입력 >>> ")
        userNum = readLine()!!.toInt()

        // win일 조건(user-com : 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
    }
    */

        result = (comNum - userNum + 2) % 3

        var resultMsg = ""
        when (result) {
            1 -> {
                resultMsg = "You Win"
                win++
            }

            0 -> {
                resultMsg = "You Lose"
                lose++
            }

            2 -> {
                resultMsg = "DRAW"
                draw++
            }
        }

        var userChar = if (userNum == 0) "가위" else if (userNum == 1) "바위" else "보"
        var comChar = if (comNum == 0) "가위" else if (comNum == 1) "바위" else "보"

        println("${resultMsg} 당신은 ${userChar}이고 상대방은 ${comChar}입니다.")
        println("${win}${draw}${lose}패 입니다.")

        print("한 판 더 하시겠습니까? (Y/N) >> ")
        val msg:String = readLine()!!
        if (msg == "N" || msg == "n") {
            println("게임이 종료되었습니다")
            break
        }

        println("게임을 다시 시작합니다...")
    }

}
profile
tried ? drinkCoffee : keepGoing;

0개의 댓글