Итак, у меня есть playerID
и numwalls
для каждого игрока в настольной игре, которую я делаю. Прямо сейчас, чтобы удалить стены, когда каждый игрок использует один, каждый в основном разделяет стены.Как уменьшить значение в HashMap?
Итак, я решил, что должен сделать hashmap
в качестве ключа playerID
и numwalls
.
Но я не знаю, как уменьшить значение ключей, когда предполагается использовать стену.
Я покажу свой код, который имеет проблему.
public int getWallsRemaining(int i) {
return numWalls;
}
public void lastMove(PlayerMove playerMove) {
System.out.println("in lastMove... " + playerMove);
/**
* if piece moves, update its position
*/
if(playerMove.isMove() == true){
Integer player = playerMove.getPlayerId();
Coordinate newLoc = new Coordinate(playerMove.getEndRow(), playerMove.getEndCol());
playerHomes.put(player, newLoc);
}
/**
* if a wall is placed, subtract the wall form the player who placed it
* and subtract the appropriate neighbors.
*/
if(playerMove.isMove() == false){
numWalls-=1;
removeNeighbor(playerMove.getStart(), playerMove.getEnd());
}
}
Вот где я инициализировать все, walls
моя карта для того, что я пытаюсь сделать:
private Map<Coordinate, HashSet<Coordinate>> graph;
private int PlayerID;
private int numWalls;
private Map<Integer, Coordinate> playerHomes;
private Map<Integer, Integer> walls;
@Override
public void init(Logger logger, int playerID, int numWalls, Map<Integer, Coordinate> playerHomes) {
this.PlayerID = playerID;
this.walls = new HashMap<Integer, Integer>();
this.numWalls = numWalls;
this.playerHomes = playerHomes;
this.graph = new HashMap<Coordinate, HashSet<Coordinate>>();
walls.put(playerID,numWalls);
for(int r = 0; r <= 10; r++){
for(int c = 0; c <= 10; c++){
HashSet<Coordinate> neighbors = new HashSet<Coordinate>();
if(r > 0){
neighbors.add(new Coordinate(r - 1, c));
}
if(r < 8){
neighbors.add(new Coordinate(r + 1, c));
}
if(c > 0){
neighbors.add(new Coordinate(r, c - 1));
}
if(c < 8){
neighbors.add(new Coordinate(r, c + 1));
}
graph.put((new Coordinate(r,c)), neighbors);
}
}
}
Вы можете увидеть в моем методе lastMove
, что я декремента стены на 1. Это мой проблема. Я хочу уменьшить указанный playerID
numwall
на 1. Что у меня теперь работает только для 1 игрока. Мне нужно это для работы до 4 игроков.
Этот код должен (возможно) быть синхронизирован. Или используйте [AtomicInteger] (http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicInteger.html) в качестве значения. – user949300