Trò chơi bao búa kéo - Android Mastery by Dan Tech
Trò chơi bao búa kéo - Android Mastery by Dan Tech

Android Kotlin 101: Trò chơi Bao Búa Kéo

Sau khi bạn đã hiểu qua ngôn ngữ lập trình Kotlin, đã đến lúc thực hiện một dự án nhỏ để khẳng định coding skill rồi! Let’s go thôi!!!

Phân tích trò chơi Bao Búa Kéo

  • Tham khảo luật chơi của Bao Búa Kéo tại đây –> Wiki
  • Bao Búa Kéo là 3 đòn đánh khác nhau cho 1 ván: Chúng ta có thể sử dụng 1 Enum để đại diện
  • Trạng thái cho 1 ván đấu là Thắng, Hòa, Thua: Chúng ta có thể sử dụng 1 Enum để đại diện
  • Điểm của mỗi ván đấu là 1 con số: Chúng ta có thể sử dụng 1 biên Integer để đại diện
  • Game cần nhiều vòng chơi khác nhau mà không bị gián đoạn (tắt đi mở lại chương trình): Chúng ta có thể sử dụng 1 vòng lặp while(true) để mô phỏng. Khi người chơi muốn dừng trò chơi, cần 1 điều kiện để thoát khỏi vòng while
  • Logic để so sánh các đón đánh với nhau
ROCK > SISSORS > PAPER > ROCK

Implement trò chơi Bao Búa Kéo bằng ngôn ngữ Kotlin

// Version: 1.0

enum class Role(val number: Int) {
    ROCK(1),
    PAPER(2),
    SCISSORS(3)
}

enum class TurnResult(val number: Int) {
    DRAW(0),
    USER_WIN(1),
    COMPUTER_WIN(2)
}

fun playRoleFromNumber(number: Int): String {
    return when (number) {
        Role.ROCK.number -> "Rock"
        Role.PAPER.number -> "Paper"
        Role.SCISSORS.number -> "Scissors"
        else -> "Invalid input"
    }
}

fun main() {
    // implement paper, rock, scissors game here
    // 1 = rock, 2 = paper, 3 = scissors
    // print the result of the game
    // print "You win!" if you win, "You lose!" if you lose, "Draw!" if it's a draw
    var userScore: Int = 0
    var computerScore: Int = 0

    while (true) {
        println("------ ------")

        println("Enter your choice: 1 - Rock, 2 - Paper, 3 - Scissors, 0 - Exit")
        val userInput: Int = readLine()?.toIntOrNull() ?: 0
        if (userInput <= 0) {
            println("------ Game over ------")
            println("User score: $userScore")
            println("Computer score: $computerScore")
            if (userScore > computerScore) {
                println("User win the game")
            } else if (userScore < computerScore) {
                println("Computer win the game")
            } else {
                println("The game is draw")
            }
            println("------ ------")

            break
        }
        val computerInput: Int = (1..3).random()
        var turnResult: TurnResult = TurnResult.DRAW
        when (userInput) {
            Role.ROCK.number -> {
                when (computerInput) {
                    Role.ROCK.number -> turnResult = TurnResult.DRAW
                    Role.PAPER.number -> turnResult = TurnResult.COMPUTER_WIN
                    Role.SCISSORS.number -> turnResult = TurnResult.USER_WIN
                }
            }

            Role.PAPER.number -> {
                when (computerInput) {
                    Role.ROCK.number -> turnResult = TurnResult.USER_WIN
                    Role.PAPER.number -> turnResult = TurnResult.DRAW
                    Role.SCISSORS.number -> turnResult = TurnResult.COMPUTER_WIN
                }
            }

            Role.SCISSORS.number -> {
                when (computerInput) {
                    Role.ROCK.number -> turnResult = TurnResult.COMPUTER_WIN
                    Role.PAPER.number -> turnResult = TurnResult.USER_WIN
                    Role.SCISSORS.number -> turnResult = TurnResult.DRAW
                }
            }

            else -> {
                println("Invalid input")
                continue
            }
        }
        println("User: ${playRoleFromNumber(userInput)}")
        println("Computer: ${playRoleFromNumber(computerInput)}")
        if (turnResult == TurnResult.USER_WIN) {
            println("User win this turn!")
            userScore++
        } else if (turnResult == TurnResult.COMPUTER_WIN) {
            println("Computer win this turn!")
            computerScore++
        } else {
            println("This turn is draw!")
        }
        println("User score: $userScore")
        println("Computer score: $computerScore")
    }
}

Thực hiện implement logic cho game Bao Búa Kéo – dự án Kotlin 101 – Android Mastery