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

9. Программный код пункта меню «Новая Игра»

Соответствующий пункт меню в Инспекторе объектов можно назвать NewGameItem. Для него надо вышеописанным способом создать метод реакции (он автоматически получит название NewGameltemClick())

void __fastcall TForm1::NewGameItemClick(TObject *Sender)

{

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

}

  1. Перед тем как начать новую партию, необходимо проверить, закончена ли текущая игра. Ведь если это не так, то человек получит определенные преимущества перед компьютером. Почувствовав, что проигрывает, он сможет начать новую партию, и отрицательный результат ему не зачтется.

// Проверяем, закончена ли партия:

if( Referee.GameFinish() )

{

Referee-NewGame() ; // Если да, то начинаем новую игру:

ShowInfo() ; // и выводим на экран начальную информацию

}

2.— А что делать, если партия продолжается?

— Программа всегда должна в подобных случаях реагировать на действия человека, сообщая ему хотя бы минимальную информацию. Поэтому, используя расширенный вариант условного оператора, с помощью ключевого слова else добавим вызов диалогового окна с кратким напоминанием о том, что игра не завершена. Это напоминание надо определить как константу в файле Text.h:

const AnsiString GAME_NOT_FINISHED_STR = "Партия не закончена";

А альтернативная часть условного оператора запишется так:

else

ShowMessage(GAME_NOT_FINISHED_STR) ;

10. Программный код пункта меню «Бросить кубик»

После того как все описанные действия будут выполнены, программа окажется в некотором промежуточном состоянии: прошлая игра уже окончилась, о чем имеется соответствующая запись в списке, а новая еще не началась. Такое состояние надо отслеживать особо, чтобы при щелчке на кнопке Бросить кубик никаких действий не происходило, а выдавалось бы сообщение о том, что новая партия еще не начата.

С помощью Инспектора объектов задайте пункту меню Бросить кубик название UseDiceltem и создайте метод реакции на выбор этого пункта. Он получит название UseDiceItemClick().

void __fastcall TForm1:: UseDiceItemClick(TObject *Sender)

{

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

}

  1. Прежде всего, надо проверить, закончена ли текущая партия. Если это так, то желательно сообщить пользователю, что сначала надо начать новую партию, .а дальнейшие действия текущего метода не выполнять:

if( Referee.GameFinish()) {

ShowMessage(GAME_FINISHED_STR) ;

return;

}

  1. Если же игра продолжается, то сначала требуется проверить, не выпала ли единица. Если да, то с помощью функции ShowMessage() надо сообщить об этом человеку, для чего предварительно стоит описать константу: Не забывайте: все константы располагаются в файле Text.h

const AnsiString ONE_STR = "Выпала единица";

  1. Если выпала не единица, то необходимо увеличить набранные на текущем ходу очки на выпавшее число, по окончании всех проверок обновить содержимое экранных полей и выполнить проверку на завершение игры.

Выглядеть соответствующий текст будет так:

// если выпала единица...

if( Referee.Dice.GetDiceValue() == 1 )

{

// показать соответствующее сообщение ShowMessage(ONE_STR) ;

// передать очередь хода- компьютеру

// (набранные очки человеку не засчитываются)

Referee.ComputerMove();

}

// иначе запомнить выброшенные очки:

else Referee.Human.CurrentScores += Referee.Dice.LastValue;

  1. В противном случае надо просто увеличить значение переменной

Referee. Human.CurrentScores на выпавшее число (оно хранится в переменной

Referee. Dice.LastValue):

  1. В заключение вызываются два метода:

Showlnfo(); // показать новые данные EndGameTest(); // проверка, не завершена ли партия