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

С# - Ватсон К.

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


Наконец, требуется реализовать метод shuffi«(). Ои работает за счет создания временного массива карт н копирования карт из существующего массива cards в этот массив случайным образом. Основным телом метода является цикл, проходящий значения от 0 до 51. Прн каждом проходе генерируется случайное число в диапазоне от 0 до 51 при помощи экземпляра класса system.Random, находящегося в .NET Framework. Этот экземпляр генерирует случайные числа в диапазоне между 0 и х с помощью метода Next (Х). Полученное число используется в качестве индекса того объекта card во временном массиве, куда осуществляется запись очередной карты из массива cards.

Для учета записанных карт будет использоваться массив переменных типа bool, в который заносится значение true для каждой переписанной карты. Когда мы
224

Глава 10

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

Такой способ тасования карт не является максимально эффективным, поскольку может потребоваться сгенерировать большое количество случайных чисел, прежде чем будет наедено свободное место для копирования очередной карты, Однако такой метод вполне работоспособен, а поскольку код на C# выполняется очень быстро, мы едва ли сможем заметить какую-либо задержку.

Итак, этот код имеет следующий вид;

public void Shuffled {

Card[J newDeck * new Card [52]; boo 1{J assigned * newbool(523 ; for (int 1 ¦» 0» i < 52t i++)'

(

int destCard ¦ 0; bool foundcard = false;

Random sourceGen * new Random О r while (foundCaxd “ false)

(

destCard = sourceGen.Next(52)i if (absigned[deetCardI == false) foundcard ¦ true;

)

assigned[destCard] = true; newDeck[destCardl = cards[i J;

J

cards x newDeck; i '

)

)

На этом код нашей библиотеки классов завершен.

J
itiej'
t - •-C3 VKuJiftWie РНЫМ pnn&rh&il. DWIUdtUttW ;ww e ii S Wndrn m J'
D4**W#b 9гфО. i
1Ь=ПЖ* j.H ui —1 м» 1,у ¦
tte J J.iOCrdOe*;
3 ft—L 1
^ Г омш r.

1 f“ * 1 СтЫ j h# 1


Для использования только что созданной библиотеки классов из нового проекта по созданию консольного приложения необходимо всего лишь добавить ссылку на проект по созданию библиотеки классов chiocardLib. После того как проект создан, этого можно достичь с помощью вкладки Projects диалогового окна Add Reference (см. рис. справа).

Клиентское приложение для библиотеки классов

Для большей простоты мы можем добавить клиентское консольное приложение к тому решению, в котором содержится библиотека классов. Для этого достаточно выбрать при создании проекта, который назовем CMOCardClient, опцию Add to Solution (см. рис. слева).

Ql^lU . fterf. UhMBS'OXIUm'

я -j -Cvt V и» . I

226

Глава 10

По ходу главы мы рассмотрели вопрос о том, как определяются поля, методы и свойства, обсудили различные уровни доступа и ключевые слова — модификаторы. Кроме того, вы познакомились с мастерами и некоторыми другими инструментами, которые могут вдвое ускорять процесс описания класса.

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

После этого мы уделили более пристальное внимание определению и реализации интерфейсов, включая понятия явной и неявной реализации.

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

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

Упражнения

1. Напишите код, определяющий базовый класс Myciass, с помощью виртуального метода Getstring (), Этот метод должен возвращать строку, хранимую в защищенном поле mystring, которое доступно через общее свойство concainedstring в режиме "только запись”.

2. Создайте класс MyDerivedciass, производный от класса Myciaas, Переопределите метод Getstring о таким образом, чтобы он возвращал строку из базового класса, используя базовую реализацию метода, но при этом добавлял бы в получаемую строку текст “ (output from derived class)’ {“вывод из производного класса”).

3. Создайте класс с именем Mycopyableciass, который позволял бы получать копию самого себя с помощью метода GetcopyO.

ЭТОТ метод должен использовать метод MemberwiseCloneO , наследуемый от System.object. Добавьте в класс какое-либо простое свойство и иапншите клиентский код, который, используя этот класс, позволит убедиться, что все работает правильно.

4. Создайте клиентское консольное приложение для библиотеки chiocardLib, которое “сдает" по пять карт из перетасованной колоды, хранящейся в объекте Deck. В том случае, если все пять карг окажутся одной масти, оно должно вывести на экран нх названия вместе с текстом “Flush!' (“Флеш!”); в противном случае оно должно заканчивать работу после сдачи 50 карт, выводя текст “No flush”
Предыдущая << 1 .. 102 103 104 105 106 107 < 108 > 109 110 111 112 113 114 .. 404 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

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

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

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

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