Для программы карточных игр ceg - PullRequest
0 голосов
/ 07 мая 2020
  • Рука - представляет руку в игре в 5-карточный стад-покер * *
  • @ author MN * / publi c class Hand {

    publi c stati c final int PAIR = 1; publi c stati c final int TWO_PAIR = 2; publi c stati c final int THREE_OF_A_KIND = 3; publi c stati c final int STRAIGHT = 4; publi c stati c final int FLU SH = 5; publi c stati c final int FULL_HOUSE = 6; publi c stati c final int FOUR_OF_A_KIND = 7; publi c stati c final int STRAIGHT_FLU SH = 8;

    publi c stati c final int CARDS_PER_HAND = 5;

    private int handType; private Card [] карты;

    / **

    • Конструктор по умолчанию - только для заглушек. * / publi c Hand () {

      cards = new Card [CARDS_PER_HAND];

    } // конструктор по умолчанию

    / **

    • Явный конструктор значения. *
    • @ param newCards Массив карт * / publi c Hand (Card [] newCards) {

      cards = newCards; аранжировать (); // расставляем карты по порядку handType = setHand ();

    } // перегруженный конструктор

    / **

    • Копирующий конструктор. Создайте новую руку, которая дублирует карты в другой руке
    • . Этот метод завершен. Его не нужно менять.
      • MLN добавлено в базовый класс для облегчения тестов
      • @param other Другая рука * / publi c Hand (Другая рука) {

      cards = new Card [CARDS_PER_HAND];

      for (int i = 0; i < CARDS_PER_HAND; i ++) {cards [i] = новая карта (other.getCard (i)); }}

    / **

    • Укажите, бьет ли эта рука другую руку. *
    • @ param other Другая рука
    • @ return true, если эта рука бьет другую руку * / publi c boolean beats (Hand other) {

      логическое значение weWin; weWin = false;

      if (handType == other.getHandType ()) {weWin = resolveT ie (другое); } еще {weWin = handType> other.getHandType (); }

      return weWin;

    } // метод beats

    / **

    • Возвращает отдельную карту. *
    • @ param which Указанная c карта для возврата
    • @ возвращает объект карты, null, если он недействителен * / publi c Card getCard (int which) {

      Card returnVal; returnVal = null;

      если (который> = 0 && который

      return returnVal;

    } // метод getCard

    / **

    • Получить руку как Строка. *
    • @ вернуть руку как строку * / publi c String getHand () {

      String handString; handString = "Ошибка";

      переключатель (handType) {case PAIR: handString = "Pair"; перерыв; case TWO_PAIR: handString = "Две пары"; перерыв; case THREE_OF_A_KIND: handString = «Тройка»; перерыв; case STRAIGHT: handString = "Прямо"; перерыв; case FLU SH: handString = "Грипп sh"; перерыв; case FULL_HOUSE: handString = «Фул Хаус»; перерыв; case FOUR_OF_A_KIND: handString = "Качественная четверка"; перерыв; case STRAIGHT_FLU SH: handString = "Прямой грипп sh"; перерыв; по умолчанию: handString = getHighCard () + "High";

      } // конечный переключатель

      return handString;

    } // getHand

    / **

    • Возвращает тип руки как целое число. *
    • @ вернуть тип руки как int * / publi c int getHandType () {

      return handType;

    } // метод getHandType

    / **

    • Возвращает самую высокую карту в руке. *
    • @ вернуть самую высокую карту * / publi c Card getHighCard () {

      int index; int наибольший;

      index = 0; large = Integer.MIN_VALUE;

      for (int i = 0; i <5; i ++) {if (cards [i] .getFaceValue ()> large) {large = cards [i] .getFaceValue () ; index = i;

      }
      

      }

      возврат карт [index];

    } // метод getHighCard

    / **

    • Возвращает номинал самой высокой карты в руке. *
    • @ вернуть номинал самой высокой карты в руке * / publi c int getHighCardValue () {

      return getHighCard (). GetFaceValue (); }

    / **

    • Определяет, не имеет ли эта рука никакой ценности (нет пар, тройка,
    • et c. *
    • @ return true, если нет пар, трех одинаковых, четырех одинаковых, et c. * / Publi c boolean hasNoValue () {

      логическое isNothing = false;

      if (! HasPair ()) {if (! HasThreeOfAKind ()) {if (! HasFourOfAKind ()) {if (! HasStraight ()) {if (! HasFullHouse ()) {if (! hasFlu sh ()) {if (! hasStraightFlu sh ()) {isNothing = true;}}}}}}}

      return isNothing;

    } // метод hasNoValue

    / **

    • Проверяет, действительна ли рука. Действительная рука не должна содержать
    • дубликатов. Это вернет истину, если в руке есть все разные карты. Это
    • вернет ложь, если любые две карты одинаковы (как лицо, так и масть). *
    • Этот метод в первую очередь диагностики c в функции - для проверки ошибок. *
    • * 120 5 * @ return true, если рука действительна * / publi c boolean isValid () {

      boolean ok = true;

      for (int i = 0; я

      return ok;

    } // метод isValid

    / **

    • Показать значения эта рука. *
    • @ вернуть список карт в руке и тип руки * / publi c String toString () {

      String returnVal; returnVal = "\ n";

      for (int i = 0; i

      return returnVal;

    } // метод toString

    / **************** ************* частные методы ************************ /

    / **

    • Расставьте карты по номиналу - используется алгоритм сортировки по выбору
    • . * / приватное пустое расположение () {

      int minIndex; Card temp;

      // Алгоритм сортировки выбора для (int index = 0; index

      for ( int scan = index + 1; scan < cards.length; scan++ ) {
          if ( cards[ scan ].getFaceValue() < cards[ minIndex ]
                          .getFaceValue() ) {
              minIndex = scan;
          }
      }
      
      // swap the values
      temp = cards[ minIndex ];
      cards[ minIndex ] = cards[ index ];
      cards[ index ] = temp;
      

      } // конец для }

    / **

    • Получить индекс пары. *
    • @ вернуть значение индекса для пары * / private int getPairValue () {

      boolean hasPair; int pairIndex;

      hasPair = false; pairIndex = -1;

      for (int i = 0; i

      return pairIndex;

    } // метод getPairValue

    / **

    • Получить индекс для 2-я пара. *
    • @ вернуть индекс для второй пары * / private int getSecondPairValue () {

      boolean hasPair; логическое hasTwoPair; int pairIndex;

      hasPair = false; hasTwoPair = false; pairIndex = -1;

      for (int i = 0; i

      } // end if
      

      }

      return pairIndex;

    } // метод getSecondPairValue

    / **

    • Определите, не грипп ли эта рука sh. *
    • @ return true, если у руки есть флеш * / private boolean hasFlu sh () {

      boolean hasFlush; hasFlu sh = true;

      for (int i = 0; i

      return hasFlush;

    } // метод hasFLu sh

    / **

    • Определить есть ли в этой руке четверка. *
    • @ return true для руки имеет 4 вида * / private boolean hasFourOfAKind () {

      boolean hasFourOfAKind; hasFourOfAKind = false;

      for (int i = 0; i

      return hasFourOfAKind;

    } // hasThreeOfAKind

    / **

    • Определяет, является ли эта рука аншлаг. *
    • Исправленная версия Кертиса Уайта (теперь с IBM Corp.) *
    • @ return true, если фулл-хаус * / private boolean hasFullHouse () {

      логическое hasFullHouse;

      hasFullHouse = false;

      if (hasThreeOfAKind ()) {if (cards [0] .getFaceValue () == cards [1] .getFaceValue () && карты [3] .getFaceValue () == карты [4] .getFaceValue ()) {hasFullHouse = true; }}

      return hasFullHouse;

    } // метод hasFullHouse

    / **

    • Определяет, является ли эта рука есть пара. *
    • @ return true, если у него есть 2 карты с одинаковым номиналом * / private boolean hasPair () {

      boolean hasPair; hasPair = false;

      for (int i = 0; i

      return hasPair;

    } // метод hasPair

    / **

    • Определить, что это за рука прям. *
    • @ return true, если рука прямая * / private boolean hasStraight () {

      boolean hasStraight; hasStraight = true;

      for (int i = 1; i

      return hasStraight;

    } // метод hasStraight ()

    / **

    • Определить увядание эта рука - прямой грипп sh. *
    • @ return true, если рука является стрит-флешем * / private boolean hasStraightFlu sh () {

      return hasStraight () && hasFlu sh ();

    } // метод hasStraight ()

    / **

    • Определите, есть ли в этой руке тройка. *
    • @ return true для руки имеет 3 вида * / private boolean hasThreeOfAKind () {

      boolean hasThreeOfAKind; hasThreeOfAKind = false;

      for (int i = 0; i

      return hasThreeOfAKind;

    } ​​// hasThreeOfAKind

    / **

    • Определите, есть ли в этой руке 2 пары. *
    • @ return true, если у него 2 набора из 2 карт с одинаковым номиналом * / private boolean hasTwoPair () {

      boolean hasPair; логическое hasTwoPair; hasPair = false; hasTwoPair = false;

      for (int i = 0; i

      return hasTwoPair;

    } // метод hasTwoPair

    / **

    • Определите, кто победит в случае на ie. *
    • @ param other Другая рука
    • @ return true, если мы выиграем в случае ничьей * / private boolean resolveT ie (Другое) {

      логическое значение weWin; weWin = false;

      switch (handType) {case PAIR: weWin = cards [getPairValue ()] .getFaceValue ()> другой .getCard (other.getPairValue ()) .getFaceValue (); перерыв; case TWO_PAIR: weWin = карты [getSecondPairValue ()] .getFaceValue ()> другой .getCard (other.getSecondPairValue ()) .getFaceValue (); перерыв; case THREE_OF_A_KIND: case FOUR_OF_A_KIND: weWin = cards [3] .getFaceValue ()> other.getCard (3) .getFaceValue (); перерыв; case ПРЯМО: weWin = карты [4] .getFaceValue ()> other.getCard (4) .getFaceValue (); перерыв; case FLU SH: weWin = cards [0] .getSuitValue ()> other.getCard (0) .getSuitValue (); перерыв; case FULL_HOUSE: weWin = cards [1] .getFaceValue ()> other.getCard (1) .getFaceValue () || карты [4] .getFaceValue ()> другой .getCard (4) .getFaceValue (); перерыв; case STRAIGHT_FLU SH: weWin = карты [0] .getFaceValue ()> other.getCard (0) .getFaceValue ()? карты [0] .getSuitValue ()

      other.getCard (0) .getSuitValue (): карты [0] .getFaceValue () other.getCard (0) .getFaceValue (); перерыв; по умолчанию: weWin = getHighCard () == other.getHighCard ()? getHighCard (). getSuitValue ()> other .getHighCard (). getSuitValue (): getHighCardValue ()> other .getHighCardValue ();

      } // конечный переключатель

      return weWin ;

    } // метод resolveT ie

    / **

    • Определение числового c значения для текущей руки используя stati c finalals
    • , определенную здесь.
      • @ возвращает число, соответствующее типу руки * / private int setHand () {

      handType = 0;

      if (hasStraightFlu sh ()) {handType = STRAIGHT_FLUSH; } иначе, если (hasFourOfAKind ()) {handType = FOUR_OF_A_KIND; } иначе, если (hasFullHouse ()) {handType = FULL_HOUSE; } иначе, если (hasFlu sh ()) {handType = FLUSH; } иначе, если (hasStraight ()) {handType = ПРЯМОЙ; } иначе, если (hasThreeOfAKind ()) {handType = THREE_OF_A_KIND; } иначе, если (hasTwoPair ()) {handType = TWO_PAIR; } иначе, если (hasPair ()) {handType = PAIR; }

      return handType;

    } // метод setHand

} // класс Hand

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