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

8.2.3. Конструктор класса tForm1

Чтобы программа при запуске исходно сразу была готова к игре, неплохо также вызвать методы Referee.NewGame() и ShowInfo() один раз где-то в самом начале работы. Лучше всего это сделать в конструкторе класса TForm1 — этот конструктор уже сгенерирован автоматически, и в его пока пустое содержимое надо только вписать два оператора:

_fastcall TForm1::TForm1(TComponent* Owner): TForm(Owner)

{

Referee.NewGame() ;

ShowInfo() ;

}

8.2.4. Проверка завершения текущей партии метод EndGameTest().

Подобную проверку удобно выделить в отдельный метод — назовем его 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()

{

// заполнить самостоятельно в соответствии с приведенным выше алгоритмом, и подробным его //описанием

}