Для школьного проекта мы должны создать многопользовательскую игру на Java (должна быть клиент / сервер), в которую можно играть через Интернет (мы программируем это в школе, так что это не домашняя работа).Игра пошаговая, но должен быть чат, конечно же, в режиме реального времени.Однако никто из нас не имеет опыта сетевого программирования, и чем больше я об этом читаю, тем больше у меня возникает вопросов.
Моей первой мыслью было использование API сокетов для реализации многопользовательской части.Сервер ожидает новых данных от клиентов.Тем не менее, есть несколько видов данных для получения, таких как сообщения чата, движения и т. Д. Кроме того, как только соединение с сервером установлено, должны быть отправлены некоторые исходные данные (например, имя игрока).Сервер должен иметь возможность видеть, какое сообщение он получил, но как?Я думал о создании класса Message
со строковым полем type
.Но в коде моего сервера я получу код, подобный следующему:
if (message.type.equals("message")) {
// code to execute for chat messages
} else if (message.type.equals("movement")) {
// code to execute for movement
} else if () {
// ...
} else {
// ...
} // Please ignore syntax errors :P
Когда есть много разных типов данных для отправки (и они будут), это не выглядит как самый эффективныйпуть.Кроме того, это будет означать, что и сервер, и клиент должны иметь этот класс / интерфейс сообщений (дублирующий код).
А как насчет других игровых вещей?Например, игрок 1 перемещает своего персонажа в положение, которое побеждает другого персонажа.Клиент игрока 1 рассчитывает это поражение и применяет правильные действия.Но что следует отправлять на сервер?Просто новая позиция игрока или также поражение?Первый вариант означает, что все остальные клиенты должны выполнять вычисления.Разве это не может вызвать проблемы?Поскольку у меня нет предыдущего опыта сетевого программирования, я немного запутался в том, как все это делать.
Я также читал в другой теме здесь, в Stackoverflow, что RMI может быть лучшим вариантом.Прочитав некоторую информацию об этом, я понимаю, что такое RMI, но я все еще не могу понять, является ли это хорошим вариантом для этого проекта или нет.Любые советы для этого?
Как видите, я немного запутался в том, как начать с сетевой части этого проекта.Я искал некоторые книги по игровому программированию (для Java ofcourse), но ни одна из них не сфокусирована на сетевой части.Я также искал сетевые книги по Java, но, похоже, они сосредоточены на технологии, а не на хороших практиках кода.
Если кто-нибудь знает хорошую книгу или совет по правильному выбору, это будет с благодарностью.
Спасибо