2012-02-10 20 views
6

Ben Player ve AI Oyuncular (AIBasicPlayer, AINormalPlayer ve AIHardPlayer) benim kart oyunu (cin tuhaf) için sınıf oluşturmak üzereyim. Söz konusu sınıfları oluşturmak için en iyi OOP veya Tasarım Desen yaklaşımı ne olurdu? Ben açık kaynak kart oyunu bazı kontrol ettiğimizde topladıkları yaklaşımlar şunlardır onların yaklaşımlarını karşılaştırmak:Kart Oyunu Oyuncu Sınıf cepten Tasarım

***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() 

Yukarıda kodlarının kullanımını anlıyorum ama uygulamak veya uygulamak için hangisinin karar veremedi .OOP veya Tasarım Kalıbında yeniyim ve tavsiye ve kod örneğiniz çok büyük bir yardım olacaktır. oyuncu düzenli ve AI oyuncular her ikisi için tanımlanmış bazı işlevleri (ve veri) olacak çünkü

cevap

4

Ben, İkinci seçeneği olacaktır.

da ayrıca Oyuncu

7

I yaklaşımı 3 ile başlayacak uygulamak bir IPLAYER arayüzü tanımlamak, nota, bu iki sınıf arasındaki kohezyon en az miktarda içerir. Orada olduğunu görürseniz ortak işlevselliği bir sürü sonra bir yaklaşım 2 kullanın veya IPlayer uygulamaları oluşmaktadır diğer sınıflara bu işlevselliği ayıklamak. Genelde miras üzerinde kompozisyonu tercih etmeye çalışıyorum, çünkü kodunuzu yeniden düzenleme yaparken ve çalışma zamanında daha dinamik olduğunda değiştirmek daha kolay hale geliyor. [email protected]

+0

mantıklı. Farklı gücü olan AIPlayer için tasarım hakkında nasıl? AIBasicPlayer, AINormalPlayer ve AIHardPlayer gibi farklı bir AIPlayer var. Farklı güç veya algoritmalarla aynı yöntemlere sahip oldukları için hangi tasarım desenini kullanmalıyım? Örnek bir kod sağlayabilseydiniz çok memnun olurum. AIPlayer sınıfınızda bulunan – Zack

+0

@Zack, nasıl oynandığını belirleyen bir AIBehavior bileşenini tanımlama satırlarında bir şeyler yapabilirsiniz. Bu şekilde, her bir zorluk için aynı AIPlayer sınıfını kullanabilir ve AIBehavior bileşenini gerektiği gibi güncelleyebilirsiniz. – SpartanDonut