Описание класса СУДЬИ надо продолжить в файле Game.h, вслед за описанием класса TPlayer:
class TReferee
{
public:
TPlayer Human, Computer; // две переменные типа TPlayer — игрока-человека и
// игрока- компьютера
TDice Dice; // переменная типа TDice — кубик
void ComputerMove(); // ТРИ МЕТОДА: ход компьютера
bool GameFinish(); // проверка на конец партии, метод возвращает значение true || false
void NewGame (); // новая игра
};
Вполне возможно, что в дальнейшем понадобятся и другие вспомогательные методы. Будем добавлять их по мере возникновения такой потребности. Способность предусмотреть и заранее точно определить, какие методы каждого класса будут реально востребованы в работе, считается признаком высокого профессионального мастерства программиста.
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()
Текст метода приведен ниже:
// Новая игра
void TReferee::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;
}