Метод draw() начинается с заливки фона игрового экрана. Затем в нижней части экрана появляется игровое статусное сообщение. Если игра запущена и ход принадлежит игроку, то спрайт стрелки выводится под строкой статуса. Оставшаяся часть метода draw() выводит фишки и пустые ячейки на игровой доске. Значение 0 на игровой доске соответствует фишке красного цвета – игрока серверного приложения, а значение 1 – фишке синего цвета, принадлежащей игроку клиентского приложения.
Метод newGame() вызывается для запуска новой игры, его задача – инициализировать игровые переменные и обновить строку состояния. В листинге 15.8 приведен код этого метода.
Листинг 15.8. Метод newGame() класса C4Canvas запускает новую игру Connect 4public void newGame() {
// Initialize the game variables
gameOver = false;
curSlot = 0;
gameState = new C4State();
// Update the status message
status = myMove ? "Your turn." : "Waiting for player\'s move...";
}Этот код вполне очевидный, переменной gameOver присваивается значение false, переменной curSlot – 0, игровая доска обновляется при создании переменной gameState(). Затем обновляется сообщение в строке статуса в соответствии с очередностью хода.
Вы уже несколько раз видели вызов метода receiveMessage() (листинг 15.9), который отвечает за получение и обработку сообщений.
Листинг 15.9. Метод receiveMessage() класса C4Canvas получает и обрабатывает сообщения, переданные по сетиpublic void receiveMessage(String message) {
if (gameOver) {
// проверка сообщения о запуске новой игры
if (message.equals("NewGame")) //Если получено сообщение NewGame, то начать новую игру
newGame();
}
else {
if (!myMove) {
// попытка получить сообщение с информацией о ходе
try {
// отобразить ход соперника
int slot = Integer.parseInt(message);
if (slot >= 0 && slot <= 6) { //Проверить, что сообщение содержит допустимое значение колонки (от 0 до 6), а затем выполнить ход
if (makeMove(isServer ? 1 : 0, slot))
myMove = true;
}
}
catch (NumberFormatException nfe) {
}
}
}
}