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

С# - Ватсон К.

Ватсон К. С# — Лори, 2005 . — 879 c.
ISBN 1-861004-98-2
Скачать (прямая ссылка): vatsonc2005.pdf
Предыдущая << 1 .. 125 126 127 128 129 130 < 131 > 132 133 134 135 136 137 .. 404 >> Следующая


(

If ((cardNum =* 51) && (LastCardDrewn I» null))

LastCardDrewn(this); return cards[cardNum];

)

else

throw new CardOutOfRangeException((Cards)cards.Clone());

}

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

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

Позор, если, потратив столько времени на разработку библиотеки CardLib, мы так и не воспользуемся ей. Перед тем как завершить раздел, посвященный ООП в C# и .NET Framework, самое время немного поразвлечься н написать основу для приложения, которое использует хорошо знакомые нам классы, связанные с игральными картами.

Как и в предшествующих главах, мы добавим клиентское консольное приложение В Chl2CardLib, добавим ССЫЛКу на Проект Chl2CardLib и объявим этот проект начальным. Это приложение мы назовем Chl2Carddient.

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

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

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

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

using Chl2CardLib; namespace Chl2CardClient {

public class Player (

private Cards hand)

private string name; ¦¦
280

Глава 12

public string Name (

get

(

return name,1 ) .

)

public Cerda PlayHand t

get

( ' . return hand;

>

>

private Player() t )

public Player(string newName)

(

name ¦ newName; hand = new Carde [) ;

)

public bool HaeWonO

bool won * true;

Suit match = hand[0].suit;

for (int i и lj i < hand.Count; i+t)

{

won handli] . euit == match;

J

return won;

>

)

)

Далее следует определить класс, который будет вести карточную игру. Назовем его Game (игра). Он будет размещен в файле Garae.cs в проекте chi2CarddLent.

В качестве членов этого класса предусмотрено наличие четырех частных полей:

? playDeck — переменная типа Deck, в которой содержится используемая колода карт

? currentCard — значение типа int, которое используется в качестве указателя на очередную сдаваемую карту

? players — массив объектов типа player, которые представляют участников карточной игры

? discardedcards — семейство объектов cards, которые уже вышли нз игры, но пока еще не возвращены в колоду

Конструктор данного класса по умолчанию инициализирует и перетасонывает колоду Deck, находящуюся в playDeck, устанавливает указатель currentCard на О (на первую карту В playDeck) И привязывает обработчик событий Reshuffle!) (пересдача) К событию playDeck.LastCardDrawn. Названный обработчик просто перетасовывает колоду, включая карты, находящиеся в discardedcards, и подготавливает новую колоду К раздаче, устанавливая указатель currentCard на 0.

т
В классе Game содержатся также два полезных метода: setPiayers (), задающий игроков (в виде массива объектов типа player), и DealHandsO, сдающий карты игрокам (по 7 карт каждому). Число игроков должно находиться в диапазоне от 2 до 7, что гарантирует достаточное количество карт для каждого из них.

Наконец, в файл включается метод piayGamen, в котором содержится логика игры. Мы вернемся к этой функции, после того как рассмотрим код в файле ciasai.es. Весь остальной код файла Game.cs имеет следующий вид:

using System; using ChllCardLib;

namespace Chi2CardClient

public class Game (

private int currentCard; private DecX playDecX; private Player[] players; private Cards discardedcards;

public Gome О {

currentCard =* 0; playDeck * new DecX(true);

playDeck.LastCardDrewn +” new LdstCardDrawnHandler [Reshuffle); playDeck.Shuffle!)j .

private void Reshuffle (Deck current Deck)

{

currentDeck.ShuttleО; discardedcards 9 new Cards(); currentCard = 0;

)

public void SetPiayers(Player[] newPlayers) t

if (newPlayers.Length > 7)

throw new ArgumentException('A maximum of 7 players may clay this' +

* oame.*)j

if (newPlayers.Length < 2)

throw new Argument Except ion (*A minimum of 2 players may play this' +

* game.')j

players ¦ newPlayere; .

>

private void DealHandsO

<

for (int p = 0; p < player s. Length i p++)
Предыдущая << 1 .. 125 126 127 128 129 130 < 131 > 132 133 134 135 136 137 .. 404 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

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

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

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

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