Этот метод вызывается как клиентом, так и сервером. Он обрабатывает сообщения, отправленные соперником.
Сетевое сообщение всегда содержит один из возможных типов информации – сообщение о начале новой игры, или сообщение о номере столбца, в который соперник поставил фишку. Если получено сообщение NewGame, то запускается новая игра. Если получен номер столбца, в который был сделан ход, то он передается в метод makeMove.
Метод makeMove – это последний интересный метод класса C4 Canvas. В листинге 15.10 приведен его код. Этот метод реализует большую часть логики мидлета Connect 4.
Листинг 15.10. Метод makeMove класса C4Canvas отображает ходы, сделанные в игреprivate boolean makeMove(int player, int slot) {
// бросить фишку
if (gameState.dropPiece(player, slot) == -1) { //Попытаться бросить фишку в колонку, в случае неудачи возвратить значение false
// воспроизвести звук неправильного хода
try {
illegalPlayer.start;
}
catch (MediaException me) {
}
return false;
}
// воспроизвести звук корректного хода
try {
legalPlayer.start;
}
catch (MediaException me) {
}
// проверить, закончена ли игра
if (gameState.isWinner(player)) {
if ((isServer && (player == 0)) || (!isServer && (player == 1))) { //Проверить, выиграл ли игрок
// воспроизвести звук победы
try {
winPlayer.start;
}
catch (MediaException me) {
}
status = "You won!";
}
else { //Игрок проиграл
// воспроизвести звук поражения
try {
losePlayer.start;
}
catch (MediaException me) {
}
status = "You lost!";
}
gameOver = true;
}
else if (gameState.isTie) { //Проверить, закончилась ли игра ничьей
// воспроизвести звук ничьей
try {
losePlayer.start;
}
catch (MediaException me) {
}
status = "The game ended in a tie!";
gameOver = true;
}
else {
// обновить сообщение о статусе
status = myMove ? "Waiting for other player..." : "Your turn.";
}
return true;
}