Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Клиентская программа карточной игры для CardLib

Else

Namespace Chl2CardLib

Расширение и использование CardLib

Теперь следует внести некоторые дополнения в библиотеку классов, созданную в предшествующей главе,— Сh11СardLib. Будет использоваться проект по созданию библиотеки классов с именем Сh12CardLib, в котором изначально находится код, идентичный коду в Сh11СardLib (не считая того, что в нем используются имена из пространства имен Chl2CardLib вместо ChllCardLib).

Событие, которое мы собираемся включить в библиотеку, будет генерироваться в тот момент, когда последний объект Сard получается в объекте Deck с помощью метода GetCard(), после чего инициируется наступление события LastCardDrawn (последняя сданная карта). Это событие позволит подписчикам автоматически перетасовывать колоду, уменьшая объем вычислений, которые приходится выполнять Клиенту. Делегат, определенный для данного события (LastCardDrawnHandler), должен передавать ссылку на соответствующий объект Deck, для того чтобы обработчик мог иметь доступ к методу Shuffle() независимо от своего местонахождения:

{

public delegate void LastCardDrawnHandler(Deck currentDeck);

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

public event LastCardDrawnHandler LastCardDrawn;

public Card GetCard(int cardNum)

{

if (cardNum >= 0 && cardNum <= 51)

{

if ((cardNum == 51) && (LastCardDrawn!= null))

{

LastCardDrawn(this);

return cards[cardNum];

}

throw new CardOutOfRangeException((Cards)cards.Сlone());

}

Вот и весь код, который потребовался для включения события в определение класса Deck. Теперь осталось только воспользоваться им.

Напишем основу для приложения, которое использует хорошо знакомые нам классы, связанные с игральными картами.

Как и в предшествующих главах, мы добавим клиентское консольное приложение в Сh12CardLib, добавим ссылку на проект Сh12CardLib и объявим этот проект начальным. Это приложение мы назовем Сh12CardСlient.

Для начала создадим новый класс, который мы назовем Player (игрок), в новом файле в приложении Ch12CardClient — Player.cs. В нем будет содержаться частное поле Cards с именем hand (рука), частное строковое поле с именем Name и два поля, доступных в режиме "только чтение": Name и playHand. Эти поля используются для представления частных полей. Обратите внимание на то, что, хотя свойство PlayHand доступно в режиме "только чтение", у нас будет доступ на запись по ссылке на возвращаемое поле hand, что позволит изменять карты, находящиеся на руках у данного игрока.

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

Наконец, мы предусмотрим метод типа bool с именем HasWon() (выиграл). Этот метод будет возвращать значение true, если все карты, находящиеся на руках у данного игрока, имеют одну масть (довольно простое условие выигрыша, но в данном случае это не играет особой роли).

Код в Player.cs имеет следующий вид:

using System;

using Chl2CardLib;

<== предыдущая лекция | следующая лекция ==>
Возвращаемые значения и обработчики событий | Public class Game
Поделиться с друзьями:


Дата добавления: 2014-01-04; Просмотров: 340; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.011 сек.