Dan Tech Academy

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

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

Dan TechDan TechSoftware Engineer, Weight Lifter3 phút đọcCập nhật 28/08/2025
Lưu ýBài viết này được cập nhật lần cuối 1 năm trước.Một số thông tin có thể đã lỗi thời. Vui lòng kiểm tra với các phương pháp hiện tại.

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  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

Đọc blog thì vui. Đi theo lộ trình thì đến đích.

Kotlin Android Roadmap sắp xếp các bài Android Mastery, OOP và Design Patterns thành 5 cấp độ - từ dòng Kotlin đầu tiên đến app lên store.

Kèm bài viết mới mỗi tuần. Huỷ bất cứ lúc nào.