Menu
CoddyTech

Ôn tập: bộ sưu tập tùy chỉnh

Thuộc phần Lập trình hướng đối tượng trong hành trình Dart của Coddy. Bài học 75 trên 110.

challenge icon

Thử thách

Dễ

Hãy xây dựng một hệ thống ScoreBoard để theo dõi điểm số của người chơi và minh họa cách các phương thức đặc biệt phối hợp với nhau để tạo nên một lớp hoàn chỉnh, chuyên nghiệp!

Bạn sẽ sắp xếp code thành hai tệp:

  • score_board.dart: Tạo lớp Player và lớp ScoreBoard phối hợp với nhau để quản lý điểm số trong trò chơi.

    Lớp Player cần có name (String) và score (int). Lớp này cần:

    • Triển khai Comparable<Player> để có thể sắp xếp người chơi theo điểm số giảm dần, từ cao nhất trở xuống
    • Ghi đè == và hashCode để xem hai người chơi có cùng tên là bằng nhau, bất kể điểm số
    • Ghi đè toString() để trả về: [name]: [score] points

    Lớp ScoreBoard cần lưu danh sách người chơi và cung cấp:

    • Phương thức addPlayer(Player player) chỉ thêm người chơi nếu họ chưa tồn tại, hãy dùng cách triển khai phép so sánh bằng của bạn!
    • Phương thức call() không nhận đối số và trả về bản sao đã sắp xếp của danh sách người chơi, theo điểm số từ cao nhất trở xuống
    • Ghi đè toString() để hiển thị tất cả người chơi theo thứ tự chưa sắp xếp, mỗi người trên một dòng, với tiêu đề ScoreBoard: ở dòng đầu tiên
  • main.dart: Nhập tệp bảng điểm và minh họa cách tất cả các phương thức đặc biệt này phối hợp với nhau:
    • Tạo một ScoreBoard
    • Thêm những người chơi sau: Alice với 150, Bob với 200, Charlie với 175
    • Thử thêm lại Alice với điểm số 999, người chơi này sẽ bị từ chối vì trùng lặp
    • In bảng điểm bằng toString() của nó
    • In một dòng trống
    • In Rankings:
    • Gọi bảng điểm như một hàm để lấy bảng xếp hạng đã sắp xếp, rồi in từng người chơi

Thử thách này kết hợp toString() để hiển thị, == và hashCode để phát hiện mục trùng lặp, compareTo() để sắp xếp và call() để tạo giao diện có thể gọi một cách gọn gàng!

Đầu ra dự kiến:

ScoreBoard:
Alice: 150 points
Bob: 200 points
Charlie: 175 points

Rankings:
Bob: 200 points
Charlie: 175 points
Alice: 150 points

Tự làm thử

import 'score_board.dart';

void main() {
  // TODO: Tạo một ScoreBoard

  // TODO: Thêm người chơi: Alice (150), Bob (200), Charlie (175)

  // TODO: Thử thêm lại Alice với điểm số 999 (phải bị từ chối vì trùng lặp)

  // TODO: In bảng điểm bằng phương thức toString()

  // TODO: In một dòng trống

  // TODO: In "Rankings:"

  // TODO: Gọi bảng điểm như một hàm (function) để lấy bảng xếp hạng đã sắp xếp, rồi in từng người chơi
}

Tất cả bài học trong Lập trình hướng đối tượng

Tự luyện tập: Trình biên dịch Dart online