Tôi đang thiết kế một trò chơi, nhưng tôi hoàn toàn không thể có được đầu xung quanh cấu trúc thừa kế. Tôi thường khá giỏi ở đó, nhưng điều này chỉ có quá nhiều sự chồng chéo và tôi không thể quyết định tất cả.Thiết kế thừa kế/giao diện của trò chơi
Tôi đang tìm cách lập mô hình thuyền buồm - hãy nghĩ đến Tuổi của Sail. Có lẽ do đó mọi thứ mở rộng một lớp Vessel.
Sau đó có một số loại kiểu tàu: chèo thuyền (galleys, cano), giàn khoan vuông, giàn khoan trước và sau, với hành vi khác nhau. Mỗi phần trong số này được chia nhỏ thành nhiều loại khác. Tôi không thể quyết định xem đây có phải là một loạt các giao diện hoặc phần mở rộng của Tàu. Cũng lưu ý rằng có thể có một số chéo (một tàu có thể được cả hai chèo và vuông gian lận) dẫn tôi đến suy nghĩ giao diện?
Tàu cũng có các hành vi khác nhau: tàu buôn, chiến tranh, cá nhân, cướp biển. Tôi thực sự không thể làm việc cho dù điều này nên là một giao diện hoặc mở rộng của lớp khác. Tuy nhiên, không có sự giao nhau kiểu nào trong trường hợp này.
Cuối cùng, có một số hành vi mà các tàu cá nhân có thể có. Thương nhân có thể ở trong đoàn xe (tự vệ) hoặc độc lập (bỏ chạy). Những người đàn ông chiến tranh hầu như luôn tấn công trừ khi bị bắn quá nhiều ... nhưng có thể làm việc trong hạm đội, phi đội hoặc độc lập. Tư nhân và cướp biển chỉ tấn công nếu yếu hơn - thường độc lập nhưng đôi khi theo cặp. Tôi giả định rằng đây cũng là một giao diện?
Vấn đề lớn của tôi là mỗi kiểu tàu (tàu khu trục, tàu chiến ...) có thể thực hiện hầu như bất kỳ vai trò nào, vì vậy tôi không thể xây dựng một cấu trúc thừa kế đơn giản. Frigate không thể mở rộng chiến tranh vì một số người là tư nhân. Sloop không thể mở rộng hình vuông được gian lận bởi vì một số được fore và aft rigged. Vân vân.
Bất kỳ suy nghĩ nào sẽ được đánh giá cao, tôi sắp hết một chút. Cảm ơn
Hai ý tưởng xuất hiện trong đầu của tôi là "thiết kế dựa trên thành phần" và "mẫu chiến lược". Theo như các hành vi khác nhau mà tàu cá nhân có thể có, đó chắc chắn là mô hình chiến lược với tôi - mỗi con tàu đang sử dụng một trong nhiều chiến lược khác nhau. Xem ở đây trên Wikipedia: http://en.wikipedia.org/wiki/Strategy_pattern –
Một con tàu có thể đi từ tàu buôn đến cướp biển ** tại thời gian chạy **, vì vậy giao diện sẽ không hoạt động đối với loại hành vi động này. –
@amadeus: không nhận được quan điểm của bạn. Nếu bạn là "lập trình cho giao diện", bạn có thể làm điều đó một cách chính xác. – Bhushan