diff options
Diffstat (limited to 'core/src/ch/asynk')
| -rw-r--r-- | core/src/ch/asynk/tankontank/engine/SearchBoard.java | 53 | 
1 files changed, 53 insertions, 0 deletions
| diff --git a/core/src/ch/asynk/tankontank/engine/SearchBoard.java b/core/src/ch/asynk/tankontank/engine/SearchBoard.java index 1ac52bc..a782cb5 100644 --- a/core/src/ch/asynk/tankontank/engine/SearchBoard.java +++ b/core/src/ch/asynk/tankontank/engine/SearchBoard.java @@ -34,6 +34,9 @@ public class SearchBoard      private LinkedList<Node> queue;      private ArrayDeque<Node> roadMarch; +    private ArrayDeque<Node> path = new ArrayDeque<Node>(20); +    private List<ArrayDeque<Node>> possiblePaths = new LinkedList<ArrayDeque<Node>>(); +      private List<Node> moves;      private List<Node> targets;      private List<Node> los; @@ -483,4 +486,54 @@ public class SearchBoard          return los;      } + +    public List<ArrayDeque<Node>> possiblePaths(Pawn pawn, int col0, int row0, int col1, int row1) +    { +        path.clear(); +        possiblePaths.clear(); + +        Node from = getNode(col0, row0); +        Node to = getNode(col1, row1); + +        searchCount += 1; +        // TODO : search +        from.search = searchCount; +        from.remaining = pawn.getMovementPoints(); +        // TODO : roadMarch +        from.roadMarch = true; + +        path.add(from); +        findAllPaths(pawn, from, to); + +        return possiblePaths; +    } + +    private void findAllPaths(Pawn pawn, Node from, Node to) +    { +        Node moves[] = new Node[6]; +        adjacentMoves(from, moves); + +        for(int i = 0; i < 6; i++) { +            Node next = moves[i]; +            if (next != null) { +                Tile t = board.getTile(next.col, next.row); +                boolean road = t.road(sides[i]); +                int r = (from.remaining - t.costFrom(pawn, sides[i], road)); +                if ((r >= 0) && (distance(next, to) <= r)) { +                    if (next == to) { +                        ArrayDeque<Node> temp = new ArrayDeque<Node>(path.size() + 1); +                        temp.add(next); +                        for (Node n: path) +                            temp.add(n); +                        possiblePaths.add(temp); +                    } else { +                        next.remaining = r; +                        path.push(next); +                        findAllPaths(pawn, next, to); +                        path.pop(); +                    } +                } +            } +        } +    }  } | 
