For Loop Map перезаписывает предыдущее значение - PullRequest
0 голосов
/ 28 ноября 2018

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

Когда пользователь делает перемещение к координате в 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]);

1 Ответ

0 голосов
/ 28 ноября 2018

Насколько я понимаю ваш код, вам нужно сделать следующее:

public void move(int client, int x, int y) {
  storeArray[x][y] = client;
}

, где клиент - это один (!) Из номеров в списке gs.returnClients().values().Если вам нужно вынуть его из этой карты, вам необходимо предоставить соответствующий ключ для этого, например:

public void move(int clientId, int x, int y) {
  storeArray[x][y] = gs.returnClients().get(clientId);
}
...