@Override
	public double getHeuristicValue(final AbstractState node,final Game game) {
		if (node == null || !(node instanceof BoardState))
			throw new IllegalArgumentException("node is illegal");
		BoardState s = (BoardState) node;
		List<Point> towerCoordinates = s.getTowerCoordinates();
		// check that the node is legal
		for (Point coord: towerCoordinates)
			if (game.hasTower(coord)
					|| game.getBlockType(coord) != TILE_TYPE.GROUND)
				return -1;
		for ( Tower t : game.getTowers())
			towerCoordinates.add(t.getMapLocation());

		int intersecions = 0;
		for (Path p : game.getRoom().paths) {
			for (Point towerCoord : towerCoordinates) 
				intersecions += pathIntersections(towerCoord, game, p);
		}
		return intersecions;
	}