我正在尝试为黑白棋游戏制作一个“flank()”方法但是我不知道如何遍历每一块并在找到我的一块时停止

问题描述

这是我一直在努力实现的方法

    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;
    }

Location 类型的输入变量是放置他/她的棋子的瓷砖。

“GridDirection.EIGHTDIRECTION”是一个数组列表,它使我可以从 Location loc 检查网格上的每个方向。 (它包含以下值:norTH、norTHEAST、EAST、SOUTHEAST...等)

“board.get(nextPosition)”检查“nextPosition”位置上的内容

然后“board.isOnGrid(nextPosition)”检查位置是否在板上。

现在我的问题是,当我清楚地拥有一排对手的棋子时,例如 this. 然后我仍然只得到第一件的位置,没有别的。 Here`s 我从打印“对手位置”列表中得到了什么。

而且我不知道为什么它不迭代抛出所有位置并将它们全部添加

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)