作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
本质上我是在使用套接字制作棋盘游戏。每个连接的客户端都存储在一个映射中。
当用户移动到 2D 数组中的某个坐标(即“移动 2,3”)时,它应该将 connectionID 放在该位置。
目前我的问题是,因为我有一个 for 循环;当我使用 move 命令时,连接 ID 会替换为循环中的最后一个值。
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 循环中 map 的最后一个值。
我如何让它根据 map 上的客户端“id”移动?
编辑
在我的服务器中,我有 clients.put(socket.getPort(), connectionID);
以及返回 map 和 ID 的方法。我有一个执行命令的类 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();
在文件中请求
String[] items = line.trim().split("\\s+");
switch (items[0].toUpperCase()) {
case "MOVE":
return new Request(RequestType.MOVE, items[1], items[2], items[3]);
最佳答案
据我了解您的代码,您需要按以下方式进行移动:
public void move(int client, int x, int y) {
storeArray[x][y] = client;
}
其中 client 是 gs.returnClients().values()
列表中的数字之一 (!)。如果您需要将其从该 map 中取出,则需要为此提供适当的 key ,例如:
public void move(int clientId, int x, int y) {
storeArray[x][y] = gs.returnClients().get(clientId);
}
关于java - For 循环映射覆盖以前的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53521547/
我是一名优秀的程序员,十分优秀!