Программирование >>  Программирование с использованием ajax 

1 ... 99 100 101 [ 102 ] 103 104 105 ... 396


Конструктор не no умолчанию, поэвол51Пций делать туэы старшР1ми.

public Deck (bool isAceHigh) : this()

Card.isAceHigh = isAceHigh;

Конструктор не no умолчанию, поэвол51ПП91Й использовать козырную масть.

public Deck (bool useTrun5>s, Suit trun)) : this()

Card.useTruns = useTruns; Card, trump = trun;

Конструктор не no умолчанию, позвол51ПП91Й делать тузы старшР1ми и использовать козырную масть.

public Deck (bool isAceHigh, bool useTrun5>s, Suit trun)) : this() {

Card.isAceHigh = isAceHigh; Card. useTruns = useTruns; Card.trunq? = trun);

Каждый из этих конструкторов определен с использованием продемонстрированного в главе 9 синтаксиса : this (), так что во всех случаях конструктор по умолчанию будет вызываться перед конструктором не по умолчанию, инициализирующим колоду.

Теперь можно переходить и непосредственно к добавлению в класс Card перегруженных операций (а также предложенных переопределенных методов).

public Card(Suit newSuit, Rank newRank)

suit = newSuit; rank = newRank;

public static bool operator =(Card cardl. Card card2)

return (cardl.suit = card2.suit) && (cardl.rank = card2.rank) ;

public static bool operator ! = (Card cardl. Card card2)

return !(cardl = card2);

public override bool Equals (object card)

return this = (Card)card;

public override int GetHashCodeO

return 13*(int)rank + (int)suit;

public DeckO {

for (int suitVal = 0; suitVal < 4; suitVal++)

for (int rankVal = 1; rankVal < 14; rankVal++)

cards.Add(new Card((Suit)suitVal, (Rank)rankVal));



public static bool operator > (Card cardl. Card card2) {

if (cardl.suit = card2.suit) {

if (isAceHigh) {

if (cardl.rank = Rank.Ace) {

if (card2.rank = Rank.Ace)

return falser-else

return true;

else {

if (card2.rank = Rank.Ace)

return false; else

return (cardl.rank > card2.rank);

else {

return (cardl.rank > card2.rank);

else {

if (useTruxnps && (card2 . suit ~ Card, trun))

return false; else

return true;

public static bool operator < (Card cardl. Card card2) {

return !(cardl >= card2);

public static bool operator >=(Card cardl. Card card2) {

if (cardl.suit = card2.suit) {

if (isAceHigh) {

if (cardl.rank = Rank.Ace) {

return true;

else {

if (card2. rank = Rank. Ace)

return false; else

return (cardl.rank >= card2.rank);



else {

return (cardl.rank >= card2.rank);

else {

if (useTrun5>s && (card2.suit == Card.trun)))

return falser-else

return true;

public static bool operator <=(Card cardl. Card card2) {

return !(cardl > card2);

Обратить внимание здесь стоит разве что на несколько длинноватый код для перегруженных операций > и >=. Пошаговое изучение кода для > позволит легко понять, как он работает и почему в нем необходимы такие шаги.

Итак, здесь выполняется сравнение двух карт - cardl и card2, при котором предполагается, что карта cardl была выложена на стол первой. Как уже объяснялось ранее, это становится важным в случае использования козырных карт, поскольку козырная карта будет бить не козырную, даже если та является картой более высокого достоинства. Конечно, если масть обеих карт совпадает, тогда то, является масть козырной или нет, роли не играет, поэтому первым выполняется такое сравнение:

public static bool operator > (Card cardl. Card card2) {

if (cardl.suit == card2.suit) {

Если статический флаг isAceHigh имеет значение true, тогда сравнивать достоинства карт напрямую по их значению в перечислении Rank нельзя, потому что достоинство туза соответствует в этом перечисление значению 1, что меньше значений карт всех остальных достоинств. Поэтому вместо этого используются следующие шаги.

□ Если первой картой является туз, тогда выполняется проверка на предмет того, является ли вторая карта тоже тузом. Если да, тогда первая карта не бьет вторую, а если нет, тогда побеждает первая карта:

if (isAceHigh) {

if (cardl.rank == Rank.Ace) {

if (card2.rank == Rank.Ace)

return false; else

return true;

a Если первая карта отлична от туза, тогда все равно выполняется проверка на предмет того, не является ли таковым вторая карта. Если да, тогда побеждает вторая карта, а если нет, тогда может выполняться сравнение значений представляющих достоинство карт, поскольку известно, что тузов среди них нет:



1 ... 99 100 101 [ 102 ] 103 104 105 ... 396

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика