Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Проект №7. Описание игры с использованием ООП.docx
Скачиваний:
23
Добавлен:
11.04.2015
Размер:
223.71 Кб
Скачать

7.6 Описание Конструктора tPlayer

Помимо методов, каждый класс может иметь конструктор. Конструктор — это особый метод, который вызывается автоматически и только один раз, в момент создания экземпляра класса (в том месте, где этот экземпляр описан), всегда до его первого использования. Например, конструктор окна будет вызываться, когда это окно создается (конструируется), до его первого показа. Использовать конструктор очень удобно, когда требуется один раз на время работы программы задать начальные значения каким-то переменным.

Синтаксис конструктора: имя_класса() ;

Описание конструктора должно быть включено в текст описания класса:

classTPIayer

{

 public:

int Scores, CurrentScores, WinNum;

TPIayer() ;

voidInit() ;

};

Конструктор всегда размещается в общей (public) части описания класса, так как он по определению будет вызываться извне методов своего класса, в строке, где определяется переменная соответствующего класса.

В файле Game.cpp надо определить, что конструктор делает:

TPlayer::TPlayer()

{

WinNum = 0 ;

}

Рис.4 Содержимое файла Game.cpp

7.7 Описание класса судьи tReferee

Описание класса СУДЬИ надо продолжить в файле Game.h, вслед за описанием класса TPlayer:

classTReferee

{

 public:

TPlayer Human, Computer; // две переменные типа TPlayer — игрока-человека и

// игрока- компьютера

TDice Dice; // переменная типа TDice — кубик

voidComputerMove() ; // ТРИ МЕТОДА: ход компьютера

boolGameFinish(); // проверка на конец партии, метод возвращает значение true || false

voidNewGame () ; // новая игра

};

Вполне возможно, что в дальнейшем понадобятся и другие вспомогательные методы. Будем добавлять их по мере возникновения такой потребности. Способность предусмотреть и заранее точно определить, какие методы каждого класса будут реально востребованы в работе, считается признаком высокого профессионального мастерства программиста.

7.7.1. Алгоритм реализация метода NewGameQ в файле Game.Cpp (смотри рисунок 5)

Сначала надо проинициализировать внутренние переменные каждого игрока, а затем определить, чья очередь хода. Для этого можно бросить кубик, и если на нем выпадут числа 1,2 или 3, то надо сделать ход за компьютер ComputerMove(), в противном случае — считать, что очередь хода человека и ожидать его действий( т.е. вернуться к игре и выполнить ход за человека , нажав кнопку или выбрав пункт меню Бросить Кубик), завершив работу метода.

В описании класса судьи введена переменная Human, которая определена наследником класса TPlayer , поэтому переменной Human доступны все данные класса

class TPIayer

{

public:

int Scores, CurrentScores, WinNum;

void Init() ;

};

Правило обращения к переменным класса:

при работе со стандартными или автоматически созданными объектами C++Builder (окна и расположенные на них визуальные компоненты), представленными указателями, для доступа к их свойствам и методам надо использовать знак «->», а при работе с переменными собственных классов — символ «.» (подробно использование точки или -> описано выше в теории).

Рис.5 Список переменных и методов, доступных HUMAN

На рисунке 5 при обращении к переменной класса Human, после точки появляется список (система Builder C++ таким образом контролирует использование принципов ООП).

Если списка данных не появилось, следовательно надо проверить идентификаторы в описании классов

При вводе объекта Dice, проверьте корректность Dice. , в появившемся списке выберите метод GetDiceValue()

Текст метода приведен ниже:

// Новая игра

voidTReferee::NewGame()

{

Human.Init();

Computer.Init() ;

if( Dice.GetDiceValue() <= 3 ) ComputerMove() ;

}

7.7.2. Алгоритм работы метода ComputerMove() пока можно реализовать самым простым способом. Для простоты предположим, что компьютер во время своего хода всегда бросает кубик только один раз.

// Ход компьютера 

void TReferee::ComputerMove()

{

Computer.CurrentScores = 0; // Пока на данном ходу не набрано никаких очков:

// Если на кубике выпала не единица, то...

if( Dice.GetDiceValueO != 1 )

// Запомнить очки текущего хода и Подсчитать очки

Computer.CurrentScores = Dice.LastValue ;

Computer.Scores = Computer.Scores + Computer.CurrentScores ;

// Так как теперь ход человека, надо обнулить очки его текущего хода:

Human.CurrentScores = 0;

}