Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Метод GameFinish()дает информацию окончена ли игра или нет.






В нашем примере максимальная сумма очков равна 100. Логический блок, который «скажет», окончена ли игра, должен проверить, достигнута или превышена, набранная человеком или компьютеромсумма максимума.

Метод GameFinish() будет возвращать логическое значение true, если один из игроков набрал больше 100 очков, и false в противном случае.Такую проверку можно записать так:

Human.Scores> = 100 ||Computer.Scores> = 100. Это выражение удобно использовать в операторе return, чтобы вернуть в программу логическое значение true или false:

Добавьте в текст Game.cpp описание метода.

// Проверка на окончание игры

bool TReferee:: GameFinish()

{

return (Human.Scores> = 100 ||Computer.Scores> = 100);

}

Сохраните проект весь, командой SaveAll или кнопкой на панели инструментов

 

Допустим, что нам захочется немного изменить правила игры и повысить или понизить порог очков (100), после превышения которого партия считается оконченной. Число 100 упоминается несколько раз в разных местах файла, и постоянно менять все операторы, где оно используется, довольно хлопотно. Поэтому лучше всего описать число 100 как константу и в дальнейшем обращаться к ней по имени. Тогда это число можно будет при необходимости заменить на любое другое число, внеся правку только в одно заранее известное место.

Константы обычно описываются в начале файла, сразу за строками включения заголовочных файлов. Синтаксис описания константы таков:

const имя_константы = значение '.;

Если в программе некоторая числовая величина встречается два и более раз, ее лучше всего описать в виде константы, чтобы при-необходимости быстро изменить.Хорошим стилем считается использование в качестве имен констант слов, записываемых заглавными буквами. Для разделения нескольких слов в одном названии применяется символ подчеркивания «_».

Давайте опишем константу GAME_FINISH_SCORE в начале файла Game.cpp:

const GAME_FINISH_SCORE = 100; иизменитетекстметодаGameFinish() заменив чило 100 на константу:

return (Human.Scores> = GAME_FINISH_SCORE|| Computer.Scores> = GAME_FINISH_SCORE);

 

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

На данном этапе завершаем написание кода дополнительного модуля Game.cpp., поэтому после успешной компиляции начните оформлять отчет по проекту. Скопируйте и добавьте в него файлы Game.hи Game.cpp, в виде таблицы, впишите пояснения во втором столбце. Так как на этом этапе работа с созданием и описанием классов пользователя завершена, далее будет простое структурное программирование описывающее алгоритм игры, с использованием переменных класса описанных в модуле Game.cpp.

Продолжаем работать с интерфейсом программы на формеForm1.(смотри рисунок 1)

Реализации работы с интерфейсом будет описываться в файле DiceUnit.cpp.

Добавляем переменную судью– Referee, в модуль формы Form1 ( который содержит всю информацию о проектируемом окне и расположенных на нем компонентах) файла DiceUnit.h

В конце описание класса TForm1 (оно начинается со слов «class TForm1»), вслед за конструктором и можно добавлять новые переменные, свойства и методы, в уже описанный системой визуального программирования класс TForm1.

public: // User declarations

_fastcall TForm1(TComponent* Owner);

TRefereeReferee;

 

Заголовочные файлы с расширением *.h служат для информации о доступных в данном файле (программном модуле) классах, реализация которых расположена в других файлах.

В начале файла DiceUnit.h надо подключить заголовочный файл Game.h (в котором содержится описание класса TPIayer). Это делается командной строкой:

#include " Game.h"

Теперь программу можно откомпилировать ALT+F9 и запуститьF9, только работать она пока не будет — ведь в ней не определены действия, которые будут происходить при выборе пунктов меню или нажатии на командные кнопки.

Теперь попробуем описать алгоритм работы программы в зависимости от действийпользователя и возникновения тех или иных событий.

Событие «Новая игра»

При наступлении этого события происходят следующие действия:

• все набранные очки каждого игрока обнуляются;

• в соответствующих полях главного окна выводится начальная информация;

• случайным образом выбирается игрок, ходящий первым;

• если это компьютер, товыполняется ход компьютера.

Событие «Выход»

При наступлении этого события происходит только одно действие: программа закрывается.

Событие «Бросить кубик»

После этого события выполняются следующие операции:

• бросается кубик для человека.

• если выпала 1, то: ход передается компьютеру;

иначе: результат броска добавляется к текущим набранным очкам;

• если партия завершилась, то: выводятся соответствующие сообщения; начинается новая игра.

Событие «Передать очередь хода»

В результате этого события происходят следующие действия:

• выполняется ход компьютера;

• если партия завершилась, то: выводятся соответствующие сообщения; начинается новая игра.

8.1. Пункт меню: Выход из игры

Выход из игры и закрытие приложения — операция простая. Она будет выполняться, когда человек выберет в меню пункт Выход (или нажмет соответствующую командную кнопку). Закрыть программу надо в обработчике соответствующего события, которое будет сгенерировано C++Builder. Это выполняется следующим образом.

1. Выберите в меню формы пункт Выход из игры и один раз щелкните на нем левой кнопкой мыши.

2. С помощью Инспектора объектов задайте для выбранного таким способом пункта меню название (Name) GameExitltem. Обязательно изменяйте свойство Name, далее по инструкции обращение к элементам формы будет по персональным идентификаторам.

3. Снова выберите в меню формы этот пункт и дважды на нем щелкните.

C++Builder автоматически создаст новый метод GameExitltemClick() класса TForm1 главной формы. Этот метод будет вызываться, когда пользователь в работающей программе выберет пункт меню Выход из игры.

В методе достаточно, привести один оператор — вызов метода Terminate() объекта Application (класс TApplication). Этот объект создается C++Builder автоматически, доступен через указатель и содержит в себе информацию о всем создаваемом приложении — в частности, о названии ЕХЕ-файла, его значке и т. д.Так как Application — указатель, то вызывать метод этого объекта надо с помощью операции «->».

 

8.2 Новая игра: описание методов ShowInfo(), EndGameTest().

В соответствии с алгоритмом Событие «Новая игра» необходимо реализовать пункт, где в соответствующих полях главного окна выводится начальная информация. Эти операции лучше всего вынести в отдельный методShowInfo(), так как выполнять действия по показу подобной информации придется и в других точках программы. Всегда старайтесь выделить не зависящую от интерфейса логику работы программы (в нашем случае — это реализация трех классов в файле Game.cpp) в отдельные независимые модули. Смешивание логики задачи и функций пользовательского интерфейса в одну кучу сильно затрудняет понимание программы и повышает вероятность внесения ошибок.

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.