2012-02-10 31 views
6

Tôi sắp tạo lớp người chơi và người chơi AI (AIBasicPlayer, AINormalPlayer và AIHardPlayer) cho trò chơi bài của tôi (gin rummy). Phương pháp OOP hoặc Design Pattern tốt nhất để tạo các lớp học như thế nào? Tôi đã kiểm tra một số các trò chơi thẻ mã nguồn mở và so sánh cách tiếp cận của họ, sau đây là cách tiếp cận tôi đã thu thập được:Trình chơi trò chơi trên thẻ Class OOP Design

***Classes** 


    1. player class only 

      public class player{ 
      } 
      public class AIPlayer{ 
      } 

    2. base class player 

      public abstract class player{ 
      } 
      public class HumanPlayer extends player{ 
      } 
      public class APlayer extends player{ 
      } 

    3. interface player 

     public interface IPlayer{ 
     } 
     public class Player implements IPlayer{} 
     public class AIPlayer implements IPlayer{} 


*** Methods** 
    takeTurn()  
    doDiscard() 
doDraw() //pick from discard pile or deck 
doKnock() 

Tôi hiểu việc sử dụng các mã trên, nhưng tôi không thể quyết định cái nào để áp dụng hoặc thực hiện Tôi mới vào OOP hoặc Design Pattern và mẫu tư vấn và mã của bạn sẽ là một trợ giúp rất lớn.

Trả lời

4

Tôi sẽ chọn tùy chọn thứ hai, vì người chơi sẽ có một số chức năng (và dữ liệu) được xác định cho cả người chơi thông thường và AI.

Cũng cần lưu ý, tôi cũng sẽ xác định một giao diện iPlayer mà chơi sẽ thực hiện

7

tôi sẽ bắt đầu với cách tiếp cận 3, nó cung cấp số tiền ít nhất của sự gắn kết giữa hai lớp. Nếu bạn thấy rằng có rất nhiều chức năng phổ biến sau đó sử dụng phương pháp 2 hoặc trích xuất chức năng đó vào các lớp khác mà triển khai IPlayer của bạn bao gồm. Tôi thường cố gắng ưu tiên thành phần trên thừa kế vì nó làm cho mã của bạn dễ dàng hơn để sửa đổi khi tái cấu trúc và năng động hơn khi chạy.

+0

@ ggreiner-Điều đó có ý nghĩa. Làm thế nào về thiết kế cho AIPlayer có sức mạnh khác nhau? Ý tôi là, tôi có AIPlayer khác nhau như AIBasicPlayer, AINormalPlayer và AIHardPlayer. Tôi nên sử dụng mẫu thiết kế nào vì chúng có cùng phương pháp với cường độ hoặc thuật toán khác nhau? Tôi sẽ đánh giá cao nếu bạn có thể cung cấp một mã mẫu. – Zack

+0

@Zack trong lớp AIPlayer của bạn, bạn có thể làm điều gì đó dọc theo dòng xác định thành phần AIBehavior xác định cách anh ấy chơi. Bằng cách đó bạn chỉ có thể sử dụng cùng lớp AIPlayer cho mọi khó khăn và cập nhật thành phần AIBehavior nếu cần. – SpartanDonut

Các vấn đề liên quan