По сути, я делаю настольную игру с использованием сокетов.Каждый подключенный клиент хранится на карте.
Когда пользователь делает перемещение к координате в 2D-массиве, то есть «смещает 2,3», он должен установить в этом положении connectionID.
В настоящее время моя проблема заключается в том, что у меня есть цикл for;когда я использую команду перемещения, идентификатор соединения заменяется на последнее значение в цикле.
public void move(int x, int y) {
for (int value : gs.returnClients().values()) {
storeArray[x][y] = value;
}
}
т.е. если у меня подключено 2 клиента: {62029=1, 62032=2}
и моя доска
[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 1, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 2, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
Допустим, я хочу, чтобы клиент 1 переместился в 0, 3, это должно быть:
[[0, 0, 0, 1, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 1, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 2, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
Но вместо этого я получаю:
[[0, 0, 0, 2, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 1, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 2, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
Поскольку он перезаписывает последнее значениекарта в цикле for.
Как заставить его перемещаться в зависимости от его "id" клиента с карты?
Редактировать
На моем сервере у меня есть clients.put(socket.getPort(), connectionID);
и методы для возврата карты и идентификатора.У меня есть класс GameService
, который выполняет команду, которая
switch (request.type) {
case MOVE:
int clientID = Integer.parseInt(request.params[0]);
int getX = Integer.parseInt(request.params[1]);
int getY = Integer.parseInt(request.params[2]);
game.move(clientID,getX, getY);
return game.returnBoard();
В файле Request
String[] items = line.trim().split("\\s+");
switch (items[0].toUpperCase()) {
case "MOVE":
return new Request(RequestType.MOVE, items[1], items[2], items[3]);