From ccda60ec75ad2808ef4b508ad86be17d8af22f0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Zurcher?= Date: Thu, 30 Oct 2014 14:10:44 +0100 Subject: Board,SearchBoard: optimize collectPossibleMoves(Pawn, Board.TileCollection) --- core/src/ch/asynk/tankontank/engine/Board.java | 4 +--- core/src/ch/asynk/tankontank/engine/SearchBoard.java | 18 ++++++++---------- 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/core/src/ch/asynk/tankontank/engine/Board.java b/core/src/ch/asynk/tankontank/engine/Board.java index 42b8f23..42fae2e 100644 --- a/core/src/ch/asynk/tankontank/engine/Board.java +++ b/core/src/ch/asynk/tankontank/engine/Board.java @@ -257,9 +257,7 @@ public abstract class Board implements Disposable protected int collectPossibleMoves(Pawn pawn, TileCollection moves) { - Tile from = pawn.getTile(); - Set nodes = searchBoard.possibleMovesFrom(pawn, from.getCol(), from.getRow()); - return moves.fromNodes(nodes); + return searchBoard.possibleMovesFrom(pawn, moves); } protected int collectPossibleTargets(Pawn pawn, PawnCollection targets) diff --git a/core/src/ch/asynk/tankontank/engine/SearchBoard.java b/core/src/ch/asynk/tankontank/engine/SearchBoard.java index a921d2a..e32f586 100644 --- a/core/src/ch/asynk/tankontank/engine/SearchBoard.java +++ b/core/src/ch/asynk/tankontank/engine/SearchBoard.java @@ -42,7 +42,6 @@ public class SearchBoard private LinkedList queue; private ArrayDeque roadMarch; - private Set moves; private List targets; private List los; @@ -76,7 +75,6 @@ public class SearchBoard this.stack = new ArrayDeque(20); this.roadMarch = new ArrayDeque(5); - this.moves = new LinkedHashSet(40); this.targets = new ArrayList(10); this.los = new ArrayList(10); @@ -152,10 +150,10 @@ public class SearchBoard a[5] = getNode((src.col - 1), (src.row - 1)); } - public Set possibleMovesFrom(Pawn pawn, int col, int row) + public int possibleMovesFrom(Pawn pawn, Board.TileCollection moves) { - searchCount += 1; moves.clear(); + searchCount += 1; Node adjacents[] = new Node[6]; @@ -166,7 +164,7 @@ public class SearchBoard from.roadMarch = true; if (from.remaining <= 0) - return moves; + return moves.size(); int roadMarchBonus = pawn.getRoadMarchBonus(); boolean first = true; @@ -203,7 +201,7 @@ public class SearchBoard dst.parent = src; dst.roadMarch = roadMarch; stack.push(dst); - moves.add(dst); + moves.add(getTile(dst)); } } else { dst.search = searchCount; @@ -212,7 +210,7 @@ public class SearchBoard dst.remaining = r; dst.roadMarch = roadMarch; stack.push(dst); - moves.add(dst); + moves.add(getTile(dst)); } else { dst.parent = null; dst.remaining = -1; @@ -245,7 +243,7 @@ public class SearchBoard dst.parent = src; dst.roadMarch = true; roadMarch.push(dst); - moves.add(dst); + moves.add(getTile(dst)); } } else { dst.search = searchCount; @@ -254,7 +252,7 @@ public class SearchBoard dst.remaining = r; dst.roadMarch = true; roadMarch.push(dst); - moves.add(dst); + moves.add(getTile(dst)); } else { dst.parent = null; dst.remaining = -1; @@ -264,7 +262,7 @@ public class SearchBoard } } - return moves; + return moves.size(); } private void adjacentTargets(Node src, int angle, Node a[]) -- cgit v1.1-2-g2b99