When scoring a feature, we can't simply count up the elements in the claim

group list because that may contain the same tile multiple times when
tiles that contain multiple features are included in a single claim group
with both of their features. So we have to do some extra jockeying to
ensure that we count a tile only once.


git-svn-id: https://samskivert.googlecode.com/svn/trunk@436 6335cc39-0255-0410-8fd6-9bcaacd3b74c
This commit is contained in:
mdb
2001-11-07 10:39:00 +00:00
parent 0eb0714926
commit c87ecd0eb3
@@ -1,5 +1,5 @@
//
// $Id: TileUtil.java,v 1.13 2001/10/24 03:24:36 mdb Exp $
// $Id: TileUtil.java,v 1.14 2001/11/07 10:39:00 mdb Exp $
package com.threerings.venison;
@@ -307,10 +307,26 @@ public class TileUtil implements TileCodes
}
// if we're here, it's a road or city feature, which we score by
// loading up the group and counting its size
// loading up the group and counting the number of tiles in it
List flist = new ArrayList();
boolean complete = enumerateGroup(tiles, tile, featureIndex, flist);
int score = flist.size();
// we sort the group which will order the tile feature objects by
// their tiles, ensuring that features on the same tile are next
// to one another, so that we can only count them once
Collections.sort(flist);
// now iterate over the list, counting only unique tiles
int score = 0;
VenisonTile lastTile = null;
int fsize = flist.size();
for (int i = 0; i < fsize; i++) {
TileFeature feat = (TileFeature)flist.get(i);
if (feat.tile != lastTile) {
score++;
lastTile = feat.tile;
}
}
// for city groups, we need to add a bonus of one for every tile
// that contains a shield and mutiply by two if the city is
@@ -598,7 +614,7 @@ public class TileUtil implements TileCodes
}
/** Used to keep track of actual features on tiles. */
protected static final class TileFeature
protected static final class TileFeature implements Comparable
{
/** The tile that contains the feature. */
public VenisonTile tile;
@@ -627,6 +643,12 @@ public class TileUtil implements TileCodes
}
}
/** We sort based on our tiles. */
public int compareTo (Object other)
{
return tile.compareTo(((TileFeature)other).tile);
}
/** Generate a string representation. */
public String toString ()
{