В методе start выполняется ряд важных инициализаций, например, изображений фишек и стрелки. Спрайт стрелки состоит из двух фреймов – синей и красной стрелок, цвет стрелки выбирается в соответствие с режимом работы игры (клиент или сервер). Затем выполняется инициализация проигрывателей, после чего инициализируются четыре основные игровые переменные (gameOver, myMove, curSlot и gameState). В зависимости от значения переменной isServer запускается нужный сетевой сервис (клиент или сервер). Значение этой переменной устанавливается при запуске конструктора C4Canvas.
Хотя метод start очень важен для инициализации приложения, метод update, приведенный в листинге 15.6, – это метод, в котором обрабатывается ввод и преобразуется в игровые события, передаваемые по сети.
Листинг 15.6. Метод update класса C4Canvas отвечает на нажатия клавиш и отправляет игровые сообщенияprivate void update {
// проверить, перезапущена ли игра
if (gameOver) {
int keyState = getKeyStates;
if ((keyState & FIRE_PRESSED) != 0) {
// начать новую игру
newGame;
// отправить сообщение о новой игре оппоненту
if (isServer)
server.sendMessage("NewGame"); //Оповестить другого игрока о начале игры
else
client.sendMessage("NewGame");
}
// игра окончена, обновление не требуется
return;
}
// обработка нажатия клавиш
if (!gameOver && myMove) {
// обработка пользовательского ввода
int keyState = getKeyStates;
if ((keyState & LEFT_PRESSED) != 0) {
if (–curSlot < 0) //Переместить маркер колонки влево
curSlot = 0;
}
else if ((keyState & RIGHT_PRESSED) != 0) {
if (++curSlot > 6) //Переместить маркер колонки вправо
curSlot = 6;
}
else if ((keyState & FIRE_PRESSED) != 0) {
if (makeMove(isServer ? 0 : 1, curSlot)) {
myMove = false; //Ход игрока окончен
// отправить сообщение другому игроку
if (isServer) //Передать информацию о ходе другому устройству
server.sendMessage(Integer.toString(curSlot));
else
client.sendMessage(Integer.toString(curSlot));
}
}
// обновить положение стрелки
arrowSprite.setPosition( //Изменить положение маркера колонки в соответствии с текущей выбранной колонкой
getWidth * (curSlot + 1) / 8 – arrowSprite.getWidth / 2, 21);
}
}