Подобно мидлету 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 { }