@ 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 [] карты;
/ **
} // конструктор по умолчанию
/ **
} // перегруженный конструктор
/ **
/ **
- Укажите, бьет ли эта рука другую руку. *
- @ 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
/ **
} // метод 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
/ **
/ **
- Определяет, не имеет ли эта рука никакой ценности (нет пар, тройка,
- 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
/ **
} // метод 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
/ **
} // 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 ()
/ **
} // 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