- •Ход работы:
- •7.1 Описание классов.
- •7.2 Определяем первый класс Кубик - tDice
- •7.3 Описание метода для объекта Кубик, имитирующий его бросок.
- •7.4. Описываем класс Игрок
- •7.6 Описание Конструктора tPlayer
- •7.7 Описание класса судьи tReferee
- •7.7.1. Алгоритм реализация метода NewGameQ в файле Game.Cpp (смотри рисунок 5)
- •7.7.3 Метод GameFinish() дает информацию окончена ли игра или нет.
- •8. Продолжаем работать с интерфейсом программы на форме Form1.( смотри рисунок 1)
- •Событие «Новая игра»
- •8.2 Новая игра: описание методов ShowInfo(),EndGameTest().
- •8.2.1. Описание метода ShowInfo()
- •8.2.2 Текстовые константы , новый пользовательский файл Text.H
- •8.2.3. Конструктор класса tForm1
- •8.2.4. Проверка завершения текущей партии метод EndGameTest().
- •9. Программный код пункта меню «Новая Игра»
- •2.— А что делать, если партия продолжается?
- •10. Программный код пункта меню «Бросить кубик»
- •10. Программный код пункта меню «Передать очередь хода»
- •11. Продолжаем работать с интерфейсом программы на форме Form1.( смотри рисунок 1)
- •11.1 Настраиваем командные кнопки
- •12 Программирование пользовательского интерфейса
- •13. Случайная генерация
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;
}