I was using Vector.remove(Object), but I realised that this doesn't compare
references, it calls the "compareTo" method.
See KillUnit
Java AI is still using Buffered IO and so hasn't been tested with the manager
program yet.
# Sample C++ Stratego AI
# UCC Programming Competition 2012
# Sample C++ Stratego AI
# UCC Programming Competition 2012
-BasicAI.class : basic.java Reader.java piece.java
- javac Reader.java
- javac piece.java
- javac basic.java
+BasicAI : basic.java Reader.java piece.java
+ gcj -o BasicAI --main=BasicAI basic.java Reader.java piece.java
+
+#BasicAI.class : basic.java Reader.java piece.java
+# javac Reader.java
+# javac piece.java
+# javac basic.java
*/
private void KillUnit(Piece kill) throws Exception
{
*/
private void KillUnit(Piece kill) throws Exception
{
+ Vector<Piece> removeFrom = null;
if (kill.colour.compareTo(colour) == 0)
{
totalAllies[Piece.Index(kill.rank)] -= 1;
if (kill.colour.compareTo(colour) == 0)
{
totalAllies[Piece.Index(kill.rank)] -= 1;
- if (units.remove(kill) == false)
- throw new Exception("BasicAI.KillUnit - Couldn't remove allied Piece from units Vector!");
}
else if (kill.colour.compareTo(OppositeColour(colour)) == 0)
{
totalEnemies[Piece.Index(kill.rank)] -= 1;
}
else if (kill.colour.compareTo(OppositeColour(colour)) == 0)
{
totalEnemies[Piece.Index(kill.rank)] -= 1;
- if (enemyUnits.remove(kill) == false)
- throw new Exception("BasicAI.KillUnit - Couldn't remove enemy Piece from enemyUnits Vector!");
+ removeFrom = enemyUnits;
+ if (removeFrom == null)
+ throw new Exception("BasicAI.KillUnit - Can't identify unit with colour " + kill.colour + "!");
+
+ for (int ii=0; ii < removeFrom.size(); ++ii)
+ {
+ if (removeFrom.elementAt(ii) == kill)
+ {
+ removeFrom.remove(ii);
+ return;
+ }
+ }
+ throw new Exception("BasicAI.KillUnit - Couldn't find unit in unit list.");