Tôi có tạo một lớp quốc gia có chứa một loạt các thị trấn không?
Chắc chắn rồi.
Các thị trấn có chứa nhiều lớp xây dựng, hầu hết có chứa các lớp người không?
Chắc chắn rồi.
Tôi có tạo một lớp tìm đường mà người chơi có thể truy cập để đi xung quanh không?
Chắc chắn rồi.
Tất cả mọi thứ bạn đã đề nghị ở trên có vẻ hợp lý. Nó có thể không phải là cách tốt nhất cho bạn về lâu dài, nhưng điều đó tốt. Nó rõ ràng có ý nghĩa với bạn biết vì đó là mô hình tổ chức lần đầu tiên đến với bạn. Điều quan trọng là bạn lấy nó và bắt đầu thực hiện từ nó. Cả hai sẽ giúp bạn bắt đầu, giúp bạn vượt qua "sự tê liệt thiết kế" ban đầu này thường gây khó khăn cho các nhà phát triển khi bắt đầu một nhiệm vụ và (nếu nó chứng tỏ là thiếu sót theo một cách nào đó) sẽ dạy cho bạn một vài điều về ưu và nhược điểm của phương pháp đặc biệt đó để thiết kế.
Bạn đã tự nhiên lấy các khái niệm trong đầu và nhóm chúng thành mã theo một số quy tắc đơn giản:
- Khái niệm này có khác biệt đáng kể về hành vi hoặc dữ liệu từ các đối tượng khác mà tôi đã có không? (Các quốc gia và mọi người chia sẻ rất ít, nếu có, dữ liệu hoặc hành vi có ý nghĩa, vì vậy họ nên được thể hiện bằng các loại khác nhau trong trò chơi).
- Tôi thậm chí có cần phải điều khiển khái niệm này theo mã một cách đáng kể không (nếu trò chơi của bạn giao dịch với từng người, bạn có thể cần
Person
lớp đó , nhưng nếu trò chơi chỉ quan tâm đến họ trong tổng hợp, như trong các phiên bản trước của SimCity, bạn có thể không cần loại đó cũng như các thể hiện của loại đó để tạo bản đồ 1: 1 về dân số của thị trấn. int populationCount
có thể là đủ).
- Liệu khái niệm này đòi hỏi nhà nước ? Nếu vậy nó nên được gói gọn bằng cách nào đó cho phép tôi lưu trữ trạng thái này (một lớp) chứ không phải là một loạt các hàm miễn phí. (Việc triển khai tìm đường không có đối tượng trong thế giới thực tương tự, nhưng nó yêu cầu theo dõi dữ liệu như các nút trong bản đồ mà nó đã xem xét và điều đó được thực hiện tốt hơn thông qua một lớp hơn là lưu trữ trong một bó của các quả cầu ẩn và thực hiện các chức năng tự do).
Mặc dù đơn giản, việc trả lời những câu hỏi đó có thể mang lại lợi ích lớn cho bạn khi cố gắng quyết định xem và làm thế nào để chuyển đổi một khái niệm tinh thần thành mã nguồn. Bạn cũng có thể muốn đọc các nguyên tắc RẮN của thiết kế hướng đối tượng .
Lưu ý rằng đề xuất của một hệ thống thực thể / thành phần được đưa ra trong các nhận xét cũng là một cách tiếp cận hợp lệ, mặc dù tôi sẽ tránh nó ở đây trừ khi bạn tái phạm vi dự án của mình nhỏ hơn (đơn giản là vì thực hiện hai thách thức mới, lớn trong một dự án có thể quá nản chí và có thể làm loãng lợi ích giáo dục mà bạn sẽ nhận được nếu chỉ tập trung vào một). Trong mô hình hướng thành phần, "loại" trong các câu hỏi ở trên trở nên rõ ràng hơn: không phải là loại cụ thể trong mã, mà là loại ẩn được xác định bởi tập hợp các thành phần tạo thành một thực thể. Các nguyên tắc hướng dẫn tương tự có thể áp dụng.