Многопользовательская игра Java - сетевые концепции

Для школьного проекта мы должны создать многопользовательскую игру на Java (она должна быть клиент-серверной), в которую можно будет играть через Интернет (мы программируем это в школе, так что это не домашнее задание ). Игра пошаговая, но должен быть чат, конечно, в реальном времени. Однако ни у кого из нас нет опыта сетевого программирования, и чем больше я читаю об этом, тем больше у меня вопросов.

Моей первой мыслью было использовать API сокетов для реализации многопользовательской части. Сервер ждет новых данных от клиентов. Однако есть несколько типов данных для получения, например сообщения чата, движение и т. Д. Кроме того, после установления соединения с сервером необходимо отправить некоторые исходные данные (например, имя игрока).Сервер должен видеть, какое сообщение он получил, но как? Я думал о создании класса Сообщение со строковым полем типа . Но в моем серверном коде я получу такой код:

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), но ни одна из них не посвящена сетевой части. Я также искал книги по сетевым технологиям Java, но они, похоже, сосредоточены на технологии, а не на хороших методах программирования.

Если кто-нибудь знает хорошую книгу или может дать совет в правильном выборе, он был бы очень признателен.

Спасибо

7
задан Bv202 28 September 2011 в 17:02
поделиться