Статьи

Создайте многопользовательскую игру «Сапер»: настройка на стороне сервера

Этот мини-сериал, состоящий из двух частей, научит вас создавать многопользовательскую игру под названием Minesweeper Flags. В этом руководстве вы узнаете, как реализовать серверную часть приложения, базу данных и даже веб-сервисы. В следующем уроке вы узнаете, как реализовать пользовательский интерфейс, взаимодействие с веб-сервером, анализ данных и взаимодействие. Читай дальше!


Minesweeper Flag — многопользовательская настольная игра, в которую играют два противника. Обычно синий или красный цвет назначаются каждому игроку. Доска состоит из 256 равных квадратов, и каждая доска имеет 51 мин, расположенных в совершенно случайных положениях.

Цель игры — раскрыть все квадраты, чтобы найти 26 мин. Если дотронуться до игрового поля, вы увидите, что скрыто под выбранным квадратом: бомба или число. Каждый раз, когда игрок касается квадрата, в котором находится мина, он / она получает еще один ход. Кроме того, если число обнаружено, то это число представляет количество мин, прилегающих к непокрытому квадрату.

В начале игры цвет игрока назначается автоматически, и доска полностью закрывается. Игрок с синим цветом всегда движется первым.


Рисунок 5: Синий игрок
Предварительный просмотр финального эффекта

Чтобы упростить требования к игре и программному обеспечению, ниже представлена ​​графическая модель всех требований. Как видите, база данных, веб-сервисы и пользовательские интерфейсы разделены на несколько отдельных уровней для достижения независимости программного обеспечения.

Рисунок 2: Абстракция слоя

Для завершения учебного пособия читателю необходимы следующие требования:

  • MySQL
  • NetBeans с пакетами веб-разработки
  • Xcode с комплектом для разработки под iOS.
  • Cocos2d для iOS

Компонент MySQL можно рассматривать как ядро ​​приложения, поскольку он будет напрямую поддерживать сохранение игры. В нем будут храниться все данные, присущие игре Minesweeper Flag, такие как ходы игроков, местоположение шахты и результаты.

База данных Minesweeper Flag составлена ​​только для одного планшета под названием игры. Следующее изображение представляет базу данных графически.

Рисунок 3: Диаграмма отношений сущностей

  • Таблица «игры» является основной таблицей, поскольку она сохраняет основные функции игры. Он содержит идентификатор игры и игрока, ход игрока, игровую матрицу и открытую матрицу. Поле матрицы содержит местоположение мин и их соседей, в то время как непокрытая матрица изначально содержит 256 квадратов, заполненных предварительно определенным значением 9. Это поле очень важно, так как оно будет постоянно использоваться для проверки того, был ли уже задан квадрат, и его значение. Значение 9 означает, что этот одиночный квадрат еще не был затронут, в то время как символы «*» и «#» «означают, что синий или красный игрок, соответственно, обнаружил мину.

Среда разработки интерфейса Netbeans используется для предоставления веб-приложения и его прямых веб-служб. Это руководство основано на версии 7.0.1 с установленными серверами в комплекте.


Рисунок 4: Запустите новое веб-приложение Java

Нажмите на файл -> Новый проект


Дайте название проекту, его местонахождение и папку

Рисунок 5: Название проекта

Рисунок 6: Выбор механизма веб-сервера

В этом руководстве в качестве стандарта авторы использовали сервер Glassfish с версией 6 Java EE.


Рисунок 7: Рамки

Не выбирайте какую-либо платформу, так как мы не будем использовать какие-либо спецификации или функции любой из представленных фреймворков.

На данный момент у нас настроен веб-сервер. Следующий шаг — запустить его, чтобы проверить, все ли правильно настроено.


Для запуска основного проекта вы можете щелкнуть по параметру « Запустить основной проект» , расположенному в меню « Выполнить», или щелкнуть зеленый значок на верхней панели инструментов. Если все правильно, должна появиться веб-страница с сообщением «Hello World!».

