Создание игр для мобильных телефонов - Майкл Моррисон
Шрифт:
Интервал:
Закладка:
► научитесь тестировать сетевые игры.
Обзор игры Connect 4
Если вы ни разу не играли в Connect 4, давайте вкратце рассмотрим ее правила. Это очень простая игра, похожая на крестики-нолики; ваша цель – разместить в ряд, столбец или по диагонали 4 фишки. Игра происходит на поле размером 7х6 ячеек. Фишки – это цилиндры, похожие на шашки. На рис. 15.1 показана доска для игры в Connect 4.
Рис. 15.1. Игровая доска Connect 4 имеет размер 7х6 ячеек
Особенность игры Connect 4 заключается в том, что доска располагается вертикально, а каждый столбец представляет отдельную секцию (между ячейками отсутствуют перегородки). В результате, вместо того чтобы выбирать положение для фигуры по вертикали, вы можете просто ставить фишки одну за другой. Это очень сильно влияет на стратегию игры. На рис. 15.2 показано игровое поле Connect 4 после нескольких ходов.
Рис. 15.2. Столбцы в игре Connect 4 заполняются круглыми фигуркамиРис. 15.3. Игра Connect 4 завершается, когда одному из игроков удается «соединить» четыре фигурки
Игра завершается, когда один из игроков выстраивает по горизонтали, вертикали или горизонтали четыре фишки. Здесь также, как и в крестиках-ноликах, возможна ничья, однако вероятность этого намного меньше из-за большего числа возможностей победить. На рис. 15.4 показана «победа» в Connect 4.
Рис. 15.4. В положении (0,0) есть только три выигрышных комбинации...В копилку Игрока
С технической точки зрения, в игре Connect 4 вы можете выиграть всегда, вне зависимости от стратегии игрока, если делаете ход первым.
Разработка игры
Создание игры Connect 4 будет не таким сложным занятием, если вы разобьете весь процесс на отдельные этапы, например, так:
► графика и пользовательский интерфейс;
► сетевое соединение.
► игровая логика;
В следующих разделах будут подробно рассмотрены все указанные этапы создания игры.
Графика и пользовательский интерфейс
Как и в случае большинства игр, разработка Connect 4 начинается с разработки графики. Элементы игровой графики – это фигуры и доска. Кроме этого полезно выводить дополнительную информацию, например, информацию о статусе соединения, а также то, кому принадлежит ход. В любой момент времени строка статуса должна выводить сообщение «Waiting for player's move» (Ожидание хода игрока) или «Your turn» (Ваш ход).
Чтобы создать интуитивно понятный интерфейс в игре, полезно показывать, какая колонка выбрана в настоящий момент. Чтобы сделать ход, нужно выбрать колонку с помощью стрелок влево и вправо, и потом поставить фишку. Маркер колонки в игре Connect 4 – это графическая стрелка, цвет которой зависит от игрока (красная – для игрока серверного устройства, а синяя – для игрока клиентского устройства). Маркер колонки выводится непосредственно над выбранной колонкой, поэтому игрок всегда может знать, в какую колонку будет брошена фишка.
...В копилку Игрока
На самом деле цветовое разделение указателей не является обязательным, поскольку эта информация игрокам не нужна. Однако с точки зрения тестирования игры, очень полезно окрасить указатели в разные цвета, чтобы понять, какое устройство является серверным, а какое клиентским.
Итак, в игре Connect 4 есть четыре основных графических элемента:
► доска;
► строка состояния;
► фишки;
► стрелка-маркер.
У вас уже есть опыт разработки игр с анимационными спрайтами, поэтому программирование интерфейса игры Connect 4 для вас не составит труда. Давайте перейдем к разработке логики игры.
Игровая логика
Самое трудное препятствие в разработке логики игры Connect 4 – определение победившего игрока. Сначала это может показаться достаточно простой задачей: просто проверить наличие четырех фишек одного цвета в ряду, столбце или диагонали, так? Это и впрямь просто для человека, однако научить делать такую проверку компьютер – не такая уж и простая задача. Подумайте о том, как можно с помощью Java-кода проверить состояние игры Connect 4.
Одно из возможных решений – отслеживать всевозможные комбинации положений, приводящих к победе. Эти комбинации можно хранить в таблице, а затем использовать для определения, насколько близок каждый из игроков к победе. Хотя такой подход может показаться не столь очевидным, реализовать его не составит труда. На самом деле, в коде игры Connect 4 вы используете «силовой прием». Уверен, что есть более элегантные способы решения задачи, но таблица с выигрышными комбинациями – это очень простой и весьма эффективный метод с точки зрения производительности.
Сеть
Как вы, несомненно, поняли, Connect 4 – это пошаговая игра. Это означает, что для ее реализации идеально подходит сетевое датаграммное соединение. Оказывается, игра Connect 4 может быть построена на тех же приемах, что и созданный в предыдущей главе мидлет Lighthouse. Но теперь нужно переправлять не символы азбуки Морзе (точек или тире), а номер столбца, в который производится ход. Единственное, что отличает игру Connect 4 от мидлета Lighthouse, – это необходимость отслеживания очередности ходов. Иначе говоря, вы не можете создать «свободное соединение», как это было в случае Lighthouse.
Подобно мидлету Lighthouse, игра Connect 4 работает в двух режимах: клиент и сервер. Режим работы определяется при первом запуске игры. Предполагается, что для игры клиент должен подсоединиться к серверу. После того как соединение клиент-сервер установлено, игроки поочередно выполняют ходы, отправляя сообщения. Проблема заключается в том, чтобы сохранить синхронизацию образов игры Connect 4. Решение этой проблемы – тщательное отслеживание очередности ходов и проверка получения игроком информации о ходе соперника.
Ниже приведены основные элементы работы сетевого соединения в игре Connect 4:
1. телефон-сервер открывает датаграммное соединение и ждет ответа клиента;
2. телефон-клиент открывает датаграммное соединение и подключается к серверу;
3. по установлению соединения игра начинается ходом клиента. Далее право первого хода будет принадлежать проигравшему;
4. клиент совершает ход и передает серверу информацию о выбранном столбце;
5. ход переходит к серверу;
6. игра длится до тех пор, пока один из игроков не одержит победу или не будет возможности для совершения новых ходов;
7. клиент и сервер завершают соединение.
Как вы видите, с точки зрения работы с сетью, игра Connect 4 – это более интересный вариант мидлета Lighthouse. Единственное значительное отличие – это управление ходами игроков и обмен информацией о выбранной колонке, а не символами азбуки Морзе. Как вы увидите дальше, код для работы с сетью игры Connect 4 во многом похож на код мидлета Lighthouse.
Разработка игры
Подобно тому, как процесс разработки игры Connect 4 был разбит на отдельные этапы, разработка программного кода так же может быть разделена. В следующих разделах вы увидите коды различных игровых компонентов.
Клиент и сервер в игре Connect 4
Большая часть кода игры Connect 4 содержится в двух классах: C4 Client и C4Server. Неудивительно, что эти два класса представляют клиента и сервер, которые обмениваются игровыми сообщениями. Оба класса реализуют интерфейс Runnable. Это означает, что каждый из них выполняется в отдельном потоке. Поскольку сервер обычно запускается первым, давайте начнем разработку класса C4Server.
Ниже приведены переменные класса C4Server:
private C4Canvas canvas;
private DatagramConnection dc;
private String address;
private boolean connected;Сервер должен иметь возможность обмениваться информацией о состоянии игры с игровым холстом, управляющим игрой. Поэтому важно, чтобы класс C4Server сохранял холст игры в переменной canvas. Переменная dc отслеживает датаграммное соединение, что очень важно для работы приложения. Переменная address сохраняет адрес клиента – он необходим для отправки датаграмм клиенту. И наконец, переменная connected отслеживает, установлено соединение или нет. Конструктору класса C4Server требуется единственный параметр – объект класса C4Canvas:
public C4Server(C4Canvas c) {
canvas = c;
connected = false;
}Конструктор C4Server() очень прост, и ничего не выполняет, кроме как инициализирует 2 переменные. Метод start(), который наследуется от интерфейса Runnable, также прост:
public void start() {
Thread t = new Thread(this);
t.start();
}Здесь нет ничего непонятного – стандартный код запуска потока. Возможно, что в классе C4 Server есть лишь один более скучный метод – метод stop(), который вообще ничего не делает:
public void stop() { }
Код класса C4Server в действительности не очень интересен, за исключением метода run(), код которого приведен в листинге 15.1. Листинг 15.1. Метод run() класса C4 Server это сердце приложения Connect 4
public void run() {
try {
// соединиться с клиентом
canvas.setStatus("Waiting for peer client..."); //Сервер отображает начальное соединение, что говорит о том, что он пытается соединиться с клиентом
dc = null;