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

С# - Ватсон К.

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


(

for (int с = 0; с < 7; C++)

(

playerstp].PlayHand.Add(playDeck.GetCard(currentCard++));

>

>

} „ public int PlayGameO С

ti Сида будет включаться дальнейший код.

) -
282

Глава 12

В файле ciassi.es содержится функция Maini), которая инициализирует и запускает игру. Эта функция выполняет следующие шаги:

? На экран выводится заставка.

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

? В соответствии с введенным числом игроков определяются объекты типа player.

? Каждому пользователю выводится приглашение, запрашивающее его имя, которое будет использоваться

при инициализации соответствующего объекта типа player в массиве.

? Создается объект Game и с помощью метода SetPiayers () определяются игроки, которые будут принимать участие в игре.

? Начинается собственно игра посредством метода PlayGameO.

? Возвращаемое значение метода PlayGameO типа inc используется для вывода сообщения о том, кто нз игроков выиграл (возвращаемое значение представляет собой индекс победителя

в массиве объектов типа Player).

Код, выполняющий все эти действия (снабженный комментариями доя большей ясности), приводится ниже:

static void Main(string[I arge)

(

И Вывод заставки

Console.№iteLine('XarliCards: a new and exciting card game.');

Console.WriteLinef'To win you must have 7 cards of the same euit in' +

* your hand.')t '

Coneole.WriteLineO i

Ii Приглаиемкб для ввода числа игроков bool inputOK ¦ false; int choice = -1;

do '

( ,

Co; lole.WriteLine('How many players (2-7)?') i string input • Console.ReadLi :() ; try -

{

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

choice * Convert.ToInt32(input); if ((choice >“= ) && (choice <- 7))

inputOK ж true;

>

catch

(

ft В случае неудачи продолжаем выводить приглашение

)

} while (inputOK “ false) ,¦

11 Инициализация массива объектов Player.

Player [1 players = new Player!choice]i
События

283

П Запрос шеи игроков.

for (int р = Ot р < players.Length; р++) t

Console.WriteLine('Player (0), enter your name:", p + 1) j string playerName « Console. ReadLlne ();

players[p] ¦ new Player(playerName); .

)

// Начало игры

Game newGame = new Game О j . newGame.SetPiayers(players); int whoWon * newGame. PlayGame (J j

// Вывод информации о выигравшем игроке

Console. WriteLinef(Q) has won the gamel', playerstwhoWon].Name);

)

Теперь обратимся к методу PlayGameO, представляющему основное тело приложения. Этот метод не будет описываться подробно, так как он снабжен комментариями, что делает его несколько более понятным. На самом деле, за некоторыми исключениями, а коде нет ничего столь уж сложного.

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

Ключевым моментом, который необходимо иметь в виду при изучении кода, является способ, используемый для манипуляций над объектами типа card. Теперь становится понятным, почему они были описаны как переменные ссылочного типа, а не как значимого (посредством использования структуры). Один объект card может находиться одновременно в нескольких местах, поскольку на него могут ссылаться объект Deck, поля hand различных объектов Player, семейство discardedcards и объект playcard {поскольку карта в настоящий момент находится на столе). Это значительно упрощает процедуру отслеживания движения карт и используется, в частности, в коде, который отвечает за сдачу очередной карты из колоды. Карта может быть принята только в том случае, еслн она ие находится у какого-нибудь игрока на руках, на столе или в семействе discardedcards.

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

public int PlayGameO (

II Игра происходит только при наличии игроков if (players == null) return -lj

//Первоначальная сдача карт.

DealHands();

// Инициализация переменных, используемых в карточной игре, включая // карту, которая кладете! на стол первой; playcard .

bool GameWon = false; int currentPlayer;

card playcard ¦ playDeck.GetCard(currentCard++) i
284

Глава 12

П Основной цикл игры, повторяется до тех пор, пока не будет выполнено // услоя: iaraeWon == true,

do

<

// Проход по всем игрокам для каждого круга игры for (currentPlayer = 0; currentPlayer < players.Length; сurrentPlayer++)

{

// Вывод информации о текущем игроке, об имевшихся у него ка // руках картах и о карте, лекажей не столе

Console.WriteLine('{0)‘в turn.*, players[currentPlayer].Nome)j Console.WriteLine{'Current hand:');

foraach (Card card in players [currentPlayer] „PlayHand)

{

Console.WriteLine(card)г
Предыдущая << 1 .. 126 127 128 129 130 131 < 132 > 133 134 135 136 137 138 .. 404 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

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

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

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

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