这是我一直在尝试的方法:
private ArrayList<Location> countFlankCombo(Location start) {
ArrayList<Location> opponentLocation = new ArrayList<>();
Player opponent = players().iterator().next();
for (GridDirection direction : getDirectionToEnemy(start)) {
Location nextPosition = start.getNeighbor(direction);
while (board.get(nextPosition) == opponent && !board.canPlace(nextPosition) && board.isOnGrid(nextPosition)) {
ArrayList<Location> potentialFlankList = new ArrayList<>();
potentialFlankList.add(nextPosition);
nextPosition = nextPosition.getNeighbor(direction);
if (board.get(nextPosition) == getCurrentPlayer()) {
opponentLocation.addAll(potentialFlankList);
break;
}
}
}
return opponentLocation;
}
在上面提到的方法中,我使用了我制作的第二种方法:
private ArrayList<GridDirection> getDirectionToEnemy(Location loc) {
ArrayList<GridDirection> enemyPieceDirection = new ArrayList<>();
for (GridDirection dir : GridDirection.EIGHT_DIRECTIONS) {
Location piece = loc.getNeighbor(dir);
if (!board.canPlace(piece) && board.isOnGrid(piece) && !board.get(piece).equals(getCurrentPlayer())) {
enemyPieceDirection.add(loc.directionTo(piece));
}
}
return enemyPieceDirection;
}
位置类型的输入变量是一个人放置他/她的棋子的瓷砖。
“GridDirection.EIGHTDIRECTION”是一个数组列表,它使我可以从 Location loc 检查网格上的每个方向。(它包含如下值:NORTH、NORTHEAST、EAST、SOUTHEAST...等)
“board.get(nextPosition)”检查“nextPosition”位置上的内容。
“board.isOnGrid(nextPosition)”检查位置是否在棋盘上。
现在我的问题是,当我清楚地有一排我的对手的棋子是这样的。 然后我还是只拿到了第一名,别的什么都没有。 这是我从打印“对手位置”列表中得到的。
而且我不知道为什么它不迭代抛出所有位置并将它们全部添加。