Игрок в карточные игры класса ООП Дизайн - PullRequest
6 голосов
/ 10 февраля 2012

Я собираюсь создать класс Player и AI Players (AIBasicPlayer, AINormalPlayer и AIHardPlayer) для моей карточной игры (джин-рамми).Каков наилучший подход ООП или Шаблон проектирования для создания указанных классов?Я проверил некоторые из карточных игр с открытым исходным кодом и сравнил их подходы, вот следующие подходы, которые я собрал:

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

Я понимаю использование вышеуказанных кодов, но я не мог решить, какой из них применитьили реализовать. Я новичок в ООП или Design Pattern, и ваши советы и пример кода будут очень полезными.

Ответы [ 2 ]

7 голосов
/ 10 февраля 2012

Я бы начал с подхода 3, он обеспечивает наименьшую степень сплоченности между двумя классами.Если вы обнаружите, что есть много общих функций, используйте подход 2 или извлеките эти функции в другие классы, из которых состоят ваши реализации IPlayer.Я обычно стараюсь отдавать предпочтение композиции, а не наследованию, поскольку она упрощает изменение кода при рефакторинге и делает его более динамичным во время выполнения.

4 голосов
/ 10 февраля 2012

Я бы выбрал второй вариант, потому что у игрока будет некоторая функциональность (и данные), определенные как для обычных игроков, так и для игроков с ИИ.

Также отметим, что я бы также определил интерфейс IPlayer, который Player будет реализовывать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...