@DarkByte2015

Через что реализовать очень простую сетевую игру?

Надо сделать очень простую сетевую игру (крестики-нолики в консоли). Через что будет проще всего сделать сетевое взаимодействие? Может Spring? Не уверен что хочу подключать тут сокеты... С ними больше проблем чем толку. Хочется уровень абстракции.

upd. Мне тут посоветовали еще такие либы: Mina и Netty. Может их попробовать... Погуглил, Mina конечно попроще намного выглядит. Netty немного сложновата.
  • Вопрос задан
  • 1077 просмотров
Пригласить эксперта
Ответы на вопрос 2
jamakasi666
@jamakasi666 Куратор тега Java
Просто IT'шник.
У Вас крайне простая игра крестики-нолики. Получается для сетевой игры нужно передавать следующее:
- Событие новой игры ; //Идентификатор пакета 1
- Событие установки крестика\нолика(int "x" , "y", и к примеру булевой тип isCircle)//Идентификатор пакета 2
- Событие победы. //Идентификатор пакета 3
- Событие ошибки(неверный ход) //Идентификатор пакета 4
Т.е. всего 4 типа данных.
Сетевой пакет можно представить следующим текстовым видом:
"число_идентификатор_типа_пакета;опциональные данные;опциональные данные"
; - делитель(delimiter строки)

Серверная сторона порт=7777:
ServerSocket ss = new ServerSocket(7777); //создали сервер
Socket socket = ss.accept();//Ждем клиента
//Сюда попадаем только когда подключился клиента
DataInputStream in = new DataInputStream(socket.getInputStream(); //Получаем поток ввода
DataOutputStream out = new DataOutputStream(socket.getOutputStream()); //Получаем поток вывода
String line = null;
while(true) {
     line = in.readUTF(); // Тут ждем и получаем строку от клиента
     String[] data = line.split(";"); //Разделяем полученную строку в массив строк
     if(data[0].equals("1")){
     //Сбрасываем уровень начинаем новую игру}
     if(data[0].equals("2")){
     //Ставим крестик\нолик по координатам
     int x =data[1]; int y=data[2];boolean isCircle=data[3] //Не забудь типы привести, ну там Integer.parse(data[номер])
     //Ну возможно отправить ответ клиенту
    out.writeUTF(line); // шлем его же строку обратно чтобы клиент у себя отрисовал фигуру или пакет с ошибкой
    out.flush(); // заканчиваем передачу в поток.
     }
     ....
}


У клиента:
Socket socket = new Socket(InetAddress.getByName("IP сервера"), 7777);  //создаем сокет
DataInputStream in = new DataInputStream(socket.getInputStream(); //Получаем поток ввода
DataOutputStream out = new DataOutputStream(socket.getOutputStream()); //Получаем поток вывода
String line = null;
while(true) {
... тут все аналогично серверу только с правками для клиента
}

Если хочется абстракции то заверни псевдокод выше в свой класс.
Spring вообще не для этих целей служит, в данной задаче это всеравно что забивать гвозди микроскопом.
Для вашей задачи сокеты это какраз то что и нужно изза того что все крайне просто и на глазах Проблем с сокетами тоже никаких быть не может.
Ответ написан
lxsmkv
@lxsmkv
Test automation engineer
"не охота копаться в устройстве велосипеда, возьму танк" :)

java.net.Socket это уже и есть абстракция. Этот API избавляет вас от необходимости разбираться в устройстве сетевых коммуникаций.
так что я за ответ Дмитрий Александров
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы