From b97164f63a37f8a5dee81fad2ee01fb28fce3fce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Zurcher?= Date: Wed, 4 May 2016 12:09:37 +0200 Subject: PathBuilder: add beSmart() : look for a single objective, ... --- .../ch/asynk/rustanddust/engine/PathBuilder.java | 37 +++++++++++++++------- 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/core/src/ch/asynk/rustanddust/engine/PathBuilder.java b/core/src/ch/asynk/rustanddust/engine/PathBuilder.java index 994f07d..0bb5241 100644 --- a/core/src/ch/asynk/rustanddust/engine/PathBuilder.java +++ b/core/src/ch/asynk/rustanddust/engine/PathBuilder.java @@ -21,13 +21,11 @@ public class PathBuilder implements Disposable private Collection paths; private Collection filteredPaths; private IterableSet tiles; - private IterableSet objectives; public PathBuilder(Board board, int tSize, int stSize, int ftSize, int psSize) { this.board = board; this.tiles = new IterableSet(tSize); - this.objectives = new IterableSet(tSize); this.stack = new IterableStack(stSize); this.ctrlTiles = new IterableArray(ftSize); this.paths = new IterableArray(psSize); @@ -78,7 +76,6 @@ public class PathBuilder implements Disposable { for (Path path : this.paths) path.dispose(); this.tiles.clear(); - this.objectives.clear(); this.stack.clear(); this.ctrlTiles.clear(); this.paths.clear(); @@ -115,15 +112,37 @@ public class PathBuilder implements Disposable } else { this.distance = board.distance(from, to); findAllPaths(from, pawn.getMovementPoints(), 0, true); - // for (Tile t : objectives) - // toggleCtrlTile(t, false); + beSmart(); } - // printToErr("paths", paths); + // printToErr("paths", getPaths()); stack.clear(); return getPaths().size(); } + private void beSmart() + { + Tile o = null; + boolean only = true; + for (Tile t : tiles) { + if (t.isObjectiveFor(pawn)) { + if (o == null) + o = t; + else { + only = false; + break; + } + } + } + + if (o == null) + chooseShortest(); + else if (only) { + toggleCtrlTile(o, false); + chooseBest(); + } + } + public int chooseBest() { Collection ps = getPaths(); @@ -225,11 +244,7 @@ public class PathBuilder implements Disposable Orientation o = board.getSide(i); int m = (mvtLeft - next.costFrom(pawn, o)); - int f = fitness; - if (next.isObjectiveFor(pawn)) { - f += 1; - objectives.add(next); - } + int f = (fitness + (next.isObjectiveFor(pawn) ? 1 : 0)); boolean r = (roadMarch && next.roadFrom(o)); int l = (m + (r ? pawn.getRoadMarchBonus() : 0)); -- cgit v1.1-2-g2b99