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

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

- URL: https://dantech.academy/blog/android/android-mastery-kotlin-101-tro-choi-bao-bua-keo
- Ngày đăng: 2024-06-29
- Cập nhật: 2025-08-28
- Thời gian đọc: 3 phút
- Tags: android, kotlin

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

```kotlin
ROCK > SISSORS > PAPER > ROCK
```

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

```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  computerScore) {
                println("User win the game")
            } else if (userScore  {
                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
