Подобную проверку удобно выделить в отдельный метод — назовем его EndGameTest(). Описание этого метода класса в виде строки void EndGameTest(); добавить в описание класса TForm1 в файле DiceUnit.h лучше разместить рядом с описанием метода Showlnfo().
В методе EndGameTest() с помощью метода GameFinish() класса TReferee будет выполняться проверка, не завершена ли текущая партия, и если да, то будет вызвано диалоговое окно с сообщением о том, победил человек или проиграл. Метод должен также добавить в список TotalScores новую строку, информирующую об итоговом счете.
В конец файла DiceUnit.cpp добавить самостоятельно заготовку:
void TForm1::EndGameTest()
{
}
Проверку на окончание партии можно выполнить условным оператором:
if(Referee.GameFinish()) {…}; Метод GameFinishO сразу возвращает логическое значение типа bool — именно то, что и требуется условному оператору. За оператором if следует логический блок, заключенный в фигурные скобки. В начале этого блока надо определить временную переменную типа AnsiString:
AnsiString s; //которая потребуется для хранения строк, предназначенных для вывода на экран. Так как внутри нового блока известно, что один из игроков одержал победу, надо выяснить, кто это был конкретно. В этом опять поможет условный оператор:
|
|
if(Referee.Human.Scores >= GAME_FINISH_SCORE) {…}; else {….};
Сначала проверяются набранные очки человека. Если они больше или равны 100, то в переменную s заносится строка о победе человека (ее надо описать в файле Text.h:
const AnsiString HUMAN_WON_STR = "Победил человек";
в противном случае — строка, сообщающая о поражении:
const AnsiString COMPUTER_WON_STR = "Победил компьютер";
Здесь же следует увеличить на единицу счетчик числа побед для соответствующего игрока (Human или Computer).
if(Referee.Human.Scores >= GAME_FINISH_SCORE)
{
Referee.Human.WinNum += 1;
s = HUMAN_WON_STR;
} else
{
Referee. Computer.WinNum ++;
s = COMPUTER_WON_STR;
}
После выполнения расширенного условного оператора в переменной s будет храниться строка с сообщением о том, выиграл человек или проиграл. Теперь эту строку надо вывести на экран в диалоговом окне: ShowMessage(s);
Далее информацию о победе и текущий счет необходимо добавить в список TotalScores. Для формирования такого сообщения к содержимому переменной s через пробел справа надо приписать соотношение побед, например,"8:5". Получить текстовые представления соответствующих переменных WinNum можно с помощью стандартной функции IntToStr(), а добавить пробел и двоеточие — используя уже упоминавшуюся операцию сцепления строк:
s = s + " " + IntToStr(Referee.Human.WinNum) + ":" + IntToStr(Referee.Computer.WinNum);
Элемент управления TotalScores состоит из строк. Исходно список пуст. Но в классе TListBox визуального компонента ListBox нет метода добавления новой строки. В нем содержатся лишь базовые методы, общие для всех компонентов, своим поведением в той или иной степени напоминающие работу списков.
|
|
Доступ к содержимому списка, представленному набором строк, осуществляется через свойство Items (Элементы) класса TListBox. Это свойство имеет тип TStrings (специальный класс, предназначенный для работы со списками строк). А уже в этом классе есть метод Add() (Добавить). С помощью метода Add() мы и включим новую текстовую строку (типа AnsiString) в конец списка. Список TotalScores и свойство Items доступны, как и другие стандартные объекты C++Builder, через указатели: TotalScores->Items->Add(s);
С помощью этого оператора в конец списка TotalScores будет добавлена новая строка s.
Текст метода void TForm1::EndGameTest()
{
// заполнить самостоятельно в соответствии с приведенным выше алгоритмом, и подробным его //описанием
}