Компьютерные книги
Главное меню
Главная Поиск по сайту Добавить материал О нас Карта книг Карта сайта
Реклама
computersbooks.net -> Добавить материал -> Языки программирования -> Ватсон К. -> "С#" -> 107

С# - Ватсон К.

Ватсон К. С# — Лори, 2005 . — 879 c.
ISBN 1-861004-98-2
Скачать (прямая ссылка): vatsonc2005.pdf
Предыдущая << 1 .. 101 102 103 104 105 106 < 107 > 108 109 110 111 112 113 .. 404 >> Следующая


Кроме этого, в классе card будет еще переопределен метод ToString о класса System.object таким образом, чтобы можно было простым способом получать удобоваримое строковое представление любой карты. Ради некоторого упрощения задачи для обоих этнх полей — suit и rank — мы определим перечислимые типы.

Класс card может быть представлен, как показано на рисунке справа.-

Класс Deck

Класс Deck будет поддерживать 52 объекта Card. Для этого мы используем тип простого массива. Непосредственного доступа к этому массиву предусмотрено не будет — доступ к объектам card будет осуществляться посредством метода Getcardo (получение карты), который будет возвращать карту по заданному индексу.

Этот класс также должен обладать методом shuffle () (тасуй), который позволяет расположить карты в массиве по-новому, поэтому его можно представить, как показано на рисунке слева.

Создание библиотеки классов

Для целен настоящего примера авторы исходили нз предположения, что вы уже настолько хорошо знакомы с VS, что не нуждаетесь в стандартном “Практикуме”, поэтому явно последовательность необходимых действий не указана.

Оба класса, а также перечислимые типы будут содержаться в проекте по созданию библиотеки классов с именем chiocardLib. Этот проект будет состоять из двух .cs-файлов: card.es, в котором будет находится определение класса card вместе с двумя перечислимыми типами suit и Rank, и Deck.cs, в котором будет находится определение класса Deck.

Card.cs

В этом разделе мы подробно разберем и проработаем код для card.es. В начале, как всегда, мы включим обычный оператор using и объявление пространства имен:

using System,- -

namespace ChiQCardLib

Далее мы поместим определение перечислимого типа suit: public enum Suit {

Club, //трефа//

Diamond, //бубна//

Heart, //черва//

Spade . //пика//

)

Card

¦rank

+ToStringO

Dick

-cords: CardQ

+GetCard()

¦DecXO

Card

¦suit

«rank

«TbStrlngQ
222

Глава 10

Теперь нам потребуется определение перечислимого типа Rank, которое для простоты будет начинаться с представления базового типа для туза, равного 1:

public enum Rank {

Лее “ 1, //туз//
Deuce, //двойка//
Three, //тройка//
Four, //четверка//
Five, //пятерка//
Six, / •.. стерка//
Seven, //семерка//
Eight, //восьмерка//
Nine, //девятка//
Ten, //десятка//
Jack, //валет//
Queen, //дама//
King //король//

Оба этих типа являются общими, поскольку мы рассчитываем, что они будут использоваться извне данной библиотеки классов.

Теперь перейдем к основной части этого файла — определению класса card:

public class Card (

Первая часть кода в определении класса Card объявляет два поля, используемых в режиме “только чтение” и обладающих перечислимыми типами, определенными в начале данного файла:

public readonly Suit suit;

public readonly Rank rank;

Переопределенный метод ToscringO оказывается очень простым благодаря использованию перечислимых типов:

public override string ToStringO (

return *Th« ' + rank + ' of ' + suit + “s';

)

Включение имен полей в строку таким способом приведет просто к переносу строкового представления хранящихся значений перечислимого типа в возвращаемую строку.

Обратимся к конструкторам. Сначала — частный конструктор по умолчанию:

private Card О (

)

Следующим должен быть конструктор, который будет применяться для создания объектов класса Card; ему просто передаются параметры suit и Rank для инициализации полей, использующихся в режиме “только чтение”:

public Card (Suit newSuit, Hank newftank)

suit ¦ newSuit;

. rank = lewRank;

)

)

На этом код данного файла завершен,
Определение членов классов

223

Deck.cs

Этот файл начинается так же, как и card.es,— со стандартного кода:

using System; . namespace ChlOCardLib

В данном случае нам не требуется описывать какне-лнбо типы, кроме класса Deck, поэтому мы сразу переходим к нему:

public claee Deck

Первым мы опишем член, представляющий собой частный массив объектов типа Card, который мы назовем cards:

private CardH cards; ¦

Затем следует конструктор, который просто создает и присваивает 52 карты полю cards. Мы проходим в цикле все возможные сочетания двух перечислимых типов, используя каждое нз этих сочетаний для создания соответствующей карты. В результате мы получаем поле cards, которое изначально содержит упорядоченный перечень карт:

public Deck О

( .

. cards * newCard[52]; ¦ , '

?or (int suit Val * Qi suitVal < dj euitV*l++) • '

( .

for (int rankVal - 1; rankVal < 14; rankVal++) '

f

cards [suitVal * 13 + rankVal - 1) ¦ new Card{(Suit) euitval,

(Rank)rankVal)> )

>

Далее мы реализуем метод GetCardO, который либо возвращает объект card с требуемым индексом, либо генерирует исключительную ситуацию так, как мы делали это раньше:

public Card GetCard (int cardNun) ¦ .

{ . . ' ¦ . . if (cardNba О U cardNum 51) ' .

return cards tcardlKun]; .

else .... .. .

throw (new System. ArauroentOuCOfKeuis eEx : tion(*card№int , cardMum, 'Value must be etween 0 and 51.*)IJ . '
Предыдущая << 1 .. 101 102 103 104 105 106 < 107 > 108 109 110 111 112 113 .. 404 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

Эком "Microsoft Excel 2000 шаг за шагом Русская версия самоучитель " (Самоучитель)

Поляков А.Ю. "Методы и алгоритмы компьютерной графики в примерах Vizual C++" (Графика)

Баяковский Ю.М. "Графическая библиотека Open GL " (Графика)

Валиков А. "Технология " (Языки программирования)
Авторские права © 2013 ComputersBooks. Все права защищены.