Skip to content
Snippets Groups Projects
Commit 35eb2149 authored by Sam Moore's avatar Sam Moore
Browse files

Fixed bug in Java AI

In KillUnit:
I was using Vector.remove(Object), but I realised that this doesn't compare
references, instead it uses "compareTo". Which meant the AI deleted every unit
as soon as the first one died. Fun.

I discovered gcj, which lets you compile a Java program.
This is much easier than trying to convince the java interpreter to run.
parent 8827bb58
No related merge requests found
......@@ -2,12 +2,16 @@
# Sample C++ Stratego AI
# UCC Programming Competition 2012
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 -f BasicAI
rm -f *.class
......@@ -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.eraseAt(ii);
return;
}
}
throw new Exception("BasicAI.KillUnit - Couldn't find unit in unit list.");
}
/**
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment