После того как все описанные действия будут выполнены, программа окажется в некотором промежуточном состоянии: прошлая игра уже окончилась, о чем имеется соответствующая запись в списке, а новая еще не началась. Такое состояние надо отслеживать особо, чтобы при щелчке на кнопке Бросить кубик никаких действий не происходило, а выдавалось бы сообщение о том, что новая партия еще не начата.
С помощью Инспектора объектов задайте пункту меню Бросить кубик название UseDiceltem и создайте метод реакции на выбор этого пункта. Он получит название UseDiceItemClick().
void __fastcall TForm1:: UseDiceItemClick(TObject *Sender)
{
// добавить код самостоятельно по указаниям, приведенным ниже
}
1. Прежде всего, надо проверить, закончена ли текущая партия. Если это так, то желательно сообщить пользователю, что сначала надо начать новую партию,.а дальнейшие действия текущего метода не выполнять:
if(Referee.GameFinish()) {
ShowMessage(GAME_FINISHED_STR);
return;
}
2. Если же игра продолжается, то сначала требуется проверить, не выпала ли единица. Если да, то с помощью функции ShowMessage() надо сообщить об этом человеку, для чего предварительно стоит описать константу: Не забывайте: все константы располагаются в файле Text.h
|
|
const AnsiString ONE_STR = "Выпала единица";
3. Если выпала не единица, то необходимо увеличить набранные на текущем ходу очки на выпавшее число, по окончании всех проверок обновить содержимое экранных полей и выполнить проверку на завершение игры.
Выглядеть соответствующий текст будет так:
// если выпала единица...
if(Referee.Dice.GetDiceValue() == 1)
{
// показать соответствующее сообщение ShowMessage(ONE_STR);
// передать очередь хода- компьютеру
// (набранные очки человеку не засчитываются)
Referee.ComputerMove();
}
// иначе запомнить выброшенные очки:
else Referee.Human.CurrentScores += Referee.Dice.LastValue;
4. В противном случае надо просто увеличить значение переменной
Referee. Human.CurrentScores на выпавшее число (оно хранится в переменной
Referee. Dice.LastValue):
5. В заключение вызываются два метода:
Showlnfo(); // показать новые данные EndGameTest(); // проверка, не завершена ли партия