From 8f1bc29230f1af76fe50fd9a3e533a06b7aec33e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Zurcher?= Date: Wed, 1 Oct 2014 12:03:16 +0200 Subject: SearchBoard: add possiblePaths(...) TODO roadMarch support --- .../ch/asynk/tankontank/engine/SearchBoard.java | 53 ++++++++++++++++++++++ 1 file changed, 53 insertions(+) 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 queue; private ArrayDeque roadMarch; + private ArrayDeque path = new ArrayDeque(20); + private List> possiblePaths = new LinkedList>(); + private List moves; private List targets; private List los; @@ -483,4 +486,54 @@ public class SearchBoard return los; } + + public List> 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 temp = new ArrayDeque(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(); + } + } + } + } + } } -- cgit v1.1-2-g2b99