Fixed error in Java AI networking
authorSam Moore <[email protected]>
Fri, 16 Mar 2012 04:06:50 +0000 (12:06 +0800)
committerSam Moore <[email protected]>
Fri, 16 Mar 2012 04:06:50 +0000 (12:06 +0800)
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.

agents/basic_java/Makefile
agents/basic_java/basic.java

index b058cdf..a904ebd 100644 (file)
@@ -2,12 +2,15 @@
 # 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
 
 clean : 
-       rm *.class
+       rm BasicAI
 
 
index 242e6cb..72b2b90 100644 (file)
@@ -256,18 +256,29 @@ class BasicAI
         */
        private void KillUnit(Piece kill) throws Exception
        {
+               Vector<Piece> removeFrom = null;
                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!");
+                       removeFrom = units;
                }
                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.");
        }
 
        /**

UCC git Repository :: git.ucc.asn.au