Рисунок 8: Запустите проект

Теперь пришло время добавить слой веб-сервисов на веб-сервер.


Рисунок 9: Добавить веб-сервис

Щелкните правой кнопкой мыши на имени проекта и выберите New -> Other . В левом меню выберите « Веб-сервисы», а в правом списке « Веб-сервис RESTful» из «Шаблоны» .


Рисунок 10: Выберите шаблон

Выберите первый вариант «Простой корневой справочник».


Рисунок 11: Имя веб-службы

Выберите пакет ресурсов и определите Путь для корневого контейнера всех сервисов. Дополнительно выберите тип MIME. Для этого урока авторы выбрали формат обмена данными JSON.


Рисунок 12: Ресурсы REST

Выберите последний параметр «Создать адаптер сервлета Jersey REST по умолчанию в web.xml».


Кроме того, были добавлены еще два метода, чтобы отделить уровень логики данных от уровня базы данных; CreateConnection () и EndConnection (). Следующие фрагменты должны быть включены в Java-класс MinesweeperService.

Включите это в разделе импорта.

1
2
import java.sql.*;
import javax.jws.*;

Определите следующие свойства класса.

01
02
03
04
05
06
07
08
09
10
private Connection conn = null;
private Statement statement = null;
private ResultSet resultSet = null;
// The authors used the 8889 MySQL port at a localhost host.
// Change it accordingly.
private final String url = «jdbc:mysql://localhost:8889/»;
private final String dbName = «minesweeper»;
private final String driver = «com.mysql.jdbc.Driver»;
private final String userName = «root»;
private final String password = «root»;

Скопируйте и пройдите следующие веб-методы.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
    private Boolean CreateConnection() {
        try {
            Class.forName(driver).newInstance();
            conn = DriverManager.getConnection(url + dbName, userName, password);
            return true;
        } catch (Exception e) {
            return false;
        }
    }
 
    private Boolean EndConnection() {
        try {
            if (resultSet != null)
                resultSet = null;
            if (statement != null)
                statement.close();
            if (conn != null)
                conn.close();
        } catch (Exception e) {
            return false;
        }
 
        return true;
    }
 
    @WebMethod(operationName = «authentication»)
    public String authentication(@WebParam(name = «email») String email, @WebParam(name = «password») String pw) {
        CreateConnection();
 
        String query = «SELECT * FROM players WHERE Email='» + email + «‘ and Pass='» + pw + «‘;»;
        try {
            statement = (Statement) conn.createStatement();
            resultSet = statement.executeQuery(query);
 
            if (resultSet.next()) {
                EndConnection();
                return «1»;
            } else {
                EndConnection();
                return «0»;
            }
        } catch (Exception ex) {
            EndConnection();
            return «0»;
        }
    }
}

Поскольку необходимо установить соединение с базой данных MySQL, необходима внешняя библиотека MySQL . Чтобы добавить его в проект, щелкните правой кнопкой мыши имя проекта и перейдите к параметрам « Свойства» . Затем выберите « Библиотеки» и нажмите « Добавить JAR / папку» .

Рисунок 13: Добавьте внешнюю библиотеку MySQL .jar

Рисунок 14: Тестирование веб-службы

Под основным проектом щелкните в папке «Веб-службы», а второй кнопкой мыши щелкните объект MinesweeperService и выберите параметр « Тестировать веб-службы RESTful» .


Рисунок 15: Цель тестовых файлов

Оставьте первый выбранный параметр: «Локально сгенерированный тестовый клиент».

На этом этапе у вас должно быть приложение на стороне сервера, которое поддерживает соединение с базой данных, взаимодействие с веб-серверами и встроенные веб-методы взаимодействия с игрой.

Все операции, связанные с игрой, могут быть выполнены с использованием шага 12, хотя это не удобно для пользователя.


Во второй и последней части этой серии мы объясним, как создать клиентское приложение для iOS, которое будет подключаться к данным веб-сервера и использовать их. Оставайтесь с нами для части 2!