http://robowiki.net/w/api.php?action=feedcontributions&user=RobertWalker&feedformat=atomRobowiki - User contributions [en]2024-03-29T07:52:46ZUser contributionsMediaWiki 1.34.1http://robowiki.net/w/index.php?title=PluggableRobot&diff=35963PluggableRobot2016-05-13T17:21:13Z<p>RobertWalker: PluggableRobot getting overhauled</p>
<hr />
<div>{{Infobox Robot<br />
| name = PluggableRobot<br />
| author = [[RobertWalker]]<br />
| extends = [[AdvancedRobot]]<br />
| released = September 21, 2007<br />
| current_version = 2.0 alpha<br />
| license = [[RWLPCL]]<br />
| source_link = http://robowiki.net/wiki/PluggableRobot/Source<br />
| isOpenSource = true<br />
}}<br />
<br />
== Info ==<br />
; What's special about it?<br />
: It's not a standalone robot, really, but a base robot which you can extend. It provides a pluggable architecture and sophisticated event management. I developed it in parallel with my robot that is based on it, [[RabidWombat]].<br />
<br />
; How competitive is it?<br />
: That's up to you! You extend it to make it whatever you want it to be.<br />
<br />
; How does it [[Movement|move]]? How does it fire? How does the [[Melee|melee]] strategy differ from [[OneOnOne|one-on-one]] strategy? What does it save between rounds and matches?<br />
: It's just an architecture upon which a robot can be built. Without extension, it's pretty much indistinguishable from [[SittingDuck]].<br />
<br />
; Where did you get the name?<br />
: It's a robot design for a pluggable architecture. [[PluggableRobot]] made sense.<br />
<br />
; Can I use your code?<br />
: Sure, [[PluggableRobot/Source|help yourself to the source code]]. I would like to be able to make this into a JAR that can just be dropped into another project, but Robocode doesn't seem to let you do this in development mode. :(<br />
<br />
; What's next for your robot?<br />
: Since the last time I touched Robocode, Java annotations have become a thing. So I'm currently overhaulting PluggableRobot so that event management is done through annotation-based registration instead of formal listener interfaces. This should vastly simplify things.<br />
<br />
; Does it have any [[White Whale|white whales]]?<br />
: Since it doesn't fight on its own, no.<br />
<br />
== Usage ==<br />
Extending PluggableRobot allows you to create reusable components to control the robot's behavior. There are three types of pluggable objects: listeners, components and painters. An object can be one or all three of these types.<br />
* '''Listeners:''' Every Robocode event has a corresponding listener interface in PluggableRobot. Any object that wishes to be notified of an event needs only implement the corresponding interface and register itself with the bot by calling PluggableRobot.registerListener(). PluggableRobot gives much better control over the order in which notifications are given; listeners are notified of events in the order that they are registered, and each listener gets the events in the order that the corresponding listener interfaces are declared. Listeners should not perform any blocking actions in their event handling methods; that's the job of components.<br />
* '''Components:''' Components are where the robot actually does stuff. Any object that wishes to have a chance to act in the execution loop should extend the Component class, implement the go() method, and register itself with the robot by calling PluggableRobot.registerComponent(). PluggableRobot will call go() on each component in the order they were registered, after all the events have been processed. This separation between listeners and components ensures that when it's time for the robot to act, it has all the intel available.<br />
* '''Painters:''' Objects which implement Hud.Painter and register themselves via the PluggableRobot.registerPainter() method will have their paint() methods invoked when it's time to paint debug graphics. Painters will get a reference to a Canvas object, an object similar to Graphics2D, but with some convenience methods and which accepts doubles for many arguments where Graphics2D requires ints.<br />
<br />
== Credits ==<br />
It wouldn't be totally accurate to say that PluggableRobot is an original creation. Though it's not directly based on any other bots, I've culled some ideas from the wiki. Most of the discussions useful to PluggableRobot have not yet been migrated from the old wiki, though.<br />
<br />
[[Category:Bots|PluggableRobot]]<br />
[[Category:Open Source Bots|PluggableRobot]]<br />
<br />
__NOTOC__ __NOEDITSECTION__</div>RobertWalkerhttp://robowiki.net/w/index.php?title=RabidWombat&diff=35962RabidWombat2016-05-13T17:17:40Z<p>RobertWalker: RabidWombat getting a rewrite</p>
<hr />
<div>{{Infobox Robot<br />
| image = RabidWombat.jpg<br />
| name = RabidWombat<br />
| author = [[RobertWalker]]<br />
| extends = [[PluggableRobot]]<br />
| targeting = [[VirtualGuns|Virtual gun array]]:<br />
:[[HeadOnTargeting|head-on]]<br />
:[[LinearTargeting|linear]]<br />
:[[CircularTargeting|circular]]<br />
:[[GuessFactor|guess factor]]<br />
| movement = [[AntiGravityMovement|antigravity]]<br />
| license = no license selected yet<br />
| isOneOnOne = true<br />
| isMelee = false<br />
| isOpenSource = false<br />
}}<br />
== Release Notes ==<br />
* Version 0.7.1<br />
** Removed MyRules class<br />
** Updated movement code to better handle equilibrium states<br />
* Version 0.7<br />
** Initial release on [[RoboRumble]]<br />
<br />
== Background Info ==<br />
; What's special about it?<br />
: Nothing, particularly. Just another bot.<br />
<br />
; Great, I want to try it. Where can I download it?<br />
: I'm currently rewriting RabidWombat, so he's not available for download at the moment. I'll put it back out there when my rewrite is complete.<br />
<br />
; How competitive is it?<br />
: It's okay. It lands in the middle of the pack in the [[RoboRumble]].<br />
<br />
== Strategy ==<br />
; How does it [[Movement|move]]?<br />
: It uses a variation of [[AntiGravityMovement|antigravity movement]]. The enemy robot exerts an attractive or repulsive force on RabidWombat, depending on how far away it is, in order to maintain a particular distance from the enemy. (It's pretty much working on [http://en.wikipedia.org/wiki/Hooke%27s_Law Hooke's law].) That distance grows if RabidWombat is losing and shrinks if it's winning, so that it'll run away or close in for the kill as appropriate. Walls exert a repulsive force when RabidWombat gets close enough to them, which gets stronger the closer it is. Bullet dodging is also done with force vectors (see below).<br />
<br />
; How does it fire?<br />
: It has a virtual gun array containing (currently) a [[HeadOnTargeting|head-on targeting gun]], a [[LinearTargeting|linear targeting gun]], a [[CircularTargeting|circular targeting gun]] and a [[GuessFactor|guess factor gun]]. (I suppose the linear targeting gun is probably redundant.) It fires [[Waves|waves]] (for guess factor targeting) and [[VirtualBullets|virtual bullets]] (for tracking the success of the various guns) every turn and fires the real bullets with the best gun. Stats decay over time so that it will adapt more readily to changes in enemy behavior. I might add a [[PatternMatching|pattern matching gun]] to the array.<br />
<br />
; How does it [[DodgingBullets|dodge bullets]]?<br />
: For the moment, it assumes that the opponent is using [[HeadOnTargeting|head-on targeting]], then creates a force vector which is perpendicular to the presumed bullet's flight path so that it will run away from the bullet. I'm still somewhat undecided on the final bullet dodging strategy.<br />
<br />
; What does it save between rounds and matches?<br />
: Currently, it saves gun accuracy, guess factor and energy stats between rounds and nothing between matches.<br />
<br />
== Additional Info ==<br />
; Where did you get the name?<br />
: It sounded cool. Its initials happening to be RW didn't hurt, either.<br />
<br />
; Can I use your code?<br />
: Yes, although I haven't applied a license yet, it really doesn't bother me if someone wants to adapt the code for their own purposes, as long as you credit me.<br />
<br />
; What's next for your robot?<br />
: Here's the to-do list:<br />
* Finish re-write<br />
* Figure out why it's not always shooting where it thinks it is<br />
* Improve bullet dodging<br />
* Add a pattern matching gun<br />
* Take wall bumping into account for virtual gun calculations<br />
* Weight virtual gun stats based on hit probability<br />
* Segment statistics<br />
* Tweak, tweak, tweak... <br />
<br />
; Does it have any [[White Whale|white whales]]?<br />
: For now, I've been pitting RabidWombat against [[SpareParts]], with good results.<br />
<br />
== Credits ==<br />
[[PluggableRobot]] was developed in parallel to support RabidWombat, so look there for some credits. Other than that, it wasn't directly based on any other robot, although I've culled many ideas from the wiki. I'm trying to be good about giving attribution in the source, and when I get some time I'll transfer them to the wiki.<br />
<br />
[[Category:Bots|RabidWombat]]<br />
[[Category:1-vs-1 Bots|RabidWombat]]<br />
[[Category:MegaBots|RabidWombat]]<br />
<br />
__NOTOC__ __NOEDITSECTION__</div>RobertWalkerhttp://robowiki.net/w/index.php?title=RoboTweaker&diff=35961RoboTweaker2016-05-13T17:00:06Z<p>RobertWalker: /* Example */ Typo</p>
<hr />
<div>'''RoboTweaker''' is a tool currently under development by [[RobertWalker]] to help you optimize your bot's performance. It's not currently available, but below is a description of how it is intended to work.<br />
<br />
== Example ==<br />
Let's say you have the following constant declared in your bot:<br />
<br />
<syntaxhighlight>private static final double FIRE_POWER = 3.0;</syntaxhighlight><br />
<br />
After reading the [[Selecting Fire Power]] article on RoboWiki, you begin to wonder whether it might not be a good idea to experiment with the amount of energy you pour into each shot. You could tweak the FIRE_POWER constant, run your bot, and repeat until you zero in on a good value; but RoboTweaker can do that grunt work for you.<br />
<br />
The first task is to convert your constants so that they read values from the system properties. I'm providing the [[RoboTweaker/Props.java|Props class]] here to facilitate this. Using this class, you can change the FIRE_POWER constant to look like this:<br />
<br />
<syntaxhighlight>private static final Props PROPS = new Props("myname.mybot");<br />
private static final double FIRE_POWER = PROPS.get("firePower", 3.0);</syntaxhighlight><br />
<br />
This means that now you can alter the amount of energy your robot uses when it shoots by setting the myname.mybot.firePower system property. RoboTweaker automates the process of trying many different values for a property and running battles for each. At its most basic level, you can directly use the BattleRunner class like this:<br />
<br />
<syntaxhighlight>import rjw.robotweaker.*;<br />
import java.util.Iterator;<br />
<br />
public class Test {<br />
public static final void main(String[] args) {<br />
DoubleTweak tweak = new DoubleTweak("myname.mybot.firePower", 0.1, 3.0, 0.1);<br />
<br />
for (Iterator<Void> iter = tweak.iterator(); iter.hasNext(); ) {<br />
System.out.println();<br />
System.out.println(iter);<br />
iter.next();<br />
new BattleRunner("C:\\robocode")<br />
.rounds(100)<br />
.addRobots("myname.mybot*", "sample.Crazy")<br />
.go();<br />
}<br />
}<br />
}</syntaxhighlight><br />
<br />
Objects which implement the Tweak interface define properties that can be tweaked. In this case, it's a double value, which we want to start at 0.1 and end at 3.0, incrementing by 0.1 each time. We then pit our bot against sample.Crazy with 100 rounds per battle. The DoubleTweak class sets the system property through each iteration, then BattleRunner will execute the battle. Eventually, I'll provide the ability to provide custom handlers for analyzing the results, but as it currently stands BattleRunner dumps the results to the console, allowing you to see what happened at each setting.<br />
<br />
== Future Plans ==<br />
* Execute tweak runs from a configuration file so that you don't have to write any code to use RoboTweaker.<br />
* Provide a mechanism to use results listeners instead of just dumping to the console.<br />
* Create a results listener that will provide fancy charts.<br />
* Create a results listener to dump the data to CSV for further analysis.<br />
* Create a mechanism that will allow you to tweak multiple properties at once and run battles for all permutations.<br />
* If more than two robots are specified to participate, provide an option to either select one robot and have all the others go one-on-one with it, or put them all together in a single melee battle.</div>RobertWalkerhttp://robowiki.net/w/index.php?title=RoboTweaker/Props.java&diff=35960RoboTweaker/Props.java2016-05-13T16:57:53Z<p>RobertWalker: Moved source for Props.java to its own page</p>
<hr />
<div><syntaxhighlight>import java.lang.reflect.Method;<br />
<br />
/**<br />
* Reads values from system properties and coerces them to various types. If a property is null, the<br />
* indicated default value will be returned instead. This is useful for allowing your robot's<br />
* constants to be overridden, and this mechanism is used in RoboTweaker for automated testing of a<br />
* range of values. This object is intended to be stored statically for use throughout your robot.<br />
* <br />
* All keys provided to get() methods will have a prefix applied to them. This prefix is specified<br />
* in the constructor, and it is suggested that you use your robot's name as the prefix.<br />
* <br />
* Example: Say your robot named me.MyRobot has the following constant:<br />
* <br />
* private static final double FIRE_POWER = 3.0;<br />
* <br />
* After reading the Selecting Fire Power article on RoboWiki, you begin to wonder whether it might<br />
* not be a good idea to experiment with the amount of energy you pour into each shot. To allow you<br />
* to modify this constant without having to change your code each time, you can change it to look<br />
* like this:<br />
* <br />
* private static final Props PROPS = new Props("me.MyRobot");<br />
* private static final double FIRE_POWER = PROPS.get("firePower", 3.0);<br />
* <br />
* This will cause your robot to check for a system property named "me.MyRobot.firePower". If it<br />
* exists, it will be coerced to a double, and FIRE_POWER will be set to that value. If it doesn't<br />
* exist, it will fall back to the specified default value, 3.0.<br />
* <br />
* You can now use an automated tool such as RoboTweaker to test various values for FIRE_POWER and<br />
* find out what works best for your robot.<br />
*/<br />
public class Props {<br />
private String prefix;<br />
<br />
public Props(String prefix) {<br />
this.prefix = prefix + ".";<br />
}<br />
<br />
public boolean get(String key, boolean def) {<br />
String value = get(key);<br />
return value != null ? Boolean.parseBoolean(value) : def;<br />
}<br />
<br />
public int get(String key, int def) {<br />
String value = get(key);<br />
return value != null ? Integer.parseInt(value) : def;<br />
}<br />
<br />
public long get(String key, long def) {<br />
String value = get(key);<br />
return value != null ? Long.parseLong(value) : def;<br />
}<br />
<br />
public float get(String key, float def) {<br />
String value = get(key);<br />
return value != null ? Float.parseFloat(value) : def;<br />
}<br />
<br />
public double get(String key, double def) {<br />
String value = get(key);<br />
return value != null ? Double.parseDouble(value) : def;<br />
}<br />
<br />
@SuppressWarnings("unchecked")<br />
public <T extends Enum<?>> T get(String key, Class<T> enumClass, T def) {<br />
String value = get(key);<br />
<br />
if (value != null) {<br />
try {<br />
Method method = enumClass.getMethod("name", String.class);<br />
return (T) method.invoke(null, key);<br />
} catch (ReflectiveOperationException ex) {<br />
throw new RuntimeException(ex);<br />
}<br />
}<br />
<br />
return def;<br />
}<br />
<br />
public String get(String key, String def) {<br />
return System.getProperty(prefix + key, def);<br />
}<br />
<br />
private String get(String key) {<br />
return System.getProperty(prefix + key);<br />
}<br />
}</syntaxhighlight></div>RobertWalkerhttp://robowiki.net/w/index.php?title=RoboTweaker&diff=35959RoboTweaker2016-05-13T16:43:27Z<p>RobertWalker: Moving Props.java to a separate page</p>
<hr />
<div>'''RoboTweaker''' is a tool currently under development by [[RobertWalker]] to help you optimize your bot's performance. It's not currently available, but below is a description of how it is intended to work.<br />
<br />
== Example ==<br />
Let's say you have the following constant declared in your bot:<br />
<br />
<syntaxhighlight>private static final double FIRE_POWER = 3.0;</syntaxhighlight><br />
<br />
After reading the [[Selecting Fire Power]] article on RoboWiki, you begin to wonder whether it might not be a good idea to experiment with the amount of energy you pour into each shot. You could tweak the FIRE_POWER constant, run your bot, and repeat until you zero in on a good value; but RoboTweaker can do that grunt work for you.<br />
<br />
The first task is to convert your constants so that they read values from the system properties. I'm providing the [[RoboTweaker/Props.java|Props class]] here to facilitate this. Using this class, you can change the FIRE_POWER constant to look like this:<br />
<br />
<syntaxhighlight>private static final Props PROPS = new Props("myname.mybot");<br />
private static final double FIRE_POWER = PROPS.get("firePower", 30.0);</syntaxhighlight><br />
<br />
This means that now you can alter the amount of energy your robot uses when it shoots by setting the myname.mybot.firePower system property. RoboTweaker automates the process of trying many different values for a property and running battles for each. At its most basic level, you can directly use the BattleRunner class like this:<br />
<br />
<syntaxhighlight>import rjw.robotweaker.*;<br />
import java.util.Iterator;<br />
<br />
public class Test {<br />
public static final void main(String[] args) {<br />
DoubleTweak tweak = new DoubleTweak("myname.mybot.firePower", 0.1, 3.0, 0.1);<br />
<br />
for (Iterator<Void> iter = tweak.iterator(); iter.hasNext(); ) {<br />
System.out.println();<br />
System.out.println(iter);<br />
iter.next();<br />
new BattleRunner("C:\\robocode")<br />
.rounds(100)<br />
.addRobots("myname.mybot*", "sample.Crazy")<br />
.go();<br />
}<br />
}<br />
}</syntaxhighlight><br />
<br />
Objects which implement the Tweak interface define properties that can be tweaked. In this case, it's a double value, which we want to start at 0.1 and end at 3.0, incrementing by 0.1 each time. We then pit our bot against sample.Crazy with 100 rounds per battle. The DoubleTweak class sets the system property through each iteration, then BattleRunner will execute the battle. Eventually, I'll provide the ability to provide custom handlers for analyzing the results, but as it currently stands BattleRunner dumps the results to the console, allowing you to see what happened at each setting.<br />
<br />
== Future Plans ==<br />
* Execute tweak runs from a configuration file so that you don't have to write any code to use RoboTweaker.<br />
* Provide a mechanism to use results listeners instead of just dumping to the console.<br />
* Create a results listener that will provide fancy charts.<br />
* Create a results listener to dump the data to CSV for further analysis.<br />
* Create a mechanism that will allow you to tweak multiple properties at once and run battles for all permutations.<br />
* If more than two robots are specified to participate, provide an option to either select one robot and have all the others go one-on-one with it, or put them all together in a single melee battle.</div>RobertWalkerhttp://robowiki.net/w/index.php?title=RoboTweaker&diff=35958RoboTweaker2016-05-13T05:21:56Z<p>RobertWalker: /* Future Plans */ One-on-one vs. melee?</p>
<hr />
<div>'''RoboTweaker''' is a tool currently under development by [[RobertWalker]] to help you optimize your bot's performance. It's not currently available, but below is a description of how it is intended to work.<br />
<br />
== Example ==<br />
Let's say you have the following constant declared in your bot:<br />
<br />
<syntaxhighlight>private static final double FIRE_POWER = 3.0;</syntaxhighlight><br />
<br />
After reading the [[Selecting Fire Power]] article on RoboWiki, you begin to wonder whether it might not be a good idea to experiment with the amount of energy you pour into each shot. You could tweak the FIRE_POWER constant, run your bot, and repeat until you zero in on a good value; but RoboTweaker can do that grunt work for you.<br />
<br />
The first task is to convert your constants so that they read values from the system properties. Below is a class that can facilitate this:<br />
<br />
<syntaxhighlight>import java.lang.reflect.Method;<br />
<br />
public class Props {<br />
private String prefix;<br />
<br />
public Props(String prefix) {<br />
this.prefix = prefix + ".";<br />
}<br />
<br />
public boolean get(String key, boolean def) {<br />
String value = get(key);<br />
return value != null ? Boolean.parseBoolean(value) : def;<br />
}<br />
<br />
public int get(String key, int def) {<br />
String value = get(key);<br />
return value != null ? Integer.parseInt(value) : def;<br />
}<br />
<br />
public long get(String key, long def) {<br />
String value = get(key);<br />
return value != null ? Long.parseLong(value) : def;<br />
}<br />
<br />
public double get(String key, double def) {<br />
String value = get(key);<br />
return value != null ? Double.parseDouble(value) : def;<br />
}<br />
<br />
@SuppressWarnings("unchecked")<br />
public <T extends Enum<?>> T get(String key, Class<T> enumClass, T def) {<br />
String value = get(key);<br />
<br />
if (value != null) {<br />
try {<br />
Method method = enumClass.getMethod("name", String.class);<br />
return (T) method.invoke(null, key);<br />
} catch (ReflectiveOperationException ex) {<br />
throw new RuntimeException(ex);<br />
}<br />
}<br />
<br />
return def;<br />
}<br />
<br />
public String get(String key, String def) {<br />
return System.getProperty(prefix + key, def);<br />
}<br />
<br />
private String get(String key) {<br />
return System.getProperty(prefix + key);<br />
}<br />
}</syntaxhighlight><br />
<br />
Now you can write this:<br />
<br />
<syntaxhighlight>private static final Props PROPS = new Props("myname.mybot");<br />
private static final double FIRE_POWER = PROPS.get("firePower", 30.0);</syntaxhighlight><br />
<br />
This means that now you can alter the amount of energy your robot uses when it shoots by setting the myname.mybot.firePower system property. RoboTweaker automates the process of trying many different values for a property and running battles for each. At its most basic level, you can directly use the BattleRunner class like this:<br />
<br />
<syntaxhighlight>import rjw.robotweaker.*;<br />
import java.util.Iterator;<br />
<br />
public class Test {<br />
public static final void main(String[] args) {<br />
DoubleTweak tweak = new DoubleTweak("myname.mybot.firePower", 0.1, 3.0, 0.1);<br />
<br />
for (Iterator<Void> iter = tweak.iterator(); iter.hasNext(); ) {<br />
System.out.println();<br />
System.out.println(iter);<br />
iter.next();<br />
new BattleRunner("C:\\robocode")<br />
.rounds(100)<br />
.addRobots("myname.mybot*", "sample.Crazy")<br />
.go();<br />
}<br />
}<br />
}</syntaxhighlight><br />
<br />
Objects which implement the Tweak interface define properties that can be tweaked. In this case, it's a double value, which we want to start at 0.1 and end at 3.0, incrementing by 0.1 each time. We then pit our bot against sample.Crazy with 100 rounds per battle. The DoubleTweak class sets the system property through each iteration, then BattleRunner will execute the battle. Eventually, I'll provide the ability to provide custom handlers for analyzing the results, but as it currently stands BattleRunner dumps the results to the console, allowing you to see what happened at each setting.<br />
<br />
== Future Plans ==<br />
* Execute tweak runs from a configuration file so that you don't have to write any code to use RoboTweaker.<br />
* Provide a mechanism to use results listeners instead of just dumping to the console.<br />
* Create a results listener that will provide fancy charts.<br />
* Create a results listener to dump the data to CSV for further analysis.<br />
* Create a mechanism that will allow you to tweak multiple properties at once and run battles for all permutations.<br />
* If more than two robots are specified to participate, provide an option to either select one robot and have all the others go one-on-one with it, or put them all together in a single melee battle.</div>RobertWalkerhttp://robowiki.net/w/index.php?title=Thread:Talk:RoboTweaker/A_better_way_than_using_system_properties%3F&diff=35956Thread:Talk:RoboTweaker/A better way than using system properties?2016-05-13T05:18:04Z<p>RobertWalker: New thread: A better way than using system properties?</p>
<hr />
<div>The current mechanism I'm using to permit RoboTweaker to set tweak values on a robot is to have the robot load them from system properties. This works fine, but has a fundamental problem: it makes it so that I cannot easily speed things up by running multiple battles simultaneously. (I could theoretically wait for the first round to complete, then assume that all classes using these values have been loaded, then go ahead and fire up the next one.) Writing a properties file in the robot's data directory to be read by the robot runs up against the same issue. What would be good would be if I could find a way to set these values that would be scoped to the RobocodeEngine instance in question. Any ideas?</div>RobertWalkerhttp://robowiki.net/w/index.php?title=Talk:RoboTweaker&diff=35957Talk:RoboTweaker2016-05-13T05:18:04Z<p>RobertWalker: Talk page autocreated when first thread was posted</p>
<hr />
<div></div>RobertWalkerhttp://robowiki.net/w/index.php?title=User:RobertWalker&diff=35955User:RobertWalker2016-05-12T18:50:11Z<p>RobertWalker: /* .plan */ Grammar</p>
<hr />
<div>== Background ==<br />
I'm (current year - 1977) years old and work as a software developer in Salt Lake City, Utah. Started robocoding in 2007 after a co-worker suggested having a Robocode tournament at work after a long, painful software release cycle. Apparently, I was more interested than the rest of the company; the bot I built (and am still working on in my copious spare time) seems to have scared everyone else off.<br />
<br />
== My bots ==<br />
* '''[[PluggableRobot]]''': A robot framework that provides a pluggable architecture and sophisticated [[Event Management|event management]].<br />
* '''[[RabidWombat]]''': My first robot, built on top of the [[PluggableRobot]] framework. A bit too rough yet to release into the wild.<br />
<br />
== .plan ==<br />
So after not touching Robocode for a while, I'm diving back in, authoring a rewrite of [[RabidWombat]]. I'm also creating a tool called [[RoboTweaker]] which allows you to test out tweaks to values controlling your robot's behavior.<br />
<br />
[[Category:Bot Authors|RobertWalker]]</div>RobertWalkerhttp://robowiki.net/w/index.php?title=RoboTweaker&diff=35954RoboTweaker2016-05-12T18:36:36Z<p>RobertWalker: /* Example */ Grammar fix</p>
<hr />
<div>'''RoboTweaker''' is a tool currently under development by [[RobertWalker]] to help you optimize your bot's performance. It's not currently available, but below is a description of how it is intended to work.<br />
<br />
== Example ==<br />
Let's say you have the following constant declared in your bot:<br />
<br />
<syntaxhighlight>private static final double FIRE_POWER = 3.0;</syntaxhighlight><br />
<br />
After reading the [[Selecting Fire Power]] article on RoboWiki, you begin to wonder whether it might not be a good idea to experiment with the amount of energy you pour into each shot. You could tweak the FIRE_POWER constant, run your bot, and repeat until you zero in on a good value; but RoboTweaker can do that grunt work for you.<br />
<br />
The first task is to convert your constants so that they read values from the system properties. Below is a class that can facilitate this:<br />
<br />
<syntaxhighlight>import java.lang.reflect.Method;<br />
<br />
public class Props {<br />
private String prefix;<br />
<br />
public Props(String prefix) {<br />
this.prefix = prefix + ".";<br />
}<br />
<br />
public boolean get(String key, boolean def) {<br />
String value = get(key);<br />
return value != null ? Boolean.parseBoolean(value) : def;<br />
}<br />
<br />
public int get(String key, int def) {<br />
String value = get(key);<br />
return value != null ? Integer.parseInt(value) : def;<br />
}<br />
<br />
public long get(String key, long def) {<br />
String value = get(key);<br />
return value != null ? Long.parseLong(value) : def;<br />
}<br />
<br />
public double get(String key, double def) {<br />
String value = get(key);<br />
return value != null ? Double.parseDouble(value) : def;<br />
}<br />
<br />
@SuppressWarnings("unchecked")<br />
public <T extends Enum<?>> T get(String key, Class<T> enumClass, T def) {<br />
String value = get(key);<br />
<br />
if (value != null) {<br />
try {<br />
Method method = enumClass.getMethod("name", String.class);<br />
return (T) method.invoke(null, key);<br />
} catch (ReflectiveOperationException ex) {<br />
throw new RuntimeException(ex);<br />
}<br />
}<br />
<br />
return def;<br />
}<br />
<br />
public String get(String key, String def) {<br />
return System.getProperty(prefix + key, def);<br />
}<br />
<br />
private String get(String key) {<br />
return System.getProperty(prefix + key);<br />
}<br />
}</syntaxhighlight><br />
<br />
Now you can write this:<br />
<br />
<syntaxhighlight>private static final Props PROPS = new Props("myname.mybot");<br />
private static final double FIRE_POWER = PROPS.get("firePower", 30.0);</syntaxhighlight><br />
<br />
This means that now you can alter the amount of energy your robot uses when it shoots by setting the myname.mybot.firePower system property. RoboTweaker automates the process of trying many different values for a property and running battles for each. At its most basic level, you can directly use the BattleRunner class like this:<br />
<br />
<syntaxhighlight>import rjw.robotweaker.*;<br />
import java.util.Iterator;<br />
<br />
public class Test {<br />
public static final void main(String[] args) {<br />
DoubleTweak tweak = new DoubleTweak("myname.mybot.firePower", 0.1, 3.0, 0.1);<br />
<br />
for (Iterator<Void> iter = tweak.iterator(); iter.hasNext(); ) {<br />
System.out.println();<br />
System.out.println(iter);<br />
iter.next();<br />
new BattleRunner("C:\\robocode")<br />
.rounds(100)<br />
.addRobots("myname.mybot*", "sample.Crazy")<br />
.go();<br />
}<br />
}<br />
}</syntaxhighlight><br />
<br />
Objects which implement the Tweak interface define properties that can be tweaked. In this case, it's a double value, which we want to start at 0.1 and end at 3.0, incrementing by 0.1 each time. We then pit our bot against sample.Crazy with 100 rounds per battle. The DoubleTweak class sets the system property through each iteration, then BattleRunner will execute the battle. Eventually, I'll provide the ability to provide custom handlers for analyzing the results, but as it currently stands BattleRunner dumps the results to the console, allowing you to see what happened at each setting.<br />
<br />
== Future Plans ==<br />
* Execute tweak runs from a configuration file so that you don't have to write any code to use RoboTweaker.<br />
* Provide a mechanism to use results listeners instead of just dumping to the console.<br />
* Create a results listener that will provide fancy charts.<br />
* Create a results listener to dump the data to CSV for further analysis.<br />
* Create a Tweak implementation that will allow you to tweak multiple properties at once and run battles for all permutations.</div>RobertWalkerhttp://robowiki.net/w/index.php?title=RoboTweaker&diff=35953RoboTweaker2016-05-12T18:36:14Z<p>RobertWalker: RoboTweaker</p>
<hr />
<div>'''RoboTweaker''' is a tool currently under development by [[RobertWalker]] to help you optimize your bot's performance. It's not currently available, but below is a description of how it is intended to work.<br />
<br />
== Example ==<br />
Let's say you the following constant declared in your bot:<br />
<br />
<syntaxhighlight>private static final double FIRE_POWER = 3.0;</syntaxhighlight><br />
<br />
After reading the [[Selecting Fire Power]] article on RoboWiki, you begin to wonder whether it might not be a good idea to experiment with the amount of energy you pour into each shot. You could tweak the FIRE_POWER constant, run your bot, and repeat until you zero in on a good value; but RoboTweaker can do that grunt work for you.<br />
<br />
The first task is to convert your constants so that they read values from the system properties. Below is a class that can facilitate this:<br />
<br />
<syntaxhighlight>import java.lang.reflect.Method;<br />
<br />
public class Props {<br />
private String prefix;<br />
<br />
public Props(String prefix) {<br />
this.prefix = prefix + ".";<br />
}<br />
<br />
public boolean get(String key, boolean def) {<br />
String value = get(key);<br />
return value != null ? Boolean.parseBoolean(value) : def;<br />
}<br />
<br />
public int get(String key, int def) {<br />
String value = get(key);<br />
return value != null ? Integer.parseInt(value) : def;<br />
}<br />
<br />
public long get(String key, long def) {<br />
String value = get(key);<br />
return value != null ? Long.parseLong(value) : def;<br />
}<br />
<br />
public double get(String key, double def) {<br />
String value = get(key);<br />
return value != null ? Double.parseDouble(value) : def;<br />
}<br />
<br />
@SuppressWarnings("unchecked")<br />
public <T extends Enum<?>> T get(String key, Class<T> enumClass, T def) {<br />
String value = get(key);<br />
<br />
if (value != null) {<br />
try {<br />
Method method = enumClass.getMethod("name", String.class);<br />
return (T) method.invoke(null, key);<br />
} catch (ReflectiveOperationException ex) {<br />
throw new RuntimeException(ex);<br />
}<br />
}<br />
<br />
return def;<br />
}<br />
<br />
public String get(String key, String def) {<br />
return System.getProperty(prefix + key, def);<br />
}<br />
<br />
private String get(String key) {<br />
return System.getProperty(prefix + key);<br />
}<br />
}</syntaxhighlight><br />
<br />
Now you can write this:<br />
<br />
<syntaxhighlight>private static final Props PROPS = new Props("myname.mybot");<br />
private static final double FIRE_POWER = PROPS.get("firePower", 30.0);</syntaxhighlight><br />
<br />
This means that now you can alter the amount of energy your robot uses when it shoots by setting the myname.mybot.firePower system property. RoboTweaker automates the process of trying many different values for a property and running battles for each. At its most basic level, you can directly use the BattleRunner class like this:<br />
<br />
<syntaxhighlight>import rjw.robotweaker.*;<br />
import java.util.Iterator;<br />
<br />
public class Test {<br />
public static final void main(String[] args) {<br />
DoubleTweak tweak = new DoubleTweak("myname.mybot.firePower", 0.1, 3.0, 0.1);<br />
<br />
for (Iterator<Void> iter = tweak.iterator(); iter.hasNext(); ) {<br />
System.out.println();<br />
System.out.println(iter);<br />
iter.next();<br />
new BattleRunner("C:\\robocode")<br />
.rounds(100)<br />
.addRobots("myname.mybot*", "sample.Crazy")<br />
.go();<br />
}<br />
}<br />
}</syntaxhighlight><br />
<br />
Objects which implement the Tweak interface define properties that can be tweaked. In this case, it's a double value, which we want to start at 0.1 and end at 3.0, incrementing by 0.1 each time. We then pit our bot against sample.Crazy with 100 rounds per battle. The DoubleTweak class sets the system property through each iteration, then BattleRunner will execute the battle. Eventually, I'll provide the ability to provide custom handlers for analyzing the results, but as it currently stands BattleRunner dumps the results to the console, allowing you to see what happened at each setting.<br />
<br />
== Future Plans ==<br />
* Execute tweak runs from a configuration file so that you don't have to write any code to use RoboTweaker.<br />
* Provide a mechanism to use results listeners instead of just dumping to the console.<br />
* Create a results listener that will provide fancy charts.<br />
* Create a results listener to dump the data to CSV for further analysis.<br />
* Create a Tweak implementation that will allow you to tweak multiple properties at once and run battles for all permutations.</div>RobertWalkerhttp://robowiki.net/w/index.php?title=User:RobertWalker&diff=35952User:RobertWalker2016-05-12T18:16:11Z<p>RobertWalker: I'm back!</p>
<hr />
<div>== Background ==<br />
I'm (current year - 1977) years old and work as a software developer in Salt Lake City, Utah. Started robocoding in 2007 after a co-worker suggested having a Robocode tournament at work after a long, painful software release cycle. Apparently, I was more interested than the rest of the company; the bot I built (and am still working on in my copious spare time) seems to have scared everyone else off.<br />
<br />
== My bots ==<br />
* '''[[PluggableRobot]]''': A robot framework that provides a pluggable architecture and sophisticated [[Event Management|event management]].<br />
* '''[[RabidWombat]]''': My first robot, built on top of the [[PluggableRobot]] framework. A bit too rough yet to release into the wild.<br />
<br />
== .plan ==<br />
So after not touching Robocode for a while, I'm dived back in, authoring a rewrite of [[RabidWombat]]. I'm also creating a tool called [[RoboTweaker]] which allows you to test out tweaks to values controlling your robot's behavior.<br />
<br />
[[Category:Bot Authors|RobertWalker]]</div>RobertWalkerhttp://robowiki.net/w/index.php?title=RabidWombat&diff=31291RabidWombat2013-07-07T19:14:18Z<p>RobertWalker: Update</p>
<hr />
<div>{{Infobox Robot<br />
| image = RabidWombat.jpg<br />
| name = RabidWombat<br />
| author = [[RobertWalker]]<br />
| extends = [[PluggableRobot]]<br />
| targeting = [[VirtualGuns|Virtual gun array]]:<br />
:[[HeadOnTargeting|head-on]]<br />
:[[LinearTargeting|linear]]<br />
:[[CircularTargeting|circular]]<br />
:[[GuessFactorGun|guess factor]]<br />
| movement = [[AntiGravityMovement|antigravity]]<br />
| license = no license selected yet<br />
| isOneOnOne = true<br />
| isMelee = false<br />
| isOpenSource = true<br />
}}<br />
== Release Notes ==<br />
* Version 0.71<br />
** Removed MyRules class<br />
** Updated movement code to better handle equilibrium states<br />
* Version 0.7<br />
** Initial release on the rumble<br />
<br />
== Background Info ==<br />
; What's special about it?<br />
: Nothing, particularly. Just another bot.<br />
<br />
; Great, I want to try it. Where can I download it?<br />
: [http://rjw.walkertribe.com/robocode/rjw.RabidWombat_0.71.jar RabidWombat 0.71]<br />
<br />
; How competitive is it?<br />
: It's not done yet, so it's not that competitive. It beats the [[SampleBots]], of course. I've also been pitting it against [[SpareParts]] with good success.<br />
<br />
== Strategy ==<br />
; How does it [[Movement|move]]?<br />
: It uses a variation of [[AntiGravityMovement|antigravity movement]]. The enemy robot exerts an attractive or repulsive force on RabidWombat, depending on how far away it is, in order to maintain a particular distance from the enemy. (It's pretty much working on [http://en.wikipedia.org/wiki/Hooke%27s_Law Hooke's law].) That distance grows if RabidWombat is losing and shrinks if it's winning, so that it'll run away or close in for the kill as appropriate. Walls exert a repulsive force when RabidWombat gets close enough to them, which gets stronger the closer it is. Bullet dodging is also done with force vectors (see below).<br />
<br />
; How does it fire?<br />
: It has a virtual gun array containing (currently) a [[HeadOnTargeting|head-on targeting gun]], a [[LinearTargeting|linear targeting gun]], a [[CircularTargeting|circular targeting gun]] and a [[GuessFactorGun|guess factor gun]]. (I suppose the linear targeting gun is probably redundant.) It fires [[Waves|waves]] (for guess factor targeting) and [[VirtualBullets|virtual bullets]] (for tracking the success of the various guns) every turn and fires the real bullets with the best gun. Stats decay over time so that it will adapt more readily to changes in enemy behavior. I might add a [[PatternMatching|pattern matching gun]] to the array.<br />
<br />
; How does it [[DodgingBullets|dodge bullets]]?<br />
: For the moment, it assumes that the opponent is using [[HeadOnTargeting|head-on targeting]], then creates a force vector which is perpendicular to the presumed bullet's flight path so that it will run away from the bullet. I'm still somewhat undecided on the final bullet dodging strategy.<br />
<br />
; What does it save between rounds and matches?<br />
: Currently, it saves gun accuracy, guess factor and energy stats between rounds and nothing between matches.<br />
<br />
== Additional Info ==<br />
; Where did you get the name?<br />
: It sounded cool. Its initials happening to be RW didn't hurt, either.<br />
<br />
; Can I use your code?<br />
: Yes, although I haven't applied a license yet, it really doesn't bother me if someone wants to adapt the code for their own purposes, as long as you credit me.<br />
<br />
; What's next for your robot?<br />
: Here's the to-do list:<br />
* RabidWombat is currently not shooting where it thinks it is all the time, so I need to fix that.<br />
* Update for Java 6.<br />
* Improve bullet dodging<br />
* Add a pattern matching gun<br />
* Take wall bumping into account for virtual gun calculations<br />
* Weight virtual gun stats based on hit probability<br />
* Segment statistics<br />
* Tweak, tweak, tweak... <br />
<br />
; Does it have any [[White Whale|white whales]]?<br />
: For now, I've been pitting RabidWombat against [[SpareParts]], with good results.<br />
<br />
== Credits ==<br />
[[PluggableRobot]] was developed in parallel to support RabidWombat, so look there for some credits. Other than that, it wasn't directly based on any other robot, although I've culled many ideas from the wiki. I'm trying to be good about giving attribution in the source, and when I get some time I'll transfer them to the wiki.<br />
<br />
[[Category:Bots|RabidWombat]]<br />
[[Category:1-vs-1 Bots|RabidWombat]]<br />
[[Category:MegaBots|RabidWombat]]<br />
<br />
__NOTOC__ __NOEDITSECTION__</div>RobertWalkerhttp://robowiki.net/w/index.php?title=RoboRumble/Participants&diff=31290RoboRumble/Participants2013-07-07T19:12:25Z<p>RobertWalker: RabidWombat 0.71</p>
<hr />
<div>{{:RoboRumble/Navigation}}<br />
<br />
----<br />
Just add your bot name ('''as appears in the Robocode selector after packaging''', so including versionnumber) and the RobocodeRepository id number separated by "," (there must be no space after the comma).<br />
<br><br />
The list is in '''alphabetical''' order. Add your bot in the right slot.<br />
<br />
For your bot to be accepted by the RR@Home server, the following rules are mandatory:<br />
<br />
* The bot must have a package-name.<br />
* The bot must be packaged in a jar-file.<br />
* A <botname>.properties file must be present in the jar-file.<br />
* The naming of the bot must reflect the internal structure,see [http://home.versatel.nl/gheijenk/plaatjes/bot_naming.png]for sample.RamFire.<br />
<br />
The easiest way to do this is to package your bot with Robocode (Robot -> Package robot for upload).<br />
<br />
'''PLEASE MAKE SURE YOUR BOT IS NOT ALREADY ON THE LIST BEFORE YOU ADD IT.<br>IF YOU ARE ADDING A NEW VERSION OF YOUR BOT, PLEASE DELETE THE OLD ONE.'''<br />
<br />
----<br />
<pre><br />
ab.DengerousRoBatra 1.3,http://www.robocoderepository.com/BotFiles/3664/ab.DengerousRoBatra_1.3.jar<br />
abc.Shadow 3.83c,http://robocode.aclsi.pt/abc.Shadow_3.83c.jar<br />
abc.tron3.Tron 3.11,http://www.robocoderepository.com/BotFiles/2205/abc.tron3.Tron_3.11.jar<br />
abc.Tron 2.02,http://www.robocoderepository.com/BotFiles/241/abc.Tron_2.02.jar<br />
abud.ThirdRobo 1.0,http://www.robocoderepository.com/BotFiles/2479/abud.ThirdRobo_1.0.jar<br />
ad.last.Bottom 1.0,http://www.robocoderepository.com/BotFiles/1876/ad.last.Bottom_1.0.jar<br />
ad.Quest 0.10,http://www.robocoderepository.com/BotFiles/1846/ad.Quest_0.10.jar<br />
adt.Ar1 2.1,http://www.robocoderepository.com/BotFiles/2254/adt.Ar1_2.1.jar<br />
adt.Ar2 1.0,http://www.robocoderepository.com/BotFiles/2303/adt.Ar2_1.0.jar<br />
aetos.AetosFirstBot 1.0,http://robocode-archive.strangeautomata.com/robots/aetos.AetosFirstBot_1.0.jar<br />
ag.Gir 0.99,http://www.robocoderepository.com/BotFiles/3065/ag.Gir_0.99.jar<br />
agd.Mooserwirt2 2.7,https://dl.dropboxusercontent.com/u/75978227/roborumble_refuge/agd.Mooserwirt2_2.7.jar<br />
agrach.Dalek 1.0,https://github.com/aleksey-zhidkov/rc-repo-mirror/raw/master/agrach.Dalek_1.0.jar<br />
agrach.MicroDalek 1.0,https://github.com/aleksey-zhidkov/rc-repo-mirror/raw/master/agrach.MicroDalek_1.0.jar<br />
agrach.RobotSlayer 1.0,https://github.com/aleksey-zhidkov/rc-repo-mirror/raw/master/agrach.RobotSlayer_1.0.jar<br />
ags.Glacier 0.2.7,https://dl.dropboxusercontent.com/u/75978227/roborumble_refuge/ags.Glacier_0.2.7.jar<br />
ags.micro.Carpet 1.1,https://dl.dropboxusercontent.com/u/75978227/roborumble_refuge/ags.micro.Carpet_1.1.jar<br />
ags.Midboss 1q.fast,https://dl.dropboxusercontent.com/u/75978227/roborumble_refuge/ags.Midboss_1q.fast.jar<br />
ags.polished.PolishedRuby 1,https://dl.dropboxusercontent.com/u/75978227/roborumble_refuge/ags.polished.PolishedRuby_1.jar<br />
ags.rougedc.RougeDC willow,https://dl.dropboxusercontent.com/u/75978227/roborumble_refuge/ags.rougedc.RougeDC_willow.jar<br />
ahf.Acero 1.0,http://www.robocoderepository.com/BotFiles/2151/ahf.Acero_1.0.jar<br />
ahf.NanoAndrew .4,http://www.robocoderepository.com/BotFiles/2002/ahf.NanoAndrew_.4.jar<br />
ahf.r2d2.R2d2 0.86,http://www.robocoderepository.com/BotFiles/2035/ahf.r2d2.R2d2_0.86.jar<br />
ahr.ice.Ice 1.0,http://robocoderepository.com/BotFiles/3966/ahr.ice.Ice_1.0.jar<br />
AIR.iRobot 1.0,http://www.robocoderepository.com/BotFiles/3205/AIR.iRobot_1.0.jar<br />
ak.Fermat 2.0,http://www.robocoderepository.com/BotFiles/799/ak.Fermat_2.0.jar<br />
alex.Diabolo5 1.1,http://robocode-archive.strangeautomata.com/robots/alex.Diabolo5_1.1.jar<br />
alk.lap.LoudAndProud 2.23,http://www.robocoderepository.com/BotFiles/3601/alk.lap.LoudAndProud_2.23.jar<br />
alpha.BlackIce 1.0,https://docs.google.com/uc?export=download&confirm=no_antivirus&id=0B4I_xy0UZndLSkc3MVI3Y0sycW8<br />
alpha.RainingFire 1.0,https://docs.google.com/uc?export=download&id=0B4I_xy0UZndLQnVwbHBKVWd5ak0<br />
am.Miedzix 3.0,http://robocode-archive.strangeautomata.com/robots/am.Miedzix_3.0.jar<br />
amc.ROBv202 1.01,http://matron.ic.cz/robocode/amc.ROBv202_1.01.jar<br />
amc.ROBv203 1.0,http://matron.ic.cz/robocode/amc.ROBv203_1.0.jar<br />
amc.ROBv300 1.1,http://matron.ic.cz/robocode/amc.ROBv300_1.1.jar<br />
amc.ROBv301 1.1,http://matron.ic.cz/robocode/amc.ROBv301_1.1.jar<br />
amc.ROBv400 1.0,http://matron.ic.cz/robocode/amc.ROBv400_1.0.jar<br />
amarok.Rookie 1.1,http://www.robocoderepository.com/BotFiles/422/amarok.Rookie_1.1.jar<br />
amk.ChumbaMini 0.2,http://www.robocoderepository.com/BotFiles/2655/amk.ChumbaMini_0.2.jar<br />
amk.ChumbaWumba 0.3,http://www.robocoderepository.com/BotFiles/2646/amk.ChumbaWumba_0.3.jar<br />
amk.jointstrike.JointStrike 0.2,http://www.robocoderepository.com/BotFiles/2597/amk.jointstrike.JointStrike_0.2.jar<br />
amk.ShizzleStiX.ShizzleStiX 0.6,http://www.robocoderepository.com/BotFiles/2603/amk.ShizzleStiX.ShizzleStiX_0.6.jar<br />
amk.superstrike.SuperStrike 0.3,http://www.robocoderepository.com/BotFiles/2600/amk.superstrike.SuperStrike_0.3.jar<br />
amk.Punbot.Punbot 0.01,http://www.robocoderepository.com/BotFiles/2604/amk.Punbot.Punbot_0.01.jar<br />
And.BasicSurfer FF1.6,https://sites.google.com/site/devonrobots/home/basicsurfer/And.BasicSurfer_FF1.6.jar?attredirects=0&d=1<br />
ao.T100 0.9,http://www.robocoderepository.com/BotFiles/3385/ao.T100_0.9.jar<br />
ap.Frederick 1.1,http://robocode-archive.strangeautomata.com/robots/ap.Frederick_1.1.jar<br />
apc.botM 3.0, http://www.jambe.co.nz/~james/apc.botM_3.0.jar<br />
apc.Caan 1.0, http://www.jambe.co.nz/~james/apc.Caan_1.0.jar<br />
apc.Colossus2 0.12, http://robocode-archive.strangeautomata.com/robots/apc.Colossus2_0.12.jar<br />
apc.LeeroyJenkins2 1.0,http://robocode-archive.strangeautomata.com/robots/apc.LeeroyJenkins2_1.0.jar<br />
apollokidd.ApolloKidd 0.9,http://www.robocoderepository.com/BotFiles/321/apollokidd.ApolloKidd_0.9.jar<br />
apv.Aspid 1.7,http://www.robocoderepository.com/BotFiles/1412/apv.Aspid_1.7.jar<br />
apv.AspidReloaded 0.6,http://www.robocoderepository.com/BotFiles/1985/apv.AspidReloaded_0.6.jar<br />
apv.LauLectrik 1.2,http://www.robocoderepository.com/BotFiles/1300/apv.LauLectrik_1.2.jar<br />
apv.MicroAspid 1.8,http://www.robocoderepository.com/BotFiles/2519/apv.MicroAspid_1.8.jar<br />
apv.NanoLauLectrik 1.0,http://www.robocoderepository.com/BotFiles/1399/apv.NanoLauLectrik_1.0.jar<br />
apv.NanoLauLectrikTheCannibal 1.1,http://www.robocoderepository.com/BotFiles/2147/apv.NanoLauLectrikTheCannibal_1.1.jar<br />
apv.ScruchiPu 1.0,http://www.robocoderepository.com/BotFiles/1367/apv.ScruchiPu_1.0.jar<br />
apv.test.Virus 0.6.1,http://www.robocoderepository.com/BotFiles/2645/apv.test.Virus_0.6.1.jar<br />
apv.TheBrainPi 0.5fix,http://robocode-archive.strangeautomata.com/robots/apv.TheBrainPi_0.5fix.jar<br />
ar.horizon.Horizon 1.2.2,http://www.robocoderepository.com/BotFiles/3286/ar.horizon.Horizon_1.2.2.jar<br />
ar.QuantumChromodynamics 1.2.1,http://www.robocoderepository.com/BotFiles/3220/ar.QuantumChromodynamics_1.2.1.jar<br />
ar.TheoryOfEverything 1.2.1,http://www.robocoderepository.com/BotFiles/3221/ar.TheoryOfEverything_1.2.1.jar<br />
ara.Shera 0.88,http://www.robocoderepository.com/BotFiles/1050/ara.Shera_0.88.jar<br />
areb.Union 1.06,http://www.robocoderepository.com/BotFiles/2893/areb.Union_1.06.jar<br />
arthord.micro.Apoptygma 0.4,http://www.robocoderepository.com/BotFiles/1688/arthord.micro.Apoptygma_0.4.jar<br />
arthord.micro.Muffin 0.6.1,http://www.robocoderepository.com/BotFiles/1963/arthord.micro.Muffin_0.6.1.jar<br />
arthord.KostyaTszyu Beta2,http://www.robocoderepository.com/BotFiles/2322/arthord.KostyaTszyu_Beta2.jar<br />
arthord.MannyPacquiao Delta2,http://scoutery.awardspace.com/arthord.MannyPacquiao_Delta2.jar<br />
arthord.NanoSatan Mu,http://www.robocoderepository.com/BotFiles/2157/arthord.NanoSatan_Mu.jar<br />
arthord.NanoSatanMelee Beta,http://www.robocoderepository.com/BotFiles/2088/arthord.NanoSatanMelee_Beta.jar<br />
ary.micro.Weak 1.2,http://www.robocoderepository.com/BotFiles/3433/ary.micro.Weak_1.2.jar<br />
ary.mini.Nimi 1.0,http://www.robocoderepository.com/BotFiles/3397/ary.mini.Nimi_1.0.jar<br />
ary.nano.AceSurf 1.2,http://www.robocoderepository.com/BotFiles/3352/ary.nano.AceSurf_1.2.jar<br />
ary.nano.ColorNanoP 1.1,http://www.robocoderepository.com/BotFiles/3629/ary.nano.ColorNanoP_1.1.jar<br />
ary.Crisis 1.0,http://www.robocoderepository.com/BotFiles/3495/ary.Crisis_1.0.jar<br />
ary.Help 1.0,http://robocode-archive.strangeautomata.com/robots/ary.Help_1.0.jar<br />
ary.FourWD 1.3d,http://robocode-archive.strangeautomata.com/robots/ary.FourWD_1.3d.jar<br />
ary.SMG 1.01,https://dl.dropboxusercontent.com/u/75978227/roborumble_refuge/ary.SMG_1.01.jar<br />
as.xbots 1.0,http://robocode-archive.strangeautomata.com/robots/as.xbots_1.0.jar<br />
asd.Cthulhu 1.2,http://robocode-archive.strangeautomata.com/robots/asd.Cthulhu_1.2.jar<br />
asm.Statistas 0.1,http://www.robocoderepository.com/BotFiles/1989/asm.Statistas_0.1.jar<br />
av.RobAtHome 1.2,http://www.user.tu-berlin.de/vickqsjf/av.RobAtHome_1.2.jar<br />
aw.Gilgalad 1.99.6,https://sites.google.com/site/awusa94/robocode/aw.Gilgalad_1.99.6.jar?attredirects=0<br />
awesomeness.Elite 1.0,http://robocoderepository.com/BotFiles/3597/awesomeness.Elite.jar<br />
awl.Locutus 1.5,https://dl.dropboxusercontent.com/u/1589443/awl.Locutus_1.5.jar<br />
axeBots.HataMoto 3.09,http://www.robocoderepository.com/BotFiles/1655/axeBots.HataMoto_3.09.jar<br />
axeBots.Musashi 2.18,http://www.robocoderepository.com/BotFiles/1759/axeBots.Musashi_2.18.jar<br />
axeBots.Okami 1.04,http://www.robocoderepository.com/BotFiles/2016/axeBots.Okami_1.04.jar<br />
axeBots.SilverSurfer 2.53.33fix,https://dl.dropboxusercontent.com/u/75978227/roborumble_refuge/axeBots.SilverSurfer_2.53.33fix.jar<br />
ayk.WallHugger 1.0,http://robocode-archive.strangeautomata.com/robots/ayk.WallHugger_1.0.jar<br />
baal.nano.N 1.42,http://webpages.charter.net/eleeleth/Robots/baal.nano.N_1.42.jar<br />
banshee.mini.Nexus6 0.2.0,http://www.robocoderepository.com/BotFiles/3467/banshee.mini.Nexus6_0.2.0.jar<br />
banshee.micro.Nexus6 0.3.0,http://www.robocoderepository.com/BotFiles/3473/banshee.micro.Nexus6_0.3.0.jar<br />
bayen.nano.Squirrel 0.2,http://www.freewebs.com/bayen/files/bayen.nano.Squirrel_0.2.jar<br />
bayen.nut.Squirrel 1.621,http://robocode-archive.strangeautomata.com/robots/bayen.nut.Squirrel_1.621.jar<br />
bayen.UbaMicro 1.4,http://www.robocoderepository.com/BotFiles/2830/bayen.UbaMicro_1.4.jar<br />
bayen.UbaRamLT 1.0,http://www.robocoderepository.com/BotFiles/2868/bayen.UbaRamLT_1.0.jar<br />
bbo.RamboT 0.3,http://www.robocoderepository.com/BotFiles/2210/bbo.RamboT_0.3.jar<br />
bbo.TheRoof 1.4.3,http://www.robocoderepository.com/BotFiles/2179/bbo.TheRoof_1.4.3.jar<br />
Bemo.Sweet30 1.6.1,http://www.stg-volleyball.de/images/Bemo.Sweet30_1.6.1.jar<br />
benhorner.PureAggression 0.2.6,http://www.robocoderepository.com/BotFiles/3421/benhorner.PureAggression_0.2.6.jar<br />
bh.PencilRain 0.01,http://www.robocoderepository.com/BotFiles/3670/bh.PencilRain-0.01.jar<br />
bigpete.Stewie 1.0,http://www.robocoderepository.com/BotFiles/2927/bigpete.Stewie_1.0.jar<br />
bing2.Melody 1.3.1,http://www.ccs.neu.edu/home/bing/robocode/bing2.Melody_1.3.1.jar<br />
bjl.LoneDragon 0.5,http://www.robocoderepository.com/BotFiles/1929/bjl.LoneDragon_0.5.jar<br />
blir.micro.blixi.Blixi 1.0,https://dl.dropboxusercontent.com/u/103112496/Robocode/blir.micro.blixi.Blixi_1.0.jar<br />
blir.nano.Bruce R1.0.0,https://dl.dropboxusercontent.com/u/103112496/Robocode/blir.nano.Bruce_R1.0.0.jar<br />
blir.nano.Cabbage R1.0.1,https://dl.dropboxusercontent.com/u/103112496/Robocode/blir.nano.Cabbage_R1.0.1.jar<br />
blir.nano.inch.Inchworm 1.0,https://dl.dropboxusercontent.com/u/103112496/Robocode/blir.nano.inch.Inchworm_1.0.jar<br />
blr.Chicken001 0.1,https://dl.dropbox.com/s/b1isx9axzuyl2yb/blr.Chicken001_0.1.jar?dl=1<br />
bndl.LostLion 1.2,http://www.robocoderepository.com/BotFiles/1033/bndl.LostLion_1.2.jar<br />
bk.Shooter 1.0,https://dl.dropboxusercontent.com/u/81048920/bk.Shooter_1.0.jar<br />
boe.Minerva 0.80,https://dl.dropboxusercontent.com/u/27918021/boe.Minerva_0.80.jar<br />
bons.NanoStalker 1.2,http://www.robocoderepository.com/BotFiles/1179/bons.NanoStalker_1.2.jar<br />
bots.UberBot 1.2c,https://dl.dropboxusercontent.com/u/97134235/bots.UberBot_1.2c.jar<br />
bots.UnterBot 1.0,https://dl.dropboxusercontent.com/u/97134235/bots.UnterBot_1.0.jar<br />
bp.Kuma 1.0,http://www.robocoderepository.com/BotFiles/3238/bp.Kuma_1.0.jar<br />
braaropolis.Abot 1.0,http://robocode-archive.strangeautomata.com/robots/braaropolis.Abot_1.0.jar<br />
brainfade.Fallen 0.63,http://www.robocoderepository.com/BotFiles/2250/brainfade.Fallen_0.63.jar<br />
brainfade.melee.Dusk 0.44,http://www.robocoderepository.com/BotFiles/2518/brainfade.melee.Dusk_0.44.jar<br />
bts.mega.Gnarly 1.4,http://www.bluetorchsource.com/bots/bts.mega.Gnarly_1.4.jar<br />
buba.Archivist 0.1,http://www.robocoderepository.com/BotFiles/3899/buba.Archivist_0.1.jar<br />
buba.Buba 0.3,http://www.robocoderepository.com/BotFiles/3896/buba.Buba_0.3.jar<br />
bumblebee.Bumblebee 1.0, https://dl.dropbox.com/s/ac31anjpew7ownh/bumblebee.Bumblebee_1.0.jar?dl=1<br />
bvh.fnr.Fenrir 0.36l,http://www.robocoderepository.com/BotFiles/1428/bvh.fnr.Fenrir_0.36l.jar<br />
bvh.frg.Friga 0.112dev,http://robocode-archive.strangeautomata.com/robots/bvh.frg.Friga_0.112dev.jar<br />
bvh.fry.Freya 0.82,http://robocode-archive.strangeautomata.com/robots/bvh.fry.Freya_0.82.jar<br />
bvh.hdr.Hodur 0.4,http://www.robocoderepository.com/BotFiles/1954/bvh.hdr.Hodur_0.4.jar<br />
bvh.loki.Loki 0.5,http://www.robocoderepository.com/BotFiles/885/bvh.loki.Loki_0.5.jar<br />
bvh.micro.Freya 0.3,http://www.robocoderepository.com/BotFiles/2815/bvh.micro.Freya_0.3.jar<br />
bvh.micro.Svadilfari 0.2,http://www.robocoderepository.com/BotFiles/1086/bvh.micro.Svadilfari_0.2.jar<br />
bvh.mini.Fenrir 0.39,http://www.robocoderepository.com/BotFiles/1429/bvh.mini.Fenrir_0.39.jar<br />
bvh.mini.Freya 0.55,http://robocode-archive.strangeautomata.com/robots/bvh.mini.Freya_0.55.jar<br />
bvh.mini.Mjolnir 0.3,http://www.robocoderepository.com/BotFiles/2220/bvh.mini.Mjolnir_0.3.jar<br />
bvh.mini.Wodan 0.50,http://www.robocoderepository.com/BotFiles/2064/bvh.mini.Wodan_0.50.jar<br />
bvh.tyr.Tyr 1.74,http://www.robocoderepository.com/BotFiles/886/bvh.tyr.Tyr_1.74.jar<br />
bwbaugh.nano.Tirunculus 0.0.0a,https://dl.dropboxusercontent.com/u/75978227/roborumble_refuge/bwbaugh.nano.Tirunculus_0.0.0a.jar<br />
bzdp.BoxCar 2.0,http://www.robocoderepository.com/BotFiles/3703/bzdp.BoxCar_2.0.jar<br />
bzdp.Pansy 2.1,http://www.robocoderepository.com/BotFiles/3726/bzdp.Pansy_2.1.jar<br />
caimano.Furia_Ceca 0.22,http://www.robocoderepository.com/BotFiles/1843/caimano.Furia_Ceca_0.22.jar<br />
can.Pookie 1.1,http://www.robocoderepository.com/BotFiles/4086/can.Pookie-1.1.jar<br />
casey.Flee 1.0,http://www.robocoderepository.com/BotFiles/4108/casey.Flee_1.0.jar<br />
casey.Flump 1.0,https://www.sites.google.com/site/fatsandbox/robots/casey.Flump_1.0.jar<br />
cb.DeepThought 1.3,http://bomberportal.com/other/robocode/cb.DeepThought_1.3.jar<br />
cb.droid.Polyphem 1.0,http://bomberportal.com/other/robocode/cb.droid.Polyphem_1.0.jar<br />
cb.Femto 1.0,http://bomberportal.com/other/robocode/cb.Femto_1.0.jar<br />
cb.micro.Haiduc 1.0,http://bomberportal.com/other/robocode/cb.micro.Haiduc_1.0.jar<br />
cb.Sabertooth 1.0,http://bomberportal.com/other/robocode/cb.Sabertooth_1.0.jar<br />
cbot.agile.Nibbler 0.2,http://www.robocoderepository.com/BotFiles/1537/cbot.agile.Nibbler_0.2.jar<br />
cbot.cbot.CBot 0.8,http://www.robocoderepository.com/BotFiles/1375/cbot.cbot.CBot_0.8.jar<br />
cf.mini.Chiva 1.0,http://www.robocoderepository.com/BotFiles/2331/cf.mini.Chiva_1.0.jar<br />
cf.OldMan.OldManXP 0.1,http://www.robocoderepository.com/BotFiles/1968/cf.OldMan.OldManXP_0.1.jar<br />
cf.proto.Shiva 2.2,http://www.robocoderepository.com/BotFiles/2409/cf.proto.Shiva_2.2.jar<br />
cf.star.Star2 1.23,http://www.robocoderepository.com/BotFiles/2255/cf.star.Star2_1.23.jar<br />
ch.rhj.rbc.RHJ1 1.0,http://www.robocoderepository.com/BotFiles/1879/ch.rhj.rbc.RHJ1_1.0.jar<br />
CharlieN.Omega.Omega 1.03,http://www.robocoderepository.com/BotFiles/3503/CharlieN.Omega.Omega_1.03.jar<br />
chase.pm.Pytko 1.0,http://robocode-archive.strangeautomata.com/robots/chase.pm.Pytko_1.0.jar<br />
chickenfuego.UrChicken2 1.0,http://www.robocoderepository.com/BotFiles/3422/chickenfuego.UrChicken2_1.0.jar<br />
cjk.Merkava 0.1.1,http://www.robocoderepository.com/BotFiles/2637/cjk.Merkava_0.1.1.jar<br />
cjm.chalk.Chalk 2.6.Be,http://scatterbright.com/robots/cjm.chalk.Chalk_2.6.Be.jar<br />
cjm.Charo 1.1,http://scatterbright.com/robots/cjm.Charo_1.1.jar<br />
cjm.Che 1.2,http://www.robocoderepository.com/BotFiles/2703/cjm.Che_1.2.jar<br />
cjm.Chomsky 1.5,http://scatterbright.com/robots/cjm.Chomsky_1.5.jar<br />
cli.Dancer 1.1,http://robocode-archive.strangeautomata.com/robots/cli.Dancer_1.1.jar<br />
cli.WasteOfAmmo 1.0,http://robocode-archive.strangeautomata.com/robots/cli.WasteOfAmmo_1.0.jar<br />
codemojo.nano.Woot 1.0,http://robocode-archive.strangeautomata.com/robots/codemojo.nano.Woot_1.0.jar<br />
com.blogspot.malinkody.DestrobotMalin 1.0,http://www.robocoderepository.com/BotFiles/4109/com.blogspot.malinkody.DestrobotMalin_1.0.jar<br />
com.cohesiva.robocode.ManOwaR 1.0,http://www.robocoderepository.com/BotFiles/4160/com.cohesiva.robocode.ManOwaR_1.0.jar<br />
com.syncleus.robocode.Dreadnaught 0.1,http://robocoderepository.com/BotFiles/3426/com.syncleus.robocode.Dreadnaught_0.1.jar<br />
conscience.Electron 1.3g,http://pmdom.altervista.org/conscience.Electron_1.3g.jar<br />
conscience.Bulldozer 1.0a,http://pmdom.altervista.org/conscience.Bulldozer_1.0a.jar<br />
conscience.Idem 1.0a,http://pmdom.altervista.org/conscience.Idem_1.0a.jar<br />
conscience.Suicidal 1.1,http://pmdom.altervista.org/conscience.Suicidal_1.1.jar<br />
cre.Karolos 0.32,http://robocode-archive.strangeautomata.com/robots/cre.Karolos_0.32.jar<br />
cs.Nene 1.0.4,http://robocode-archive.strangeautomata.com/robots/cs.Nene_1.0.4.jar<br />
cs.s2.Seraphim 2.3.1,http://robocode-archive.strangeautomata.com/robots/cs.s2.Seraphim_2.3.1.jar<br />
cs.Wren 1.0,http://robocode-archive.strangeautomata.com/robots/cs.Wren_1.0.jar<br />
csm.NthGeneration 0.04,http://www.robocoderepository.com/BotFiles/1214/csm.NthGeneration_0.04.jar<br />
csp.Eagle 3.30,http://www.robocoderepository.com/BotFiles/2436/csp.Eagle_3.30.jar<br />
css.Delitioner 0.11,http://robocode-archive.strangeautomata.com/robots/css.Delitioner_0.11.jar<br />
cuoq.Kakera 1.0,http://robocode-archive.strangeautomata.com/robots/cuoq.Kakera_1.0.jar<br />
cw.megas.Blade 0.8,http://robocode-archive.strangeautomata.com/robots/cw.megas.Blade_0.8.jar<br />
cw.megas.GhostShell GT,http://robocode-archive.strangeautomata.com/robots/cw.megas.GhostShell_GT.jar<br />
cw.megas.Gridd 0.4,http://robocode-archive.strangeautomata.com/robots/cw.megas.Gridd_0.4.jar<br />
cw.megas.Polar 3.2,http://robocode-archive.strangeautomata.com/robots/cw.megas.Polar_3.2.jar<br />
cw.megas.Silhouette 1.1,http://robocode-archive.strangeautomata.com/robots/cw.megas.Silhouette_1.1.jar?attredirects=0&d=1<br />
cx.BlestPain 1.41,http://www.robocoderepository.com/BotFiles/1671/cx.BlestPain_1.41.jar<br />
cx.CigaretBH 1.03,http://www.robocoderepository.com/BotFiles/1414/cx.CigaretBH_1.03.jar<br />
cx.Lacrimas 1.36,http://www.robocoderepository.com/BotFiles/1820/cx.Lacrimas_1.36.jar<br />
cx.micro.Blur 0.2,http://www.robocoderepository.com/BotFiles/2447/cx.micro.Blur_0.2.jar<br />
cx.micro.Smoke 0.96,http://www.robocoderepository.com/BotFiles/1037/cx.micro.Smoke_0.96.jar<br />
cx.micro.Spark 0.6,http://www.robocoderepository.com/BotFiles/1320/cx.micro.Spark_0.6.jar<br />
cx.mini.BlackSwans 0.60,http://www.robocoderepository.com/BotFiles/1158/cx.mini.BlackSwans_0.60.jar<br />
cx.mini.Cigaret 1.31,http://www.robocoderepository.com/BotFiles/1152/cx.mini.Cigaret_1.31.jar<br />
cx.mini.Nimrod 0.55,http://www.robocoderepository.com/BotFiles/1236/cx.mini.Nimrod_0.55.jar<br />
cx.nano.Smog 2.6,http://www.robocoderepository.com/BotFiles/1036/cx.nano.Smog_2.6.jar<br />
cx.Princess 1.0,http://www.robocoderepository.com/BotFiles/1343/cx.Princess_1.0.jar<br />
cyragia.Bot 1.1,http://www.robocoderepository.com/BotFiles/4098/cyragia.Bot_1.1.jar<br />
da.NewBGank 1.4,http://www.robocoderepository.com/BotFiles/3312/da.NewBGank_1.4.jar<br />
dam.MogBot 2.9,http://www.robocoderepository.com/BotFiles/555/dam.MogBot_2.9.jar<br />
dans.Cinnamon 1.2,http://www.robocoderepository.com/BotFiles/1976/dans.Cinnamon_1.2.jar<br />
darkcanuck.Gaff 1.50,http://robocode-archive.strangeautomata.com/robots/darkcanuck.Gaff_1.50.jar<br />
darkcanuck.Holden 1.13a,http://robocode-archive.strangeautomata.com/robots/darkcanuck.Holden_1.13a.jar<br />
darkcanuck.Pris 0.92,http://robocode-archive.strangeautomata.com/robots/darkcanuck.Pris_0.92.jar<br />
davidalves.Firebird 0.25,https://github.com/aleksey-zhidkov/rc-repo-mirror/raw/master/davidalves.Firebird_0.25.jar<br />
davidalves.Phoenix 1.02,https://github.com/aleksey-zhidkov/rc-repo-mirror/raw/master/davidalves.Phoenix_1.02.jar<br />
davidalves.PhoenixOS 1.1,http://robocode-archive.strangeautomata.com/robots/davidalves.PhoenixOS_1.1.jar<br />
davidalves.net.Duelist 0.1.6src,http://www.robocoderepository.com/BotFiles/1000/davidalves.net.Duelist_0.1.6src.jar<br />
davidalves.net.DuelistMicro 1.22,http://www.robocoderepository.com/BotFiles/1144/davidalves.net.DuelistMicro_1.22.jar<br />
davidalves.net.DuelistMicroMkII 1.1,http://www.robocoderepository.com/BotFiles/1281/davidalves.net.DuelistMicroMkII_1.1.jar<br />
davidalves.net.DuelistMini 1.1,http://www.robocoderepository.com/BotFiles/1181/davidalves.net.DuelistMini_1.1.jar<br />
davidalves.net.DuelistNano 1.0,http://www.robocoderepository.com/BotFiles/1272/davidalves.net.DuelistNano_1.0.jar<br />
dcs.Eater_of_Worlds 1.1.3-A,http://www.robocoderepository.com/BotFiles/2578/dcs.Eater_of_Worlds_1.1.3-A.jar<br />
dcs.Eater_of_Worlds_Mini 1.0,http://www.robocoderepository.com/BotFiles/2850/dcs.Eater_of_Worlds_Mini_1.0.jar<br />
dcs.PM.Eater_of_Worlds_PM 1.2,http://www.robocoderepository.com/BotFiles/2856/dcs.PM.Eater_of_Worlds_PM_1.2.jar<br />
de.erdega.robocode.Polyphemos 0.4,http://robocode-archive.strangeautomata.com/robots/de.erdega.robocode.Polyphemos_0.4.jar<br />
deewiant.Anomaly 0.2,http://www.iki.fi/~deewiant/files/deewiant.Anomaly_0.2.jar<br />
deith.Czolgzilla 0.11,http://www.robocoderepository.com/BotFiles/3256/deith.Czolgzilla_0.11.jar<br />
demetrix.ForceMajeure 0.75,http://ever-rage.narod.ru/robowiki/demetrix.ForceMajeure_0.75.jar<br />
demetrix.nano.Neutrino 0.27,http://ever-rage.narod.ru/robowiki/demetrix.nano.Neutrino_0.27.jar<br />
demetrix.nano.SledgeHammer 0.22,http://ever-rage.narod.ru/robowiki/demetrix.nano.SledgeHammer_0.22.jar<br />
deo.CloudBot 1.3,http://robocoderepository.com/BotFiles/3644/deo.CloudBot_1.3.jar<br />
deo.FlowerBot 1.0,http://robocoderepository.com/BotFiles/3683/deo.FlowerBot_1.0.jar<br />
deo.virtual.RainbowBot 1.0,http://robocoderepository.com/BotFiles/3694/deo.virtual.RainbowBot_1.0.jar<br />
dft.Calliope 5.6,http://www.robocoderepository.com/BotFiles/237/dft.Calliope_5.6.jar<br />
dft.Cyanide 1.90,http://robocode-archive.strangeautomata.com/robots/dft.Cyanide_1.90.jar<br />
dft.Cyprus 3.0,http://www.robocoderepository.com/BotFiles/377/dft.Cyprus_3.0.jar<br />
dft.Freddie 1.32,http://robocode-archive.strangeautomata.com/robots/dft.Freddie_1.32.jar<br />
dft.Guppy 1.0,http://robocode-archive.strangeautomata.com/robots/dft.Guppy_1.0.jar<br />
dft.Immortal 1.40,http://robocode-archive.strangeautomata.com/robots/dft.Immortal_1.40.jar<br />
dft.Krazy 1.5,http://www.robocoderepository.com/BotFiles/2099/dft.Krazy_1.5.jar<br />
dft.Virgin 1.25,http://www.robocoderepository.com/BotFiles/1447/dft.Virgin_1.25.jar<br />
dggp.haiku.gpBot_0 1.1,http://www.robocoderepository.com/BotFiles/3154/dggp.haiku.gpBot_0_1.1.jar<br />
dhn.Immortal 1.0,http://www.griessersoftware.com/robocode/dhn.Immortal.1.0.jar<br />
disan.Chair 2.2.0,https://dl.dropboxusercontent.com/u/138299243/Robocode/disan.Chair_2.2.0.jar<br />
discan.mini.Exode 0.25,https://sites.google.com/site/discanroborumblebots/discan.mini.Exode_0.25.jar<br />
dittman.BlindSquirl Retired,http://home.comcast.net/~kokyunage/robocode/ugluk/dittman.BlindSquirl_Retired.jar<br />
divineomega.DivineBot 1.8,https://dl.dropboxusercontent.com/s/w269z6xao5ts52q/divineomega.DivineBot_1.8.jar?token_hash=AAF4rB6HaxYxfg1XrouasM9fLdRadeh30pUzF8wGU10q1w&dl=1<br />
divineomega.TrialBot 0.003,https://dl.dropboxusercontent.com/s/an44muntp8f0p6h/divineomega.TrialBot_0.003.jar?token_hash=AAG5XTuv2fkEkTYhNIEJ0zre-SpWgK-jvKNqQ120pFeYSA&dl=1<br />
djc.Aardvark 0.3.6,http://www.robocoderepository.com/BotFiles/652/djc.Aardvark_0.3.6.jar<br />
djdjdj.NanoSkunk10 1.0,http://davidjoerg.com/robocode/djdjdj.NanoSkunk10_1.0.jar<br />
dk.stable.Gorgatron 1.1,http://www.robocoderepository.com/BotFiles/2112/dk.stable.Gorgatron_1.1.jar<br />
dks.MicroDanMK2 1.0,http://robocode-archive.strangeautomata.com/robots/dks.MicroDanMK2_1.0.jar<br />
DM.Capriite 3.7.2,http://www.robocoderepository.com/BotFiles/2989/DM.Capriite_3.7.2.jar<br />
DM.Chicken 4.0,http://www.robocoderepository.com/BotFiles/3020/DM.Chicken_4.0.jar<br />
DM.Mijit .3,http://www.robocoderepository.com/BotFiles/3043/DM.Mijit_.3.jar<br />
dmp.micro.Aurora 1.41,http://www.robocoderepository.com/BotFiles/853/dmp.micro.Aurora_1.41.jar<br />
dmp.nano.Eve 3.41,http://www.robocoderepository.com/BotFiles/842/dmp.nano.Eve_3.41.jar<br />
donjezza.Jezza 1.0,http://www.robocoderepository.com/BotFiles/3385/donjezza.Jezza_1.0.jar<br />
donjezza.Muncho 1.0,http://www.robocoderepository.com/BotFiles/3384/donjezza.Muncho_1.0.jar<br />
drd.Dreadknoght 0.9,http://www.robocoderepository.com/BotFiles/3835/drd.Dreadknoght_0.9.jar<br />
drm.CobraBora 1.12,http://www.robocoderepository.com/BotFiles/1146/drm.CobraBora_1.12.jar<br />
drm.Magazine 0.39,http://www.robocoderepository.com/BotFiles/989/drm.Magazine_0.39.jar<br />
ds.OoV4 0.3b,http://www.robocoderepository.com/BotFiles/2851/ds.OoV4_0.3b.jar<br />
dsw.StaticD 1.0,http://robocode-archive.strangeautomata.com/robots/dsw.StaticD_1.0.jar<br />
dsx724.VSAB_EP3a 1.0,http://robocode-archive.strangeautomata.com/robots/dsx724.VSAB_EP3a_1.0.jar<br />
dsx724.VSAB_EP3_ATR 1.1,http://www.robocoderepository.com/BotFiles/3432/dsx724.VSAB_EP3_ATR_1.1.jar<br />
DTF.Kludgy 1.2b,http://www.robocoderepository.com/BotFiles/4041/DTF.Kludgy_1.2b.jar<br />
dukie.Ambassador 1.0,http://www.robocoderepository.com/BotFiles/2845/dukie.Ambassador_1.0.jar<br />
dummy.micro.HummingBird 2.14,http://www.robocoderepository.com/BotFiles/369/dummy.micro.HummingBird_2.14.jar<br />
dummy.micro.Sparrow 2.5,http://www.robocoderepository.com/BotFiles/484/dummy.micro.Sparrow_2.5.jar<br />
dummy.mini.Parakeet 2.40,http://www.robocoderepository.com/BotFiles/400/dummy.mini.Parakeet_2.40.jar<br />
dvogon.GangBang 1.0,http://www.robocoderepository.com/BotFiles/3193/dvogon.GangBang_1.0.jar<br />
dy.LevelOne 2.0,http://www.robocoderepository.com/BotFiles/3452/dy.LevelOne_2.0.jar<br />
dz.Caedo 1.4,http://www.robocoderepository.com/BotFiles/1044/dz.Caedo_1.4.jar<br />
dz.GalbaMicro 0.11,http://www.robocoderepository.com/BotFiles/2482/dz.GalbaMicro_0.11.jar<br />
dz.GalbaMini 0.121,http://robocode-archive.strangeautomata.com/robots/dz.GalbaMini_0.121.jar<br />
dz.MostlyHarmlessNano 2.1,http://www.robocoderepository.com/BotFiles/2166/dz.MostlyHarmlessNano_2.1.jar<br />
dz.OthoMicro 0.12,http://www.robocoderepository.com/BotFiles/2198/dz.OthoMicro_0.12.jar<br />
dz.OthoMini 0.15,http://www.robocoderepository.com/BotFiles/2221/dz.OthoMini_0.15.jar<br />
eat.HumblePieLite 1.0,http://www.robocoderepository.com/BotFiles/1088/eat.HumblePieLite_1.0.jar<br />
EBBU.Sim2 1.02,https://dl.dropbox.com/u/85847696/EBBU.Sim2_1.02.jar<br />
ebo.Sparse 0.02,http://www.4geeks.de/files/ebo.Sparse_0.02.jar<br />
ebo.Tahoe 1.1.79,http://www.4geeks.de/files/ebo.Tahoe_1.1.79.jar<br />
EE.LittleBig 1.0,http://www.robocoderepository.com/BotFiles/4009/EE.LittleBig_1.0.jar<br />
EFD.AdvancedEFD 0.4.5a,http://robocode-archive.strangeautomata.com/robots/EFD.AdvancedEFD_0.4.5a.jar<br />
el.Attackr 0.1,http://robocode-archive.strangeautomata.com/robots/el.Attackr_0.1.jar<br />
el.JumpShoot 0.2,http://www.robocoderepository.com/BotFiles/3360/el.JumpShoot_0.2.jar<br />
el33t.EL33tGangstarr2 2.0,http://www.robocoderepository.com/BotFiles/2069/el33t.EL33tGangstarr2_2.0.jar<br />
eld.Hmm 1.0,http://robocode-archive.strangeautomata.com/robots/eld.Hmm_1.0.jar<br />
element.Earth 1.1,http://www.robocoderepository.com/BotFiles/3587/element.Earth_1.1.jar<br />
elloco.Flower 0.1r1,http://www.robocoderepository.com/BotFiles/3242/elloco.Flower_0.1r1.jar<br />
elloco.Kabuto 0.2r,http://www.robocoderepository.com/BotFiles/3229/elloco.Kabuto_0.2r.jar<br />
elvbot.ElverionBot 0.3,http://www.robocoderepository.com/BotFiles/3541/elvbot.ElverionBot_0.3.jar<br />
emp.Yngwie 1.11,http://www.robocoderepository.com/BotFiles/1928/emp.Yngwie_1.11.jar<br />
erdnis.Rover 0.3,http://www.free-games-fun.com/erdnis.Rover_0.3.jar<br />
eskimo.micro.Echo 0.1,http://robocoderepository.com/BotFiles/3969/eskimo.micro.Echo_0.1.jar<br />
et.Predator 1.8,http://www.robocoderepository.com/BotFiles/668/et.Predator_1.8.jar<br />
ethdsy.Malacka 2.4,http://www.robocoderepository.com/BotFiles/1159/ethdsy.Malacka_2.4.jar<br />
evd.X1 0.01,http://www.robocoderepository.com/BotFiles/3503/evd.X1_0.01.jar<br />
exauge.GateKeeper 1.1.121g,http://www.robocoderepository.com/BotFiles/3928/exauge.GateKeeper_1.1.121g.jar<br />
exauge.LemonDrop 1.6.130,http://www.robocoderepository.com/BotFiles/3911/exauge.LemonDrop_1.6.130.jar<br />
exauge.Leopard 1.1.019,http://www.robocoderepository.com/BotFiles/3917/exauge.Leopard_1.1.019.jar<br />
extra.LightSauce 0.01,http://robocoderepository.com/BotFiles/4031/extra.LightSauce_0.01.jar<br />
extra.Sauce .01,http://robocoderepository.com/BotFiles/4029/extra.Sauce_.01.jar<br />
Ex.Survival 3.7,http://robocode-archive.strangeautomata.com/robots/Ex.Survival_3.7.jar?attredirects=0&d=1<br />
fala.robocode.FalaRobot 1.0,http://www.robocoderepository.com/BotFiles/3474/fala.robocode.FalaRobot_1.0.jar<br />
FatalFlaw.FatalFlaw 1.0.5,http://www.robocoderepository.com/BotFiles/4133/FatalFlaw.FatalFlaw_1.0.5.jar<br />
fcr.First 1.0,http://www.robocoderepository.com/BotFiles/3362/fcr.First_1.0.jar<br />
Fenix.FenixTrack 1.0,http://www.robocoderepository.com/BotFiles/1627/Fenix.FenixTrack_1.0.jar<br />
florent.FloatingTadpole 1.2.6,http://www.robocoderepository.com/BotFiles/2675/florent.FloatingTadpole_1.2.6.jar<br />
florent.small.LittleAngel 1.8,http://www.robocoderepository.com/BotFiles/2917/florent.small.LittleAngel_1.8.jar<br />
florent.test.Toad 0.14t,http://robocode-archive.strangeautomata.com/robots/florent.test.Toad_0.14t.jar<br />
florent.XSeries.X2 0.17,http://wesley3.free.fr/florent.XSeries.X2_0.17.jar<br />
fm.claire 1.7,http://www.robocoderepository.com/BotFiles/2251/fm.claire_1.7.jar<br />
fm.mammillarias 1.3,http://www.robocoderepository.com/BotFiles/2238/fm.mammillarias_1.3.jar<br />
fnc.bandit.Bandit 5.2.0,http://www.robocoderepository.com/BotFiles/2155/fnc.bandit.Bandit_5.2.0.jar<br />
fnc.bandit2002.Bandit2002 4.0.2,http://www.robocoderepository.com/BotFiles/2202/fnc.bandit2002.Bandit2002_4.0.2.jar<br />
frag.FragBot 1.0,http://robocode-archive.strangeautomata.com/robots/frag.FragBot_1.0.jar<br />
franzor.Lizt 1.3.1,https://dl.dropboxusercontent.com/u/75978227/roborumble_refuge/franzor.Lizt_1.3.1.jar<br />
froh.micro.Aversari 0.31,https://dl.dropbox.com/u/60122033/Bots/froh.micro.Aversari_0.31.jar<br />
fromHell.C22H30N2O2S 2.2,http://fromhell.schreiende-stille.de/Robocode/Java/fromHell.C22H30N2O2S_2.2.jar<br />
fromHell.C4H10O 1.5.1,http://fromhell.schreiende-stille.de/Robocode/Java/fromHell.C4H10O_1.5.1.jar<br />
fromHell.CHCl3 1.4.2,http://fromhell.schreiende-stille.de/Robocode/Java/fromHell.CHCl3_1.4.2.jar<br />
fruits.NanoStrawbery 1.3,https://github.com/aleksey-zhidkov/rc-repo-mirror/raw/master/fruits.NanoStrawbery_1.3.jar<br />
fullsail.LaxativeTeaTwo 1.0,http://www.robocoderepository.com/BotFiles/3403/fullsail.LaxativeTeaTwo_1.0.jar<br />
fullsail.TimbotNoPrediction 1.0,http://robocode-archive.strangeautomata.com/robots/fullsail.TimbotNoPrediction_1.0.jar<br />
fullsail.SweetTea 1.1,http://robocode-archive.strangeautomata.com/robots/fullsail.SweetTea_1.1.jar<br />
fushi.PvP1.PvP1 2004-02-16,http://www.robocoderepository.com/BotFiles/2023/fushi.PvP1.PvP1_2004-02-16.jar<br />
fw.Number1 1.0b,http://robocode-archive.strangeautomata.com/robots/fw.Number1_1.0b.jar<br />
gadsky.Gadsky 1.01,http://www.robocoderepository.com/BotFiles/3595/gadsky.Gadsky_1.01.jar<br />
Gecko.ultimateGeckoBot 1.0,http://www.robocoderepository.com/BotFiles/4039/Gecko.ultimateGeckoBot_1.0.jar<br />
geep.mini.GPBotA 1.0,http://www.robocoderepository.com/BotFiles/2361/geep.mini.GPBotA_1.0.jar<br />
geep.mini.GPBotB 1.1,http://www.robocoderepository.com/BotFiles/2363/geep.mini.GPBotB_1.1.jar<br />
genprog.Gajeel 1.0,http://www.robocoderepository.com/BotFiles/4287/genprog.Gajeel_1.0.jar<br />
genprog.Rinmorikazu 1.0,http://www.robocoderepository.com/BotFiles/4286/genprog.Rinmorikazu_1.0.jar<br />
genprog.Zafaran 1.0,http://www.robocoderepository.com/BotFiles/4288/genprog.Zafaran_1.0.jar<br />
germ.TheMind .2,http://www.robocoderepository.com/BotFiles/2525/germ.TheMind_.2.jar<br />
gf.Centaur.Centaur 0.6.7,http://www.robocoderepository.com/BotFiles/4066/gf.Centaur.Centaur_0.6.7.jar<br />
gg.Squaraus 0.6,http://www.robocoderepository.com/BotFiles/1788/gg.Squaraus_0.6.jar<br />
gg.Wolverine 2.0,http://robocode-archive.strangeautomata.com/robots/gg.Wolverine_2.0.jar<br />
gh.GresSuffurd 0.3.14,http://home.versatel.nl/gheijenk/robocode/jarfiles/gh.GresSuffurd_0.3.14.jar<br />
gh.GrubbmGrb 1.2.4,http://home.versatel.nl/gheijenk/robocode/jarfiles/gh.GrubbmGrb_1.2.4.jar<br />
gh.GrypRepetyf 0.13,http://www.robocoderepository.com/BotFiles/2650/gh.GrypRepetyf_0.13.jar<br />
gh.micro.Grinnik 0.7,http://www.robocoderepository.com/BotFiles/3208/gh.micro.Grinnik_0.7.jar<br />
gh.micro.GrubbmThree 0.9,http://www.robocoderepository.com/BotFiles/2444/gh.micro.GrubbmThree_0.9.jar<br />
gh.mini.Gruwel 0.9,http://www.robocoderepository.com/BotFiles/2511/gh.mini.Gruwel_0.9.jar<br />
gh.nano.Grofvuil 0.2,http://www.robocoderepository.com/BotFiles/2553/gh.nano.Grofvuil_0.2.jar<br />
gimp.GimpBot 0.1,http://www.robocoderepository.com/BotFiles/2434/gimp.GimpBot_0.1.jar<br />
gio.RealGioBot 1.0,http://www.robocoderepository.com/BotFiles/2521/gio.RealGioBot_1.0.jar<br />
gjr.Cephalosporin 0.2,http://www.robocoderepository.com/BotFiles/2240/gjr.Cephalosporin_0.2.jar<br />
gm.GaetanoA 2.15,http://www.robocoderepository.com/BotFiles/2188/gm.GaetanoA_2.15.jar<br />
goblin.Bender 2.4,http://www.robocoderepository.com/BotFiles/1871/goblin.Bender_2.4.jar<br />
grybgoofy.GoofyBot 0.10,http://www.robocoderepository.com/BotFiles/2196/grybgoofy.GoofyBot_0.10.jar<br />
gu.MicroScoob 1.3,http://www.robocoderepository.com/BotFiles/2086/gu.MicroScoob_1.3.jar<br />
gwah.GBotMarkIV 1.0,http://robocode-archive.strangeautomata.com/robots/gwah.GBotMarkIV_1.0.jar<br />
gwah.GerryBotMkII 1.5.1,http://robocode-archive.strangeautomata.com/robots/gwah.GerryBotMkII_1.5.1.jar<br />
ha2.T2 0.2,http://www.robocoderepository.com/BotFiles/4225/ha2.T2_0.2.jar<br />
ha2.T2b 0.2b,http://www.robocoderepository.com/BotFiles/4227/ha2.T2b_0.2b.jar<br />
ha2.T3 0.1,http://www.robocoderepository.com/BotFiles/4228/ha2.T3_0.1.jar<br />
ha2.T3 0.2,http://www.robocoderepository.com/BotFiles/4229/ha2.T3_0.2.jar<br />
hamilton.Hamilton 1.0,http://www.robocoderepository.com/BotFiles/1408/hamilton.Hamilton_1.0.jar<br />
hapiel.Spiral 0.1,http://robocoderepository.com/BotFiles/3997/hapiel.Spiral_0.1.jar<br />
Heal.TekitokaBot 1.0,http://www.robocoderepository.com/BotFiles/4285/Heal.TekitokaBot_1.0.jar<br />
hirataatsushi.Neo 1.6,http://www.robocoderepository.com/BotFiles/1081/hirataatsushi.Neo_1.6.jar<br />
hirataatsushi.Trinity 0.003,http://www.robocoderepository.com/BotFiles/1145/hirataatsushi.Trinity_0.003.jar<br />
hlavko.nano.Phoenix 1.0, http://robocode.hmark.eu/hlavko.nano.Phoenix_1.0.jar<br />
hlavko.nano.Ringo 1.0d, http://robocode.hmark.eu/hlavko.nano.Ringo_1.0d.jar<br />
hlavko.nano.Ringo 2.0, http://robocode.hmark.eu/hlavko.nano.Ringo_2.0.jar<br />
hlavko.micro.Flex 1.5, http://robocode.hmark.eu/hlavko.micro.Flex_1.5.jar<br />
homerbots.h1 1.0,http://www.robocoderepository.com/BotFiles/2999/homerbots.h1_1.0.jar<br />
hp.Athena 0.1,http://www.robocoderepository.com/BotFiles/3415/hp.Athena_0.1.jar<br />
hs.SimpleHBot 1.3,http://www.robocoderepository.com/BotFiles/4112/hs.SimpleHBot_1.3.jar<br />
hvilela.HVilela 0.9,http://robocode-archive.strangeautomata.com/robots/hvilela.HVilela_0.9.jar<br />
ICS4U1.Patrick_White_Schrodinger 1.1,http://www.robocoderepository.com/BotFiles/4087/ICS4U1.Patrick_White_Schrodinger_1.1.jar<br />
ins.MobyNano 0.8,http://www.robocoderepository.com/BotFiles/939/ins.MobyNano_0.8.jar<br />
intruder.PrairieWolf 2.61,http://robocode-archive.strangeautomata.com/robots/intruder.PrairieWolf_2.61.jar<br />
ivor.prophet.Prophet 0.01,http://www.ivan.php5.sk/ivor.prophet.Prophet_0.01.jar<br />
is.fon.rs.FonDestroyer3084 1.0,http://www.robocoderepository.com/BotFiles/4047/is.fon.rs.FonDestroyer3084_1.0.jar<br />
is.fon.rs.Kamikaza 1.0,https://dl.dropboxusercontent.com/u/81048920/is.fon.rs.Kamikaza_1.0.jar<br />
jaara.LambdaBot 1.1,http://www.robocoderepository.com/BotFiles/3514/jaara.LambdaBot_1.1.jar<br />
jab.avk.ManuelGallegus 0.6,http://robocode-archive.strangeautomata.com/robots/jab.avk.ManuelGallegus_0.6.jar<br />
jab.DiamondStealer 5,http://robocode-archive.strangeautomata.com/robots/jab.DiamondStealers_5.jar<br />
jab.micro.Sanguijuela 0.8,http://robocode-archive.strangeautomata.com/robots/jab.micro.Sanguijuela_0.8.jar<br />
janm.Jammy 1.0,http://www.robocoderepository.com/BotFiles/3543/janm.Jammy_1.0.jar<br />
jam.micro.RaikoMicro 1.44,http://www.robocoderepository.com/BotFiles/1983/jam.micro.RaikoMicro_1.44.jar<br />
jam.mini.Raiko 0.43,http://www.robocoderepository.com/BotFiles/1922/jam.mini.Raiko_0.43.jar<br />
jam.RaikoMX 0.32,http://www.robocoderepository.com/BotFiles/1961/jam.RaikoMX_0.32.jar<br />
japs.Serenity 1.0,http://www.robocoderepository.com/BotFiles/2217/japs.Serenity_1.0.jar<br />
japs.Sjonniebot 0.9.1,http://www.robocoderepository.com/BotFiles/2203/japs.Sjonniebot_0.9.1.jar<br />
jasolo.Sonda 0.55,http://www.robocoderepository.com/BotFiles/1534/jasolo.Sonda_0.55.jar<br />
jaw.Mouse 0.11,http://www.robocoderepository.com/BotFiles/2472/jaw.Mouse_0.11.jar<br />
jaw.KarenCain 0.11,http://www.robocoderepository.com/BotFiles/2474/jaw.KarenCain_0.11.jar<br />
jaybot.adv.bots.JayBot 2.0,http://robocode-archive.strangeautomata.com/robots/jaybot.adv.bots.JayBot_2.0.jar<br />
jaybot.bots.Oddball 4.0,http://robocode-archive.strangeautomata.com/robots/jaybot.bots.Oddball_4.0.jar<br />
jbot.Rabbit2 1.1,http://robocode-archive.strangeautomata.com/robots/jbot.Rabbit2_1.1.jar<br />
jcs.AutoBot 4.2.1,http://www.robocoderepository.com/BotFiles/2616/jcs.AutoBot_4.2.1.jar<br />
jcs.Decepticon 2.5.3,http://www.robocoderepository.com/BotFiles/2620/jcs.Decepticon_2.5.3.jar<br />
jcs.Megatron 1.2,http://www.robocoderepository.com/BotFiles/2632/jcs.Megatron_1.2.jar<br />
jcs.Seth 1.8,http://robocode-archive.strangeautomata.com/robots/jcs.Seth_1.8.jar<br />
jcw.ArcherOne 1.0,http://robocode-archive.strangeautomata.com/robots/jcw.ArcherOne_1.0.jar<br />
jdw.Hornet 1.0,http://robocode-archive.strangeautomata.com/robots/jdw.Hornet_1.0.jar<br />
jekl.DarkHallow .90.9,http://www.robocoderepository.com/BotFiles/2296/jekl.DarkHallow_.90.9.jar<br />
jekl.Jekyl .70,http://www.robocoderepository.com/BotFiles/1837/jekl.Jekyl_.70.jar<br />
jekl.mini.BlackPearl .91,http://www.robocoderepository.com/BotFiles/1875/jekl.mini.BlackPearl_.91.jar<br />
jep.nano.Hawkwing 0.4.1,http://www.robocoderepository.com/BotFiles/1561/jep.nano.Hawkwing_0.4.1.jar<br />
jep.nano.Hotspur 0.1,http://www.robocoderepository.com/BotFiles/1877/jep.nano.Hotspur_0.1.jar<br />
jep.Terrible 0.4.1,http://www.robocoderepository.com/BotFiles/1536/jep.Terrible_0.4.1.jar<br />
jeremyreeder.Bully 1,http://thesafehouse.info/robocode/jeremyreeder.Bully_1.jar<br />
jeremyreeder.collective.Prophet 5,http://thesafehouse.info/robocode/jeremyreeder.collective.Prophet_5.jar<br />
jeremyreeder.Vincent 2011.12.09,http://www.robocoderepository.com/BotFiles/3993/jeremyreeder.Vincent_2011.12.09.jar<br />
jf.Dodger 1.3,https://dl.dropboxusercontent.com/u/75978227/roborumble_refuge/jf.Dodger_1.3.jar<br />
jgap.JGAP12584 1.0,http://www.robocoderepository.com/BotFiles/3383/jgap.JGAP12584_1.0.jar<br />
jgap.JGAP130166 1.0,http://www.robocoderepository.com/BotFiles/3371/jgap.JGAP130166_1.0.jar<br />
jgap.JGAP23423 1.0,http://www.robocoderepository.com/BotFiles/3378/jgap.JGAP23423_1.0.jar<br />
jgap.JGAP6139 1.0,http://www.robocoderepository.com/BotFiles/3372/jgap.JGAP6139_1.0.jar<br />
jgap.JGAP7247_2 1.0,http://www.robocoderepository.com/BotFiles/3382/jgap.JGAP7247_2_1.0.jar<br />
jgap.JGAP7958 1.0,http://www.robocoderepository.com/BotFiles/3373/jgap.JGAP7958_1.0.jar<br />
jje.BagPuss 1.2,http://robocode-archive.strangeautomata.com/robots/jje.BagPuss_1.2.jar<br />
jk.mega.DrussGT 2.9.3,https://dl.dropboxusercontent.com/u/4066735/jk.mega.DrussGT_2.9.3.jar<br />
jk.melee.Neuromancer 4.3,https://dl.dropboxusercontent.com/u/4066735/jk.melee.Neuromancer_4.3.jar<br />
jk.micro.Cotillion 0.8,https://dl.dropboxusercontent.com/u/4066735/jk.micro.Cotillion_0.8.jar<br />
jk.mini.CunobelinDC 1.2,https://dl.dropboxusercontent.com/u/4066735/jk.mini.CunobelinDC_1.2.jar<br />
jk.nano.Machete 2.0, https://dl.dropboxusercontent.com/u/4066735/jk.nano.Machete_2.0.jar<br />
jk.precise.EnergyDome 1.6,https://dl.dropboxusercontent.com/u/4066735/jk.precise.EnergyDome_1.6.jar<br />
jk.precise.Wintermute 0.7,http://robocode-archive.strangeautomata.com/robots/jk.precise.Wintermute_0.7.jar<br />
jk.sheldor.nano.Yatagan 1.2.3,https://dl.dropboxusercontent.com/u/4066735/jk.sheldor.nano.Yatagan_1.2.3.jar<br />
jmcd.BeoWulf 2.8,http://www.robocoderepository.com/BotFiles/1377/jmcd.BeoWulf_2.8.jar<br />
joe.ADinosaur 1.0,http://www.robocoderepository.com/BotFiles/2822/joe.ADinosaur_1.0.jar<br />
josago.Jorgito 0.16,http://www.robocoderepository.com/BotFiles/4000/josago.Jorgito_0.16.jar<br />
jp.Perpy 16.0,http://www.robocoderepository.com/BotFiles/3001/jp.Perpy_16.0.jar<br />
jp.SineWall 1.0,http://www.robocoderepository.com/BotFiles/2968/jp.SineWall_1.0.jar<br />
jrm.Test0 1.0,http://www.robocoderepository.com/BotFiles/3636/jrm.Test0_1.0.jar<br />
js.PinBall 1.6,http://www.robocoderepository.com/BotFiles/684/js.PinBall_1.6.jar<br />
jsal.Jsalbot 1.0,http://robocode-archive.strangeautomata.com/robots/jsal.Jsalbot_1.0.jar<br />
jt.SpearmintCT Alpha,http://www.robocoderepository.com/BotFiles/2164/jt.SpearmintCT_Alpha.jar<br />
justin.DemonicRage 3.20,http://robocode-archive.strangeautomata.com/robots/justin.DemonicRage_3.20.jar<br />
jw.Booring 1.11,http://www.robocoderepository.com/BotFiles/1250/jw.Booring_1.11.jar<br />
jwirde.Gort 2.0,https://docs.google.com/uc?export=download&id=0B5g5k-WHNBJicHpNNXotVE9aNHc<br />
jwst.DAD.DarkAndDarker 1.1,http://robocode-archive.strangeautomata.com/robots/jwst.DAD.DarkAndDarker_1.1.jar<br />
kanishk.Fr0z3n 1.1,http://robocode-archive.strangeautomata.com/robots/kanishk.Fr0z3n_1.1.jar<br />
kano.gamma.KanoGamma 1.8,http://www.robocoderepository.com/BotFiles/1098/kano.gamma.KanoGamma_1.8.jar<br />
kawam.kmBot9 1.0,http://www.robocoderepository.com/BotFiles/967/kawam.kmBot9_1.0.jar<br />
kawigi.f.FhqwhgadsMicro 1.0,http://www.robocoderepository.com/BotFiles/1673/kawigi.f.FhqwhgadsMicro_1.0.jar<br />
kawigi.micro.Shiz 1.1,http://www.robocoderepository.com/BotFiles/2007/kawigi.micro.Shiz_1.1.jar<br />
kawigi.mini.Coriantumr 1.1,http://www.robocoderepository.com/BotFiles/1988/kawigi.mini.Coriantumr_1.1.jar<br />
kawigi.mini.Fhqwhgads 1.1,http://www.robocoderepository.com/BotFiles/1604/kawigi.mini.Fhqwhgads_1.1.jar<br />
kawigi.nano.FunkyChicken 1.1,http://www.robocoderepository.com/BotFiles/1512/kawigi.nano.FunkyChicken_1.1.jar<br />
kawigi.nano.ThnikkaBot 0.9,http://www.robocoderepository.com/BotFiles/2059/kawigi.nano.ThnikkaBot_0.9.jar<br />
kawigi.robot.Girl 1.2,http://www.robocoderepository.com/BotFiles/2124/kawigi.robot.Girl_1.2.jar<br />
kawigi.sbf.Barracuda 1.0,http://www.robocoderepository.com/BotFiles/1535/kawigi.sbf.Barracuda_1.0.jar<br />
kawigi.sbf.FloodHT 0.9.2,http://www.robocoderepository.com/BotFiles/1552/kawigi.sbf.FloodHT_0.9.2.jar<br />
kawigi.sbf.FloodMicro 1.5,http://www.robocoderepository.com/BotFiles/1381/kawigi.sbf.FloodMicro_1.5.jar<br />
kawigi.sbf.FloodMini 1.4,http://www.robocoderepository.com/BotFiles/1462/kawigi.sbf.FloodMini_1.4.jar<br />
kawigi.sbf.FloodNano 1.2,http://www.robocoderepository.com/BotFiles/1421/kawigi.sbf.FloodNano_1.2.jar<br />
kawigi.sbf.FloodSonnet 0.9,http://www.robocoderepository.com/BotFiles/1779/kawigi.sbf.FloodSonnet_0.9.jar<br />
kawigi.sbf.Teancum 1.3,http://www.robocoderepository.com/BotFiles/1470/kawigi.sbf.Teancum_1.3.jar<br />
kawigi.spare.SpareParts 0.7.6nosnd,http://www.robocoderepository.com/BotFiles/1335/kawigi.spare.SpareParts_0.7.6nosnd.jar<br />
kb.PingPong 1.0,http://www.griessersoftware.com/robocode/kb.PingPong.1.0.jar<br />
kc.micro.Needle 0.101,http://www.robocoderepository.com/BotFiles/3379/kc.micro.Needle_0.101.jar<br />
kc.micro.Thorn 1.252,http://robocode-archive.strangeautomata.com/robots/kc.micro.Thorn_1.252.jar<br />
kc.micro.WaveShark 0.31,http://www.robocoderepository.com/BotFiles/3822/kc.micro.WaveShark_0.31.jar<br />
kc.mini.Vyper 0.311,http://robocode-archive.strangeautomata.com/robots/kc.mini.Vyper_0.311.jar<br />
kc.nano.Splinter 1.2,http://robocode-archive.strangeautomata.com/robots/kc.nano.Splinter_1.2.jar<br />
kc.serpent.Hydra 0.21,http://robocode-archive.strangeautomata.com/robots/kc.serpent.Hydra_0.21.jar<br />
kc.serpent.WaveSerpent 2.11,http://robocode-archive.strangeautomata.com/robots/kc.serpent.WaveSerpent_2.11.jar<br />
kcn.percept.PerceptBot 2.3,http://www.robocoderepository.com/BotFiles/1075/kcn.percept.PerceptBot_2.3.jar<br />
kcn.unnamed.Unnamed 1.21,http://www.robocoderepository.com/BotFiles/1969/kcn.unnamed.Unnamed_1.21.jar<br />
kenran.InfiniteObscurity 0.8,https://dl.dropboxusercontent.com/u/66821565/robots/kenran.InfiniteObscurity_0.8.jar<br />
kenran.mega.Pantheist 1.1,http://robocode-archive.strangeautomata.com/robots/kenran.mega.Pantheist_1.1.jar<br />
kid.Gladiator .7.2,http://robocode-archive.strangeautomata.com/robots/kid.Gladiator_.7.2.jar<br />
kid.Toa .0.5,https://dl.dropboxusercontent.com/u/75978227/roborumble_refuge/kid.Toa_.0.5.jar<br />
KiraNL.Cataris 1.0,http://robocode-archive.strangeautomata.com/robots/KiraNL.Cataris_1.0.jar<br />
KiraNL.Chupacabra 0.5,https://dl.dropboxusercontent.com/u/75978227/roborumble_refuge/KiraNL.Chupacabra_0.5.jar<br />
KiraNL.ChupaLite 0.4,https://dl.dropboxusercontent.com/u/75978227/roborumble_refuge/KiraNL.ChupaLite_0.4.jar<br />
KiraNL.SpaceKees 0.1,https://dl.dropboxusercontent.com/u/75978227/roborumble_refuge/KiraNL.SpaceKees_0.1.jar<br />
kinsen.melee.Angsaichmophobia 1.8c,http://robocode-archive.strangeautomata.com/robots/kinsen.melee.Angsaichmophobia_1.8c.jar<br />
kinsen.nano.Charp 1.0,https://dl.dropbox.com/s/xivyqm5qi4z2bvp/kinsen.nano.Charp_1.0.jar?dl=1<br />
kinsen.nano.Hoplomachy 1.6,http://robocode-archive.strangeautomata.com/robots/kinsen.nano.Hoplomachy_1.6.jar<br />
kinsen.nano.Quarrelet 1.0,http://robocode-archive.strangeautomata.com/robots/kinsen.nano.Quarrelet_1.0.jar<br />
kinsen.nano.Senticous 1.0,http://robocode-archive.strangeautomata.com/robots/kinsen.nano.Senticous_1.0.jar<br />
kjc.etc.Dharok 1.0,http://www.robocoderepository.com/BotFiles/3293/kjc.etc.Dharok_1.0.jar<br />
kjc.MailManX 2.0,http://www.robocoderepository.com/BotFiles/3288/kjc.MailManX_2.0.jar<br />
kjc.Karaykan 1.0,http://www.robocoderepository.com/BotFiles/3289/kjc.Karaykan_1.0.jar<br />
klein.GottesKrieger 1.1,http://www.robocoderepository.com/BotFiles/3258/klein.GottesKrieger_1.1.jar<br />
kneels.ToNoone 0.2,http://www.schickt.de/robocode/kneels.ToNoone_0.2.jar<br />
kneels.nano.Derp 0.2,http://www.schickt.de/robocode/kneels.nano.Derp_0.2.jar<br />
Krabb.fe4r.Fe4r 0.4,http://www.robocoderepository.com/BotFiles/2766/Krabb.fe4r.Fe4r_0.4.jar<br />
Krabb.sliNk.Garm 0.9u,https://dl.dropboxusercontent.com/u/75978227/roborumble_refuge/Krabb.sliNk.Garm_0.9u.jar<br />
Krabb.krabby.Krabby 1.18b,http://robocode-archive.strangeautomata.com/robots/Krabb.krabby.Krabby_1.18b.jar<br />
Krabb.krabby2.Krabby2 1.9o,http://robocode-archive.strangeautomata.com/robots/Krabb.krabby2.Krabby2_1.9o.jar<br />
krillr.mini.JointStrike 2.0.0,http://robocode-archive.strangeautomata.com/robots/krillr.mini.JointStrike_2.0.0.jar<br />
krillr.mega.Psyche 0.0.3,http://robocode-archive.strangeautomata.com/robots/krillr.mega.Psyche_0.0.3.jar<br />
kronenthaler.Basilisk 1.0,http://www.robocoderepository.com/BotFiles/4051/kronenthaler.Basilisk_1.0.jar<br />
krzysiek.robbo2.Robbo 1.0.0,http://robocode-archive.strangeautomata.com/robots/krzysiek.robbo2.Robbo_1.0.0.jar<br />
kurios.DOSexe .9a,http://www.kuriosly.com/roborumble/kurios.DOSexe_.9a.jar<br />
kvk.HebusLeTroll 0.41,http://www.robocoderepository.com/BotFiles/2125/kvk.HebusLeTroll_0.41.jar<br />
labg.Cataclysm 2.05,http://www.robocoderepository.com/BotFiles/2399/labg.Cataclysm_2.05.jar<br />
lancel.Lynx 1.09,http://www.robocoderepository.com/BotFiles/3992/lancel.Lynx_1.09.jar<br />
lazarecki.mega.PinkerStinker 0.7,http://www.robocoderepository.com/BotFiles/3838/lazarecki.mega.PinkerStinker_0.7.jar<br />
leb.ShootAnArrow 0.1,http://www.robocoderepository.com/BotFiles/2648/leb.ShootAnArrow_0.1.jar<br />
lechu.Ala 0.0.4,http://www.robocoderepository.com/BotFiles/3497/lechu.Ala_0.0.4.jar<br />
lechu.Lechu 1.1,http://www.robocoderepository.com/BotFiles/3480/lechu.Lechu_1.1.jar<br />
Legend.Biogon 1.5,http://robocode-archive.strangeautomata.com/robots/Legend.Biogon_1.5.jar?attredirects=0&d=1<br />
Legend.BoulderZY 1.4.9,http://robocode-archive.strangeautomata.com/robots/Legend.BoulderZY_1.4.9.jar?attredirects=0&d=1<br />
Legend.Qetro 1.6,http://robocode-archive.strangeautomata.com/robots/Legend.Qetro_1.6.jar?attredirects=0&d=1<br />
Legend.X_FireFly 1.3,http://robocode-archive.strangeautomata.com/robots/Legend.X_FireFly_1.3.jar?attredirects=0&d=1<br />
lessonz.robocode.Oz 0.5.0,https://dl.dropbox.com/u/9231432/robocode/lessonz.robocode.Oz-0.5.0.jar<br />
lion.Kresnanano 1.0,http://www.robocoderepository.com/BotFiles/2295/lion.Kresnanano_1.0.jar<br />
lk.nano.Avesnar 1.1,http://www.robocoderepository.com/BotFiles/1597/lk.nano.Avesnar_1.1.jar<br />
lmk.ACPFinal 0.2,http://pillow.rscheme.org/lmk.ACPFinal_0.2.jar<br />
lorneswork.Predator 1.0,http://www.robocoderepository.com/BotFiles/2609/lorneswork.Predator_1.0.jar<br />
logiblocs.Fire 1.0,https://dl.dropboxusercontent.com/u/66369360/logiblocs.Fire_1.0.jar<br />
logiblocs.SittingDroid 1.0,https://dl.dropboxusercontent.com/u/66369360/logiblocs.SittingDroid_1.0.jar<br />
lrem.Spectre 0.4.4,http://www.robocoderepository.com/BotFiles/2253/lrem.Spectre_0.4.4.jar<br />
lrem.magic.TormentedAngel Antiquitie,http://robocode-archive.strangeautomata.com/robots/lrem.magic.TormentedAngel_Antiquitie.jar<br />
lrem.micro.MoggFanatic 0.2,http://www.robocoderepository.com/BotFiles/2639/lrem.micro.MoggFanatic_0.2.jar<br />
lrem.micro.FalseProphet Alpha,http://www.robocoderepository.com/BotFiles/2415/lrem.micro.FalseProphet_Alpha.jar<br />
lrem.quickhack.QuickHack 1.0,http://www.robocoderepository.com/BotFiles/2555/lrem.quickhack.QuickHack_1.0.jar<br />
lucasslf.Dodger 1.0,http://robocode-archive.strangeautomata.com/robots/lucasslf.Dodger_1.0.jar<br />
lucasslf.HariSeldon 0.2.1,http://robocode-archive.strangeautomata.com/robots/lucasslf.HariSeldon_0.2.1.jar<br />
lucasslf.Wiggins 0.6,http://robocode-archive.strangeautomata.com/robots/lucasslf.Wiggins_0.6.jar<br />
lunchie.Lunchbox 0.93,http://robocode-archive.strangeautomata.com/robots/lunchie.Lunchbox_0.93.jar<br />
lundal.Mark8 2012.09.15,https://dl.dropbox.com/s/gcs13tapwtwpdwc/lundal.Mark8_2012.09.15.jar<br />
lw.LuthersTest 0.1,http://robocode-archive.strangeautomata.com/robots/lw.LuthersTest_0.1.jar<br />
lxx.ConceptA 0.8,https://github.com/aleksey-zhidkov/ConceptA/raw/master/builds/lxx.ConceptA_0.8.jar<br />
lxx.Tomcat 3.67c,https://github.com/aleksey-zhidkov/Tomcat/raw/develop/builds/lxx.Tomcat_3.67c.jar<br />
m3thos.Eva00 1.1,http://robocode-archive.strangeautomata.com/robots/m3thos.Eva00_1.1.jar<br />
m3thos.Eva02 0.7.1,http://robocode-archive.strangeautomata.com/robots/m3thos.Eva02_0.7.1.jar<br />
m3thos.mini.Eva01 0.5.5,http://robocode-archive.strangeautomata.com/robots/m3thos.mini.Eva01_0.5.5.jar<br />
ma.is.fon.rs.RobotA 0.01,http://www.robocoderepository.com/BotFiles/4048/ma.is.fon.rs.RobotA_0.01.jar<br />
madmath.Cow 0.1.1,http://www.robocoderepository.com/BotFiles/3476/madmath.Cow_0.1.1.jar<br />
mae.Mae1 1.1,http://www.robocoderepository.com/BotFiles/4267/mae.Mae1_1.1.jar<br />
mahrgell.mahrram 1.3,http://www.robocoderepository.com/BotFiles/4284/mahrgell.mahrram_1.3.jar<br />
marcinek.TopGun 1.3,http://www.robocoderepository.com/BotFiles/3458/marcinek.TopGun_1.3.jar<br />
maribo.FollowFire 1.11,http://www.robocoderepository.com/BotFiles/4281/maribo.FollowFire_1.11.jar<br />
maribo.IotaCT 1.0,http://www.robocoderepository.com/BotFiles/4189/maribo.IotaCT_1.0.jar<br />
maribo.melee.BMV 0.1,http://www.robocoderepository.com/BotFiles/4289/maribo.melee.BMV_0.1.jar<br />
maribo.Omicron 1.0,http://www.robocoderepository.com/BotFiles/4191/maribo.Omicron_1.0.jar<br />
marksteam.Phoenix 1.0,http://www.robocoderepository.com/BotFiles/2749/marksteam.Phoenix_1.0.jar<br />
matt.advanced.Katana 1.0,http://www.robocoderepository.com/BotFiles/2498/matt.advanced.Katana_1.0.jar<br />
matt.BlueMind 0.8.00,http://www.robocoderepository.com/BotFiles/2685/matt.BlueMind_0.8.00.jar<br />
matt.UnderDark3 2.4.34,http://www.robocoderepository.com/BotFiles/2485/matt.UnderDark3_2.4.34.jar<br />
matt.UnderDark4 0.4.00,http://www.robocoderepository.com/BotFiles/2644/matt.UnderDark4_0.4.00.jar<br />
mb.Beast 0.4.1,http://cdn.bitbucket.org/mbrahm/robodownloads/downloads/mb.Beast_0.4.1.jar<br />
mb.Monte 0.1.0,http://cdn.bitbucket.org/mbrahm/robodownloads/downloads/mb.Monte_0.1.0.jar<br />
mbh.Mbh 0.1,http://www.robocoderepository.com/BotFiles/3365/mbh.Mbh_0.1.jar<br />
mbro.BelajarBot 0.0.3,http://www.robocoderepository.com/BotFiles/2471/mbro.BelajarBot_0.0.3.jar<br />
mbro.Detektor3 0.1.1,http://www.robocoderepository.com/BotFiles/2478/mbro.Detektor3_0.1.1.jar<br />
mc.Messapia 0.1.8,http://www.robocoderepository.com/BotFiles/2223/mc.Messapia_0.1.8.jar<br />
mcb.Audace 1.3,http://www.robocoderepository.com/BotFiles/3424/mcb.Audace_1.3.jar<br />
McS.Spanky_test 0.1a,http://www.robocoderepository.com/BotFiles/4067/McS.Spanky_test_0.1a.jar<br />
md.November 1.0,http://www.robocoderepository.com/BotFiles/1004/md.November_1.0.jar<br />
md.Pasta 1.1,http://www.robocoderepository.com/BotFiles/1014/md.Pasta_1.1.jar<br />
md.VelociRaptor 1.3,http://www.robocoderepository.com/BotFiles/232/md.VelociRaptor_1.3.jar<br />
mdouet.BotKicker 2.0,http://www.robocoderepository.com/BotFiles/1478/mdouet.BotKicker_2.0.jar<br />
metal.small.MCool 1.21,http://www.robocoderepository.com/BotFiles/1698/metal.small.MCool_1.21.jar<br />
metal.small.dna2.MCoolDNA 1.5,http://www.robocoderepository.com/BotFiles/2354/metal.small.dna2.MCoolDNA_1.5.jar<br />
microtestbotpack.MicroTestBot 1.0,https://dl.dropboxusercontent.com/u/4547352/robocode/microtestbotpack.MicroTestBot_1.0.jar<br />
mjhjd.MattHussey1 1.1,https://dl.dropbox.com/u/90567837/mjhjd.MattHussey1_1.1.jar<br />
mk.Alpha 0.2.1,http://robocode-archive.strangeautomata.com/robots/mk.Alpha_0.2.1.jar<br />
mladjo.AIR 0.7,http://www.robocoderepository.com/BotFiles/3187/mladjo.AIR_0.7.jar<br />
mladjo.GnuKlub 0.1,http://robocode-archive.strangeautomata.com/robots/mladjo.GnuKlub_0.1.jar<br />
mladjo.Grrrrr 0.9,http://www.robocoderepository.com/BotFiles/3189/mladjo.Grrrrr_0.9.jar<br />
mladjo.iRobot 0.3,http://www.robocoderepository.com/BotFiles/3149/mladjo.iRobot_0.3.jar<br />
mladjo.Startko 1.0,http://www.robocoderepository.com/BotFiles/3186/mladjo.Startko_1.0.jar<br />
mld.DustBunny 3.8,http://www.robocoderepository.com/BotFiles/3650/mld.DustBunny_3.8.jar<br />
mld.Infinity 2.2,http://www.robocoderepository.com/BotFiles/3591/mld.Infinity_2.2.jar<br />
mld.LittleBlackBook 1.69e,http://robocode-archive.strangeautomata.com/robots/mld.LittleBlackBook_1.69e.jar<br />
mld.Moebius 2.9.3,http://www.robocoderepository.com/BotFiles/3634/mld.Moebius_2.9.3.jar<br />
mld.Wisdom 1.0,http://www.robocoderepository.com/BotFiles/3640/mld.Wisdom_1.0.jar<br />
mmb.Roskilde 0.5,http://www.robocoderepository.com/BotFiles/3965/mmb.Roskilde_0.5.jar<br />
mme.NikeEnhanced 2.0,http://www.robocoderepository.com/BotFiles/2828/mme.NikeEnhanced_2.0.jar<br />
mn.micro.perceptual.Mimic 1.0.0,http://dl.dropbox.com/s/3m8lbyarqc06tps/mn.micro.perceptual.Mimic_1.0.0.jar?dl=1<br />
mn.nano.perceptual.Impact 1.3.0,http://dl.dropbox.com/s/njuuaycr3qswlgu/mn.nano.perceptual.Impact_1.3.0.jar?dl=1<br />
mn.Combat 3.21.1,http://dl.dropboxusercontent.com/s/kpmfcyl7f8kdima/mn.Combat_3.21.1.jar<br />
mn.SuperSittingDuck 1.0.2,http://robocode-archive.strangeautomata.com/robots/mn.SuperSittingDuck_1.0.2.jar<br />
mnt.AHEB 0.6a,http://www.robocoderepository.com/BotFiles/2417/mnt.AHEB_0.6a.jar<br />
mnt.SurferBot 0.2.5,http://www.robocoderepository.com/BotFiles/2433/mnt.SurferBot_0.2.5.jar<br />
morbid.MorbidPriest 1.0,http://www.robocoderepository.com/BotFiles/1758/morbid.MorbidPriest_1.0.jar<br />
mrm.MightyMoose .2,http://robocode-archive.strangeautomata.com/robots/mrm.MightyMoose_.2.jar<br />
ms.Ares 0.19,http://www.robocoderepository.com/BotFiles/730/ms.Ares_0.19.jar<br />
mue.Ascendant 1.2.27,http://mue.sonar-echo.de/robocode/mue.Ascendant_1.2.27.jar<br />
mue.Hyperion 0.8,http://www.robocoderepository.com/BotFiles/2224/mue.Hyperion_0.8.jar<br />
muf.CrazyKitten 0.9,http://www.robocoderepository.com/BotFiles/1946/muf.CrazyKitten_0.9.jar<br />
mwj.A1176183 1.0,https://dl.dropboxusercontent.com/u/75978227/roborumble_refuge/mwj.A1176183_1.0.jar<br />
myl.micro.Avipes 1.00,http://www.robocoderepository.com/BotFiles/1347/myl.micro.Avipes_1.00.jar<br />
myl.micro.NekoNinja 1.30,http://www.robocoderepository.com/BotFiles/944/myl.micro.NekoNinja_1.30.jar<br />
myl.micro.Predator 1.50,http://www.robocoderepository.com/BotFiles/1097/myl.micro.Predator_1.50.jar<br />
myl.micro.Troodon 1.10,http://www.robocoderepository.com/BotFiles/1226/myl.micro.Troodon_1.10.jar<br />
myl.nano.Graviton 1.10,http://www.robocoderepository.com/BotFiles/770/myl.nano.Graviton_1.10.jar<br />
myl.nano.Kakuru 1.20,http://www.robocoderepository.com/BotFiles/1330/myl.nano.Kakuru_1.20.jar<br />
myl.nano.KomoriNinja 1.1,http://www.robocoderepository.com/BotFiles/978/myl.nano.KomoriNinja_1.1.jar<br />
mym.EdgeStalker 1.0,http://www.robocoderepository.com/BotFiles/3956/mym.EdgeStalker_1.0.jar<br />
mz.Adept 2.65,http://www.robocoderepository.com/BotFiles/2090/mz.Adept_2.65.jar<br />
mz.AdeptBSB 1.03,http://www.robocoderepository.com/BotFiles/2113/mz.AdeptBSB_1.03.jar<br />
mz.Movement 1.8,http://www.robocoderepository.com/BotFiles/2145/mz.Movement_1.8.jar<br />
mz.NanoDeath 2.56,http://www.robocoderepository.com/BotFiles/2010/mz.NanoDeath_2.56.jar<br />
mz.NanoGod 2.02,http://www.robocoderepository.com/BotFiles/1996/mz.NanoGod_2.02.jar<br />
nammyung.ModelT 0.23,http://www.robocoderepository.com/BotFiles/969/nammyung.ModelT_0.23.jar<br />
nan.Ihivatar_Mk_1 1.0,http://dl.dropbox.com/s/4oxw831xuu9yui0/nan.Ihivatar_Mk_1_1.0.jar?dl=1<br />
nanoskank.NanoSkank 1.0,http://robocode-archive.strangeautomata.com/robots/nanoskank.NanoSkank_1.0.jar<br />
nat.BlackHole 2.0gamma,http://nat.robothai.net/robots/nat.BlackHole_2.0gamma.jar<br />
nat.Hikari dev0001,http://nat.robothai.net/robots/nat.Hikari_dev0001.jar<br />
nat.micro.Reepicheep 0.1a,http://nat.robothai.net/robots/nat.micro.Reepicheep_0.1a.jar<br />
nat.nano.Ocnirp 1.73,http://nat.robothai.net/robots/nat.nano.Ocnirp_1.73.jar<br />
nat.nano.OcnirpPM 1.0,http://nat.robothai.net/robots/nat.nano.OcnirpPM_1.0.jar<br />
nat.nano.OcnirpSNG 1.0b,http://nat.robothai.net/robots/nat.nano.OcnirpSNG_1.0b.jar<br />
nat.Samekh 0.4,http://nat.robothai.net/robots/nat.Samekh_0.4.jar<br />
ncj.MoxieBot 1.0,http://www.robocoderepository.com/BotFiles/4003/ncj.MoxieBot_1.0.jar<br />
ndn.DyslexicMonkey 1.1,http://www.robocoderepository.com/BotFiles/1141/ndn.DyslexicMonkey_1.1.jar<br />
NDH.GuessFactor 1.0, http://www.robocoderepository.com/BotFiles/3949/NDH.GuessFactor_1.0.jar<br />
ne.Chimera 1.2,http://www.robocoderepository.com/BotFiles/3276/ne.Chimera_1.2.jar<br />
nexus.One 1.0,http://robocode-archive.strangeautomata.com/robots/nexus.One_1.0.jar<br />
nexus.Prototype 1.0,http://robocode-archive.strangeautomata.com/robots/nexus.Prototype_1.0.jar<br />
nexus.Two 0.2,https://dl.dropbox.com/s/glol05xymwbb0a7/nexus.Two_0.2.jar<br />
nexus.Experimental 0.2,https://dl.dropbox.com/s/kxeorcrx6jwlm2e/nexus.Experimental_0.2.jar<br />
ngf.nano.Sparky 0.1.5,http://robocode-archive.strangeautomata.com/robots/ngf.nano.Sparky_0.1.5.jar<br />
nic.Nicator 2.4,http://www.robocoderepository.com/BotFiles/193/nic.Nicator_2.4.jar<br />
nic.SnippetBot 1.0,http://www.robocoderepository.com/BotFiles/286/nic.SnippetBot_1.0.jar<br />
nkn.mini.Jskr0 0.1,http://www.robocoderepository.com/BotFiles/3852/nkn.mini.Jskr0_0.1.jar<br />
NG.LegatusLegionis 1.2,http://www.robocoderepository.com/BotFiles/4026/NG.LegatusLegionis_1.2.jar<br />
non.mega.NaN 0.1,http://www.robocoderepository.com/BotFiles/1960/non.mega.NaN_0.1.jar<br />
non.mega.NoName 0.0,http://www.robocoderepository.com/BotFiles/1957/non.mega.NoName_0.0.jar<br />
Noran.BitchingElk 0.054,http://www.robocoderepository.com/BotFiles/1855/Noran.BitchingElk_0.054.jar<br />
Noran.RandomTargeting 0.02,http://www.robocoderepository.com/BotFiles/1849/Noran.RandomTargeting_0.02.jar<br />
nova.Snow 1.0,http://www.robocoderepository.com/BotFiles/3623/nova.Snow_1.0.jar<br />
ntc.Cannon 1.12test,http://www.robocoderepository.com/BotFiles/3815/ntc.Cannon_1.12test.jar<br />
ntc.Evader 1.2,http://www.robocoderepository.com/BotFiles/3355/ntc.Evader_1.2.jar<br />
ntc.Knowledge 1.1,http://www.robocoderepository.com/BotFiles/3354/ntc.Knowledge_1.1.jar<br />
ntc.Lasers.Lasers 0.9,http://www.robocoderepository.com/BotFiles/3359/ntc.Lasers.Lasers_0.9.jar<br />
ntc.Plains 0.9,http://www.robocoderepository.com/BotFiles/3381/ntc.Plains_0.9.jar<br />
ntc.Swim 0.9,http://www.robocoderepository.com/BotFiles/3820/ntc.Swim_0.9.jar<br />
ntw.Sighup 1.5,http://robocode-archive.strangeautomata.com/robots/ntw.Sighup_1.5.jar<br />
ntw.Sigsys 1.6,http://robocode-archive.strangeautomata.com/robots/ntw.Sigsys_1.6.jar<br />
nz.jdc.micro.HedgehogGF 1.5,http://www.robocoderepository.com/BotFiles/4291/nz.jdc.micro.HedgehogGF_1.5.jar<br />
nz.jdc.micro.HedgehogP 1.2,http://www.robocoderepository.com/BotFiles/3622/nz.jdc.micro.HedgehogP_1.2.jar<br />
nz.jdc.nano.AralT 1.1,http://www.robocoderepository.com/BotFiles/4269/nz.jdc.nano.AralT_1.1.jar<br />
nz.jdc.nano.AralR 1.1,http://www.robocoderepository.com/BotFiles/4268/nz.jdc.nano.AralR_1.1.jar<br />
nz.jdc.nano.NeophytePattern 1.1,http://www.robocoderepository.com/BotFiles/4244/nz.jdc.nano.NeophytePattern_1.1.jar<br />
nz.jdc.nano.NeophytePRAL 1.4,http://www.robocoderepository.com/BotFiles/4250/nz.jdc.nano.NeophytePRAL_1.4.jar<br />
nz.jdc.nano.NeophyteSRAL 1.3,http://www.robocoderepository.com/BotFiles/4246/nz.jdc.nano.NeophyteSRAL_1.3.jar<br />
nz.jdc.nano.PatternAdept 1.0,http://www.robocoderepository.com/BotFiles/4271/nz.jdc.nano.PatternAdept_1.0.jar<br />
nz.jdc.nano.PralDeGuerre 1.2,http://www.robocoderepository.com/BotFiles/4293/nz.jdc.nano.PralDeGuerre_1.2.jar<br />
nzeemin.Izh 0.5,http://nzeemin-opensrc.googlecode.com/files/nzeemin.Izh_0.5.jar<br />
oa.weak.BotherBot 0.1,http://www.robocoderepository.com/BotFiles/2956/oa.weak.BotherBot_0.1.jar<br />
oa.weak.FlyMk1 0.1,http://www.robocoderepository.com/BotFiles/2958/oa.weak.FlyMk1_0.1.jar<br />
ola.Puffin 1.0,http://www.robocoderepository.com/BotFiles/3380/ola.Puffin_1.0.jar<br />
omens.CannonfodderMicro 1.4,https://dl.dropbox.com/s/ye675r93lpgpuei/omens.CannonfodderMicro_1.4.jar<br />
omens.CannonfodderNano 1.4,https://dl.dropbox.com/s/u94wp86uo34feue/omens.CannonfodderNano_1.4.jar<br />
oog.melee.Capulet 1.2,https://sites.google.com/site/crazybassoon/oog.melee.Capulet_1.2.jar<br />
oog.melee.Mercutio 1.0,http://www.robocoderepository.com/BotFiles/3848/oog.melee.Mercutio_1.0.jar<br />
oog.micro.MagicD3 0.41,http://www.robocoderepository.com/BotFiles/3801/oog.micro.MagicD3_0.41.jar<br />
oog.micro.Maui 1.2,http://robocode-archive.strangeautomata.com/robots/oog.micro.Maui_1.2.jar<br />
oog.micro.SavantMicro 1.1,http://robocode-archive.strangeautomata.com/robots/oog.micro.SavantMicro_1.1.jar<br />
oog.mini.AlphaDragon 0.1,http://www.robocoderepository.com/BotFiles/4015/oog.mini.AlphaDragon_0.1.jar<br />
oog.nano.Caligula 1.15,http://www.robocoderepository.com/BotFiles/4022/oog.nano.Caligula_1.15.jar<br />
oog.nano.Fuatisha 1.1,http://www.robocoderepository.com/BotFiles/4045/oog.nano.Fuatisha_1.1.jar<br />
oog.nano.MagicD2 2.4,http://www.robocoderepository.com/BotFiles/3749/oog.nano.MagicD2_2.4.jar<br />
oog.nano.SavantVS 1.1,http://www.robocoderepository.com/BotFiles/3714/oog.nano.SavantVS_1.1.jar<br />
oog.nano.SavantWS 0.1,http://www.robocoderepository.com/BotFiles/3709/oog.nano.SavantWS_0.1.jar<br />
oog.PricklyPear 1.0.6,http://robocode-archive.strangeautomata.com/robots/oog.PricklyPear_1.0.6.jar<br />
ouroboros.Dragon 0.0.3,https://dl.dropboxusercontent.com/u/98946154/robocode/ouroboros.Dragon_0.0.3.jar<br />
pa.Improved 1.1,http://robocode-archive.strangeautomata.com/robots/pa.Improved_1.1.jar<br />
pa3k.Manta 1.20,https://dl.dropboxusercontent.com/u/21124688/robocode/pa3k.Manta_1.20.jar<br />
pa3k.Quark 1.02,https://dl.dropboxusercontent.com/u/21124688/robocode/pa3k.Quark_1.02.jar<br />
pa3k.Viper 5.03,https://dl.dropboxusercontent.com/u/21124688/robocode/pa3k.Viper_5.03.jar<br />
pac.ABC 2.1,https://dl.dropbox.com/u/5439044/Robocode/pac.ABC_2.1.jar<br />
pak.JakeTheTestingRobot .1b,http://www.robocoderepository.com/BotFiles/3373/pak.JakeTheTestingRobot_.1b.jar<br />
pak.Dargon 1.0b,http://www.robocoderepository.com/BotFiles/3388/pak.Dargon_1.0b.jar<br />
paket.MojRobot 1.0,https://dl.dropbox.com/s/faovho732zgpvq8/paket.MojRobot_1.0.jar?dl=1<br />
panzer.Panzer 0.2,http://www.robocoderepository.com/BotFiles/4008/panzer.Panzer_0.2.jar<br />
paolord.TheHulk 1.0,http://www.robocoderepository.com/BotFiles/3595/paolord.TheHulk_1.0.jar<br />
patson.PatsonTestBot 1.0,http://www.robocoderepository.com/BotFiles/3324/patson.PatsonTestBot_1.0.jar<br />
paulk.PaulV3 1.7,http://www.robocoderepository.com/BotFiles/3502/paulk.PaulV3_1.7.jar<br />
pb.Oscillator 1.0,http://www.robocoderepository.com/BotFiles/2070/pb.Oscillator_1.0.jar<br />
pe.mini.SandboxMini 1.2,http://www.robocoderepository.com/BotFiles/917/pe.mini.SandboxMini_1.2.jar<br />
pe.minimelee.SandboxMiniMelee 1.1,http://www.robocoderepository.com/BotFiles/934/pe.minimelee.SandboxMiniMelee_1.1.jar<br />
pe.SandboxDT 3.02,http://www.robocoderepository.com/BotFiles/793/pe.SandboxDT_3.02.jar<br />
pe.SandboxLump 1.52,http://www.robocoderepository.com/BotFiles/731/pe.SandboxLump_1.52.jar<br />
pedersen.Hubris 2.4,http://home.comcast.net/~kokyunage/robocode/hubris/pedersen.Hubris_2.4.jar<br />
pedersen.Ugluk 1.0,http://home.comcast.net/~kokyunage/robocode/ugluk/pedersen.Ugluk_1.0.jar<br />
pez.clean.Swiffer 0.2.9,http://www.robocoderepository.com/BotFiles/1883/pez.clean.Swiffer_0.2.9.jar<br />
pez.frankie.Frankie 0.9.6.1,http://www.robocoderepository.com/BotFiles/1565/pez.frankie.Frankie_0.9.6.1.jar<br />
pez.gloom.GloomyDark 0.9.2,http://www.robocoderepository.com/BotFiles/1741/pez.gloom.GloomyDark_0.9.2.jar<br />
pez.mako.Mako 1.5,http://www.robocoderepository.com/BotFiles/1317/pez.mako.Mako_1.5.jar<br />
pez.micro.Aristocles 0.3.7,http://www.robocoderepository.com/BotFiles/1923/pez.micro.Aristocles_0.3.7.jar<br />
pez.mini.ChironexFleckeri 0.5,http://www.robocoderepository.com/BotFiles/2513/pez.mini.ChironexFleckeri_0.5.jar<br />
pez.mini.Gouldingi 1.5,http://www.robocoderepository.com/BotFiles/1351/pez.mini.Gouldingi_1.5.jar<br />
pez.mini.Pugilist 2.5.1f,https://dl.dropboxusercontent.com/u/3259215/robocode/bots/pez.mini.Pugilist_2.5.1f.jar<br />
pez.mini.Tityus 0.9.1,http://www.robocoderepository.com/BotFiles/1657/pez.mini.Tityus_0.9.1.jar<br />
pez.mini.VertiLeach 0.4.0,http://www.robocoderepository.com/BotFiles/1744/pez.mini.VertiLeach_0.4.0.jar<br />
pez.nano.Icarus 0.3,http://www.robocoderepository.com/BotFiles/2353/pez.nano.Icarus_0.3.jar<br />
pez.nano.LittleEvilBrother 0.1,http://www.robocoderepository.com/BotFiles/2056/pez.nano.LittleEvilBrother_0.1.jar<br />
pez.rumble.Ali 0.4.9,http://www.robocoderepository.com/BotFiles/2416/pez.rumble.Ali_0.4.9.jar<br />
pez.rumble.CassiusClay 2rho.02no,https://dl.dropboxusercontent.com/u/3259215/robocode/bots/pez.rumble.CassiusClay_2rho.02no.jar<br />
pfvicm.Sobieski 7.2.3b,http://www.robocoderepository.com/BotFiles/2911/pfvicm.Sobieski_7.2.3b.jar<br />
ph.micro.Pikeman 0.4.5,http://www.robocoderepository.com/BotFiles/2364/ph.micro.Pikeman_0.4.5.jar<br />
ph.mini.Archer 0.6.6,http://www.robocoderepository.com/BotFiles/2326/ph.mini.Archer_0.6.6.jar<br />
ph.musketeer.Musketeer 0.6,http://www.robocoderepository.com/BotFiles/2281/ph.musketeer.Musketeer_0.6.jar<br />
ph.Thinker 0.2.5,http://www.robocoderepository.com/BotFiles/2336/ph.Thinker_0.2.5.jar<br />
pi.Dark 10,http://robocode-archive.strangeautomata.com/robots/pi.Dark_10.jar<br />
pl.Drum 0.1,http://robocode-archive.strangeautomata.com/robots/pl.Drum_0.1.jar<br />
pl.mskiba.Hilton 0.4,https://dl.dropbox.com/u/1209595/robots/pl.mskiba.Hilton_0.4.jar<br />
pl.Patton.GeneralPatton 1.54,http://robocode-archive.strangeautomata.com/robots/pl.Patton.GeneralPatton_1.54.jar<br />
pla.Memnoch 0.5,http://www.robocoderepository.com/BotFiles/2211/pla.Memnoch_0.5.jar<br />
PK.Twardy 0.4.2,http://www.robocoderepository.com/BotFiles/3272/PK.Twardy_0.4.2.jar<br />
pkbots.BoyTDSurfer 1.0,http://robocode-archive.strangeautomata.com/robots/pkbots.BoyTDSurfer_1.0.jar<br />
pkdeken.Paladin 1.0,http://www.robocoderepository.com/BotFiles/3556/pkdeken.Paladin_1.0.jar<br />
PkKillers.PkAssassin 1.0,http://www.robocoderepository.com/BotFiles/3485/PkKillers.PkAssassin_1.0.jar<br />
pmc.SniperBot 1.0,http://robocode-archive.strangeautomata.com/robots/pmc.SniperBot_1.0.jar<br />
Polkwane.Piyane 0.7b,https://dl.dropbox.com/s/mztcvf13ab41or5/Polkwane.Piyane_0.7b.jar?token_hash=AAH-IVvOaiKm2CWOaEKosx9APzGrfMWF-jpbOJaY_bFnow&dl=1<br />
Polkwane.Intensive 1.0,http://robowiki.net/w/images/1/1d/Polkwane.Intensive_1.0.jar<br />
populations.TrainStoopidbot 0.01,http://www.robocoderepository.com/BotFiles/4052/populations.TrainStoopidbot_0.01.jar<br />
positive.Portia 1.26e,http://robocode-archive.strangeautomata.com/robots/positive.Portia_1.26e.jar<br />
povik.nano.Smilee 0.2.1,http://www.robocoderepository.com/BotFiles/3950/povik.nano.Smilee_0.2.1.jar<br />
projectx.ProjectNano 2.0,http://robocode-archive.strangeautomata.com/robots/projectx.ProjectNano_2.0.jar<br />
projectx.TestNano 1.0,http://www.robocoderepository.com/BotFiles/3444/projectx.TestNano_1.0.jar<br />
PSW.Relentless 0.1,http://www.robocoderepository.com/BotFiles/4082/PSW.Relentless_0.1.jar<br />
pulsar.PulsarMax 0.8.9,http://www.robocoderepository.com/BotFiles/2227/pulsar.PulsarMax_0.8.9.jar<br />
pulsar.PulsarNano 0.2.4,http://www.robocoderepository.com/BotFiles/2335/pulsar.PulsarNano_0.2.4.jar<br />
pulsar.Nanis 0.3,http://www.robocoderepository.com/BotFiles/2560/pulsar.Nanis_0.3.jar<br />
qohnil.blot.BlotBot 3.61,http://www.robocoderepository.com/BotFiles/546/qohnil.blot.BlotBot_3.61.jar<br />
qualidafial.MajorDick 1.0.1,https://www.dropbox.com/sh/n570kf8rsq6fuw2/vVQSIJJnAS/qualidafial.MajorDick_1.0.1.jar<br />
Queens_teamrobot.UltraRazor 1.0,http://www.robocoderepository.com/BotFiles/2108/Queens_teamrobot.UltraRazor_1.0.jar<br />
quietus.Invader 0.1,https://dl.dropboxusercontent.com/u/75978227/roborumble_refuge/quietus.Invader_0.1.jar<br />
quietus.NarrowRadar 0.1,https://dl.dropboxusercontent.com/u/75978227/roborumble_refuge/quietus.NarrowRadar_0.1.jar<br />
qwaker00.Gandhi 1.0.1mini,https://dl.dropbox.com/u/29826809/bots/qwaker00.Gandhi_1.0.1mini.jar<br />
qwaker00.Ahchoo 1.1.j6,https://dl.dropbox.com/u/29826809/bots/qwaker00.Ahchoo_1.1.j6.jar<br />
racso.Crono 1.0,http://oscargomez.net/files/racso.Crono_1.0.jar<br />
racso.Frog 0.9,http://oscargomez.net/files/racso.Frog_0.9.jar<br />
radnor.DoctorBob 1.42,http://www.robocoderepository.com/BotFiles/2133/radnor.DoctorBob_1.42.jar<br />
radnor.RamRod 1.0,http://www.robocoderepository.com/BotFiles/2085/radnor.RamRod_1.0.jar<br />
rampancy.Durandal 2.2d,https://github.com/aleksey-zhidkov/rc-repo-mirror/raw/master/rampancy.Durandal_2.2d.jar<br />
rampancy.micro.Epiphron 1.0,https://github.com/aleksey-zhidkov/rc-repo-mirror/raw/master/rampancy.micro.Epiphron_1.0.jar<br />
rapture.Rapture 2.13,http://www.robocoderepository.com/BotFiles/15/rapture.Rapture_2.13.jar<br />
ratosh.nano.Debo 1.36,http://www.robocoderepository.com/BotFiles/1702/ratosh.nano.Debo_1.36.jar<br />
ratosh.Nobo 0.21,http://www.robocoderepository.com/BotFiles/1612/ratosh.Nobo_0.21.jar<br />
ratosh.Wesco 1.4,http://www.robocoderepository.com/BotFiles/1914/ratosh.Wesco_1.4.jar<br />
rc.yoda.Yoda 1.0.6c.fix,https://dl.dropboxusercontent.com/u/75978227/roborumble_refuge/rc.yoda.Yoda_1.0.6c.fix.jar<br />
rc.RCBot 2.0,http://robocode-archive.strangeautomata.com/robots/rc.RCBot_2.0.jar<br />
rcb.Vanessa03 0,http://www.robocoderepository.com/BotFiles/1364/rcb.Vanessa03_0.jar<br />
rcp.Kuramatron 1.0,http://www.robocoderepository.com/BotFiles/3307/rcp.Kuramatron_1.0.jar<br />
rdt199.Warlord 0.73,http://www.robocoderepository.com/BotFiles/1130/rdt199.Warlord_0.73.jar<br />
reaper.Reaper 1.1,http://www.robocoderepository.com/BotFiles/3412/reaper.Reaper_1.1.jar<br />
reeder.caden.Elmo 1,http://reederhome.net/colin/Elmo_1.jar<br />
reeder.caden.Grover 1.0,http://reederhome.net/colin/Grover_1.0.jar<br />
reeder.colin.WallGuy3 1.0,http://reederhome.net/colin/WallGuy3_1.0.jar<br />
repositorio.NanoStep 1.0,http://robocode-archive.strangeautomata.com/robots/repositorio.NanoStep_1.0.jar<br />
rfj.Sunburn 1.1,http://www.robocoderepository.com/BotFiles/1060/rfj.Sunburn_1.1.jar<br />
rijteam.SmartDodge 1.1,http://www.robocoderepository.com/BotFiles/2959/rijteam.SmartDodge_1.1.jar<br />
rjw.RabidWombat 0.71,http://rjw.walkertribe.com/robocode/rjw.RabidWombat_0.71.jar<br />
rnatest.MendelBot 1.0,https://www.dropbox.com/s/ci2x5gxbtceo4r2/rnatest.MendelBot_1.0.jar<br />
robar.haiku.Spike 1.0,https://dl.dropboxusercontent.com/u/75978227/roborumble_refuge/robar.haiku.Spike_1.0.jar<br />
robar.micro.Gladius 1.15,https://dl.dropboxusercontent.com/u/75978227/roborumble_refuge/robar.micro.Gladius_1.15.jar<br />
robar.micro.Kirbyi 1.0,http://hunrobar.freeblog.hu/files/myrobots/robar.micro.Kirbyi_1.0.jar<br />
robar.micro.Topaz 0.25,https://dl.dropboxusercontent.com/u/75978227/roborumble_refuge/robar.micro.Topaz_0.25.jar<br />
robar.nano.Assertive 0.3,https://dl.dropboxusercontent.com/u/75978227/roborumble_refuge/robar.nano.Assertive_0.3.jar<br />
robar.nano.BlackWidow 1.3,http://www.robocoderepository.com/BotFiles/3574/robar.nano.BlackWidow_1.3.jar<br />
robar.nano.Breeze 0.3,http://hunrobar.freeblog.hu/files/myrobots/robar.nano.Breeze_0.3.jar<br />
robar.nano.Mosquito 1.1,http://hunrobar.freeblog.hu/files/myrobots/robar.nano.Mosquito_1.1.jar<br />
robar.nano.MosquitoPM 1.0,http://www.robocoderepository.com/BotFiles/3559/robar.nano.MosquitoPM_1.0.jar<br />
robar.nano.Prestige 1.0,http://www.robocoderepository.com/BotFiles/3507/robar.nano.Prestige_1.0.jar<br />
robar.nano.Pugio 1.49,http://www.robocoderepository.com/BotFiles/3710/robar.nano.Pugio_1.49.jar<br />
robar.nano.Scytodes 0.3,http://hunrobar.freeblog.hu/files/myrobots/robar.nano.Scytodes_0.3.jar<br />
robar.nano.Vespa 0.95,http://hunrobar.freeblog.hu/files/myrobots/robar.nano.Vespa_0.95.jar<br />
robin.SCALPBot 1.0,http://www.fairyapp.com.au/robin.SCALPBot_1.0.jar<br />
robo.PartsBot 1.1,http://robocode-archive.strangeautomata.com/robots/robo.PartsBot_1.1.jar<br />
RobotMarco.MarcoV 0.1,http://www.robocoderepository.com/BotFiles/3941/RobotMarco.MarcoV_0.1.jar<br />
romz.robot.circular.WildRabbit 0.9.6, https://dl.dropboxusercontent.com/u/19698591/robocode/romz.robot.circular.WildRabbit_0.9.6.jar<br />
romz.robot.guessfactor.TeasingFox 0.2, https://dl.dropboxusercontent.com/u/19698591/robocode/romz.robot.guessfactor.TeasingFox_0.2.jar<br />
romz.robot.Test 0.1.0, https://dl.dropboxusercontent.com/u/19698591/robocode/romz.robot.Test_0.1.0.jar<br />
rsim.micro.uCatcher 0.1,http://robocode-archive.strangeautomata.com/robots/rsim.micro.uCatcher_0.1.jar<br />
rsim.mini.BulletCatcher 0.4,http://www.robocoderepository.com/BotFiles/3737/rsim.mini.BulletCatcher_0.4.jar<br />
rsk1.RSK1 4.0,http://www.robocoderepository.com/BotFiles/3284/rsk1.RSK1_4.0.jar<br />
rtk.Tachikoma 1.0,http://www.robocoderepository.com/BotFiles/4121/rtk.Tachikoma1.0.jar<br />
ruc.nano.Zealot 0.2,http://www.robocoderepository.com/BotFiles/1229/ruc.nano.Zealot_0.2.jar<br />
rus.vv.Dzhigit 1.1,http://www.robocoderepository.com/BotFiles/4002/rus.vv.Dzhigit1.1.jar<br />
rus.vv.Snezhok 1.1,http://www.robocoderepository.com/BotFiles/3998/rus.vv.Snezhok1.1.jar<br />
ry.LightningBug 1.0,http://www.robocoderepository.com/BotFiles/3472/ry.LightningBug_1.0.jar<br />
ry.VirtualGunExperiment 1.2.0,http://www.robocoderepository.com/BotFiles/3662/ry.VirtualGunExperiment_1.2.0.jar<br />
ry.Worst 1.0,http://www.robocoderepository.com/BotFiles/3645/ry.Worst_1.0.jar<br />
rz.Aleph 0.34,http://www.robocoderepository.com/BotFiles/1993/rz.Aleph_0.34.jar<br />
rz.Apollon 0.23,http://www.robocoderepository.com/BotFiles/2098/rz.Apollon_0.23.jar<br />
rz.Artist 0.2,http://www.robocoderepository.com/BotFiles/2156/rz.Artist_0.2.jar<br />
rz.GlowBlow 2.31,http://www.robocoderepository.com/BotFiles/1354/rz.GlowBlow_2.31.jar<br />
rz.GlowBlowAPM 1.0,http://www.robocoderepository.com/BotFiles/1382/rz.GlowBlowAPM_1.0.jar<br />
rz.GlowBlowMelee 1.4,http://www.robocoderepository.com/BotFiles/1436/rz.GlowBlowMelee_1.4.jar<br />
rz.HawkOnFire 0.1,http://www.robocoderepository.com/BotFiles/1575/rz.HawkOnFire_0.1.jar<br />
rz.SmallDevil 1.502,http://www.robocoderepository.com/BotFiles/1322/rz.SmallDevil_1.502.jar<br />
sadoner.killer 0.2,http://www.robocoderepository.com/BotFiles/4020/sadoner.killer_0.2.jar<br />
sam.ChipmunkDuelist 1.0,http://www.robocoderepository.com/BotFiles/3094/sam.ChipmunkDuelist_1.0.jar<br />
sam.Samspin 1.0,http://www.robocoderepository.com/BotFiles/2823/sam.Samspin_1.0.jar<br />
sample.Corners 1.0,http://www.robocoderepository.com/BotFiles/1/sample.Corners_1.0.jar<br />
sample.Crazy 1.0,http://www.robocoderepository.com/BotFiles/2/sample.Crazy_1.0.jar<br />
sample.Fire 1.0,http://www.robocoderepository.com/BotFiles/3/sample.Fire_1.0.jar<br />
sample.MyFirstJuniorRobot 1.0,http://robocode-archive.strangeautomata.com//robots/sample.MyFirstJuniorRobot_1.0.jar<br />
sample.MyFirstRobot 1.0,http://www.robocoderepository.com/BotFiles/4/sample.MyFirstRobot_1.0.jar<br />
sample.RamFire 1.0,http://www.robocoderepository.com/BotFiles/5/sample.RamFire_1.0.jar<br />
sample.SittingDuck 1.0,http://www.robocoderepository.com/BotFiles/6/sample.SittingDuck_1.0.jar<br />
sample.SpinBot 1.0,http://www.robocoderepository.com/BotFiles/7/sample.SpinBot_1.0.jar<br />
sample.Target 1.0,http://www.robocoderepository.com/BotFiles/8/sample.Target_1.0.jar<br />
sample.Tracker 1.0,http://www.robocoderepository.com/BotFiles/9/sample.Tracker_1.0.jar<br />
sample.TrackFire 1.0,http://www.robocoderepository.com/BotFiles/10/sample.TrackFire_1.0.jar<br />
sample.VelociRobot 1.0,http://robocode-archive.strangeautomata.com//robots/sample.VelociRobot_1.0.jar<br />
sample.Walls 1.0,http://www.robocoderepository.com/BotFiles/11/sample.Walls_1.0.jar<br />
satan.R0 0.2,http://satan.so/robocode/satan.R0_0.2.jar<br />
satan.White 0.26,http://satan.so/robocode/satan.White_0.26.jar<br />
sanyi.mikrobi.Roberto 1.0,http://www.robocoderepository.com/BotFiles/3929/sanyi.mikrobi.Roberto_1.0.jar<br />
sch.Simone 0.3d,http://www.robocoderepository.com/BotFiles/374/sch.Simone_0.3d.jar<br />
serenity.moonlightBat 1.17,http://www.robocoderepository.com/BotFiles/2877/serenity.moonlightBat_1.17.jar<br />
serenity.nonSense 1.39,http://www.robocoderepository.com/BotFiles/3586/serenity.nonSense_1.39.jar<br />
serenity.serenityFire 1.29,https://github.com/aleksey-zhidkov/rc-repo-mirror/raw/master/serenity.serenityFire_1.29.jar<br />
SFS.SamsSecondRobot 1.0,http://www.robocoderepository.com/BotFiles/4148/SFS.SamsSecondRobot_1.0.jar<br />
sfergus.Terminator 1.0,https://dl.dropbox.com/u/16877681/sfergus.Terminator_1.0.jar<br />
sfergus.Terminator 1.2,https://dl.dropbox.com/u/16877681/sfergus.Terminator_1.2.jar<br />
sgp.JollyNinja 3.53,http://www.robocoderepository.com/BotFiles/183/sgp.JollyNinja_3.53.jar<br />
sgp.MadHatter 4.13,http://www.robocoderepository.com/BotFiles/156/sgp.MadHatter_4.13.jar<br />
sgp.nano.FurryLeech 1.0,http://www.robocoderepository.com/BotFiles/802/sgp.nano.FurryLeech_1.0.jar<br />
sgp.ShiningBeetle 1.1,http://www.robocoderepository.com/BotFiles/498/sgp.ShiningBeetle_1.1.jar<br />
sgp.SleepingGoat 1.1,http://www.robocoderepository.com/BotFiles/500/sgp.SleepingGoat_1.1.jar<br />
SHAM.WOW 1.4,http://robocode-archive.strangeautomata.com/robots/SHAM.WOW_1.4.jar<br />
sheldor.melee.nano.TestMelee 0.1,http://www.robocoderepository.com/BotFiles/4217/sheldor.melee.nano.TestMelee_0.1.jar<br />
sheldor.micro.EpeeistMicro 2.0.0,http://www.robocoderepository.com/BotFiles/4292/sheldor.micro.EpeeistMicro_2.0.0.jar<br />
sheldor.nano.Epeeist 1.1.0,http://www.robocoderepository.com/BotFiles/4237/sheldor.nano.Epeeist_1.1.0.jar<br />
sheldor.nano.Foilist 2.0.0,http://www.robocoderepository.com/BotFiles/4239/sheldor.nano.Foilist_2.0.0.jar<br />
sheldor.nano.PointInLine 1.0,http://www.robocoderepository.com/BotFiles/4207/sheldor.nano.PointInLine_1.0.jar<br />
sheldor.nano.PointInLineRRAL 1.0.0,http://www.robocoderepository.com/BotFiles/4259/sheldor.nano.PointInLineRRAL_1.0.0.jar<br />
sheldor.nano.Retreat 1.0,http://www.robocoderepository.com/BotFiles/4208/sheldor.nano.Retreat_1.0.jar<br />
sheldor.nano.Sabreur 1.1.2,http://www.robocoderepository.com/BotFiles/4257/sheldor.nano.Sabreur_1.1.2.jar<br />
sheldor.nano.Sabreuse 1.0.0,http://www.robocoderepository.com/BotFiles/4258/sheldor.nano.Sabreuse_1.0.0.jar<br />
shinh.Entangled 0.3,http://www.robocoderepository.com/BotFiles/1070/shinh.Entangled_0.3.jar<br />
shrub.Silver v048,http://www.robocoderepository.com/BotFiles/449/shrub.Silver_v048.jar<br />
shrub.Vapour v159,http://www.robocoderepository.com/BotFiles/2654/shrub.Vapour_v159.jar<br />
shu.nitro.LENIN .T34,http://www.robocoderepository.com/BotFiles/1956/shu.nitro.LENIN_.T34.jar<br />
sigterm.Sigterm 1.0,http://robocode-archive.strangeautomata.com/robots/sigterm.Sigterm_1.0.jar<br />
simonton.beta.LifelongObsession 0.5.1,http://www.robocoderepository.com/BotFiles/3195/simonton.beta.LifelongObsession_0.5.1.jar<br />
simonton.GFNano_D 3.1b,http://www.robocoderepository.com/BotFiles/3114/simonton.GFNano_D_3.1b.jar<br />
simonton.nano.WeekendObsession_S 1.7,http://www.robocoderepository.com/BotFiles/3117/simonton.nano.WeekendObsession_S_1.7.jar<br />
simonton.mega.SniperFrog 1.0.fix2,https://dl.dropboxusercontent.com/u/75978227/roborumble_refuge/simonton.mega.SniperFrog_1.0.fix2.jar<br />
simonton.micro.GFMicro 1.0,http://robocode-archive.strangeautomata.com/robots/simonton.micro.GFMicro_1.0.jar<br />
simonton.micro.WeeklongObsession 3.4.1,http://robocode-archive.strangeautomata.com/robots/simonton.micro.WeeklongObsession_3.4.1.jar<br />
simonton.mini.WeeksOnEnd 1.10.4,http://robocode-archive.strangeautomata.com/robots/simonton.mini.WeeksOnEnd_1.10.4.jar<br />
SK.SimpleKiller 1.0,http://www.robocoderepository.com/BotFiles/4129/SK.SimpleKiller_1.0.jar<br />
skm.butterfly 1.0,http://www.robocoderepository.com/BotFiles/3868/sean1.jar<br />
skm.Ryubot 1.0,http://www.robocoderepository.com/BotFiles/3594/skm.Ryubot_1.0.jar<br />
skm.PateranBotlock2 1.0,http://www.robocoderepository.com/BotFiles/3591/skm.PateranBotlock2_1.0.jar<br />
sL300.Mozart life,http://www.robocoderepository.com/BotFiles/1992/sL300.Mozart_life.jar<br />
sm.Devil 7.3,http://www.robocoderepository.com/BotFiles/1481/sm.Devil_7.3.jar<br />
sng.arco.Arco 0.0,http://www.robocoderepository.com/BotFiles/3279/sng.arco.Arco_0.0.jar<br />
sos.SOS 1.0,http://www.robocoderepository.com/BotFiles/3489/sos.SOS_1.0.jar<br />
spartancompany.Spartan2 1.0,http://robocode-archive.strangeautomata.com/robots/spartancompany.Spartan2_1.0.jar<br />
spin.Bugstard 0.012b,https://dl.dropbox.com/s/jvm89xy5z5911ws/spin.Bugstard_0.012b.jar?dl=1<br />
spinnercat.CopyKat 1.2.3,http://www.robocoderepository.com/BotFiles/3818/spinnercat.CopyKat_1.2.3.jar<br />
spinnercat.Limit .01,http://www.robocoderepository.com/BotFiles/3659/spinnercat.Limit_.01.jar<br />
spinnercat.Kitten 1.6,http://www.robocoderepository.com/BotFiles/3819/spinnercat.Kitten_1.6.jar<br />
spinnercat.haiku.Refrigerator 1.1,http://www.robocoderepository.com/BotFiles/3688/spinnercat.haiku.Refrigerator_1.1.jar<br />
spinnercat.mega.Tardis 1.2,http://www.robocoderepository.com/BotFiles/3692/spinnercat.mega.Tardis_1.2.jar<br />
spinnercat.Robovirus 2.718,http://www.robocoderepository.com/BotFiles/3657/spinnercat.Robovirus_2.718.jar<br />
sp.Megas.AGravitatorExcel 1.4,http://www.robocoderepository.com/BotFiles/4153/sp.Megas.AGravitatorExcel_1.4.jar<br />
sp.Minis.Survival 1.0,http://robocode-archive.strangeautomata.com/robots/sp.Minis.Survival_1.0.jar?attredirects=0&d=1<br />
sp.Megas.Trident 2.7,http://robocode-archive.strangeautomata.com/robots/sp.Megas.Trident_2.7.jar?attredirects=0&d=1<br />
sp.Micros.WallAvoider 1.0,http://robocode-archive.strangeautomata.com/robots/sp.Micros.WallAvoider_1.0.jar?attredirects=0&d=1<br />
sp.Minis.LNightHawk 1.2,http://www.robocoderepository.com/BotFiles/4166/sp.Minis.LNightHawk_1.2.jar<br />
sp.Nanos.CopyMachine 1.0,http://www.robocoderepository.com/BotFiles/4172/sp.Nanos.CopyMachine_1.0.jar<br />
sqTank.waveSurfing.LionWWSVMvoid 0.01,http://www.robocoderepository.com/BotFiles/3436/sqTank.waveSurfing.LionWWSVMvoid_0.01.jar<br />
squidM.SquidmanNano 1.0,https://dl.dropboxusercontent.com/u/75978227/roborumble_refuge/squidM.SquidmanNano_1.0.jar<br />
squidM.SurfinUSA 1.0,https://dl.dropboxusercontent.com/u/75978227/roborumble_refuge/squidM.SurfinUSA_1.0.jar<br />
starpkg.StarViewerZ 1.26,http://www.robocoderepository.com/BotFiles/1931/starpkg.StarViewerZ_1.26.jar<br />
staticline.whiskey.Whiskey 0.6,https://dl.dropboxusercontent.com/u/75978227/roborumble_refuge/staticline.whiskey.Whiskey_0.6.jar<br />
stefw.Tigger 0.0.23,http://robocode-archive.strangeautomata.com/robots/stefw.Tigger_0.0.23.jar<br />
stelo.Chord 1.0,http://robocode-archive.strangeautomata.com/robots/stelo.Chord_1.0.jar<br />
stelo.FretNano 1.1,http://robocode-archive.strangeautomata.com/robots/stelo.FretNano_1.1.jar<br />
stelo.Lifestealer 1.0,http://robocode-archive.strangeautomata.com/robots/stelo.Lifestealer_1.0.jar<br />
stelo.MatchupMini 1.1,http://robocode-archive.strangeautomata.com/robots/stelo.MatchupMini_1.1.jar<br />
stelo.MatchupMicro 1.2,http://robocode-archive.strangeautomata.com/robots/stelo.MatchupMicro_1.2.jar<br />
stelo.MatchupAGF 1.1,http://robocode-archive.strangeautomata.com/robots/stelo.MatchupAGF_1.1.jar<br />
stelo.MatchupWS 1.2c,http://robocode-archive.strangeautomata.com/robots/stelo.MatchupWS_1.2c.jar<br />
stelo.Mirror 1.1,http://www.robocoderepository.com/BotFiles/3034/stelo.Mirror_1.1.jar<br />
stelo.MirrorMicro 1.1,http://robocode-archive.strangeautomata.com/robots/stelo.MirrorMicro_1.1.jar<br />
stelo.MirrorNano 1.4,http://robocode-archive.strangeautomata.com/robots/stelo.MirrorNano_1.4.jar<br />
stelo.MoojukNano 1.2,http://robocode-archive.strangeautomata.com/robots/stelo.MoojukNano_1.2.jar<br />
stelo.PastFuture 2.1.9,http://www.robocoderepository.com/BotFiles/3910/stelo.PastFuture_2.1.9.jar<br />
stelo.PatternRobot 1.0,http://www.robocoderepository.com/BotFiles/2995/stelo.PatternRobot_1.0.jar<br />
stelo.PianistNano 1.3,http://robocode-archive.strangeautomata.com/robots/stelo.PianistNano_1.3.jar<br />
stelo.RamTrackSurfer 1.2,http://robocode-archive.strangeautomata.com/robots/stelo.RamTrackSurfer_1.2.jar<br />
stelo.Randomness 1.1,http://www.robocoderepository.com/BotFiles/3021/stelo.Randomness_1.1.jar<br />
stelo.Spread 0.3,http://www.robowiki.net/w/images/a/a5/Stelo.Spread_0.3.jar<br />
stelo.SteloTestNano 1.0,http://robocode-archive.strangeautomata.com/robots/stelo.SteloTestNano_1.0.jar<br />
stelo.UnfoolableNano 1.0,http://robocode-archive.strangeautomata.com/robots/stelo.UnfoolableNano_1.0.jar<br />
stelo.UntouchableNano 1.4,http://robocode-archive.strangeautomata.com/robots/stelo.UntouchableNano_1.4.jar<br />
step.nanoPri 1.0,http://www.robocoderepository.com/BotFiles/2996/step.nanoPri_1.0.jar<br />
step.NanoBidu 1.0,http://www.robocoderepository.com/BotFiles/3014/step.NanoBidu_1.0.jar<br />
stf.PanzerGeneral 0.1,http://www.robocoderepository.com/BotFiles/2233/stf.PanzerGeneral_0.1.jar<br />
stordy.StordyBot 1.0,http://robocode-archive.strangeautomata.com/robots/stordy.StordyBot_1.0.jar<br />
strider.Festis 1.2.1,http://www.robocoderepository.com/BotFiles/2355/strider.Festis_1.2.1.jar<br />
strider.Mer 1.1.0,http://www.robocoderepository.com/BotFiles/2360/strider.Mer_1.1.0.jar<br />
stuff.Vlad 0.1,http://www.robocoderepository.com/BotFiles/3701/stuff.Vlad_0.1.jar<br />
sul.NanoR2 1.32,http://www.robocoderepository.com/BotFiles/3348/sul.NanoR2_1.32.jar<br />
sul.Pinkbot 1.1,http://www.robocoderepository.com/BotFiles/3346/sul.Pinkbot_1.1.jar<br />
sul.Bicephal 1.2,http://www.robocoderepository.com/BotFiles/3343/sul.Bicephal_1.2.jar<br />
sul.BlueBot 1.0,http://www.robocoderepository.com/BotFiles/3347/sul.BlueBot_1.0.jar<br />
supersample.SuperBoxBot 1.0,http://www.robocoderepository.com/BotFiles/3994/supersample.SuperBoxBot_1.0.jar<br />
supersample.SuperCorners 1.0,http://robocode-archive.strangeautomata.com//robots/supersample.SuperCorners_1.0.jar<br />
SuperSample.SuperCrazy 1.0,http://robocode-archive.strangeautomata.com/robots/SuperSample.SuperCrazy_1.0.jar<br />
supersample.SuperMercutio 1.0,http://robocode-archive.strangeautomata.com//robots/supersample.SuperMercutio_1.0.jar<br />
supersample.SuperRamFire 1.0,http://robocode-archive.strangeautomata.com//robots/supersample.SuperRamFire_1.0.jar<br />
supersample.SuperSpinBot 1.0,http://robocode-archive.strangeautomata.com//robots/supersample.SuperSpinBot_1.0.jar<br />
supersample.SuperTracker 1.0,http://robocode-archive.strangeautomata.com//robots/supersample.SuperTracker_1.0.jar<br />
supersample.SuperTrackFire 1.0,http://robocode-archive.strangeautomata.com//robots/supersample.SuperTrackFire_1.0.jar<br />
supersample.SuperWalls 1.0,http://robocode-archive.strangeautomata.com//robots/supersample.SuperWalls_1.0.jar<br />
syl.Centipede 0.5,http://www.robocoderepository.com/BotFiles/1254/syl.Centipede_0.5.jar<br />
synapse.Geomancy 15,http://robocode-archive.strangeautomata.com/robots/synapse.Geomancy_15.jar<br />
synapse.rsim.GeomancyBS 0.11,http://robocoderepository.com/BotFiles/3758/synapse.rsim.GeomancyBS_0.11.jar<br />
synnalagma.NeuralPremier 0.51,http://www.robocoderepository.com/BotFiles/1557/synnalagma.NeuralPremier_0.51.jar<br />
synnalagma.test.MiniNeural 1.1,http://www.robocoderepository.com/BotFiles/1754/synnalagma.test.MiniNeural_1.1.jar<br />
tad.Dalek98 0.98,http://robocode-archive.strangeautomata.com/robots/tad.Dalek98_0.98.jar<br />
takeBot.SpinSpiral 1.2,http://www.robocoderepository.com/BotFiles/312/takeBot.SpinSpiral_1.2.jar<br />
takeBot.SpiralCrash 1.0,http://www.robocoderepository.com/BotFiles/1013/takeBot.SpiralCrash_1.0.jar<br />
takeBot.WeavingWiggle 1.1,http://www.robocoderepository.com/BotFiles/1012/takeBot.WeavingWiggle_1.1.jar<br />
tango.Recrimpo 2.51,http://www.robocoderepository.com/BotFiles/2015/tango.Recrimpo_2.51.jar<br />
taqho.taqbot 1.0,http://www.robocoderepository.com/BotFiles/1316/taqho.taqbot_1.0.jar<br />
tcf.Drifter 29,http://www.7sun.com/robocode/robots/tcf.Drifter_29.jar<br />
tcf.Repat3 2,http://www.robocoderepository.com/BotFiles/3328/tcf.Repat3_2.jar<br />
TCMI.Enyo 0.4,http://www.timthegeek.com/other/robocode/TCMI.Enyo_0.4.jar<br />
TCMI.nano.Copper 0.2,http://www.timthegeek.com/other/robocode/TCMI.nano.Copper_0.2.jar<br />
techdude.kombat.FlamingKombat 1.5,http://www.robocoderepository.com/BotFiles/2810/techdude.kombat.FlamingKombat_1.5.jar<br />
techdude.Class2C.Class2C 0.1,http://www.robocoderepository.com/BotFiles/3078/techdude.Class2C.Class2C_0.1.jar<br />
test.Podgy 4.0,http://www.robocoderepository.com/BotFiles/3214/test.Podgy_4.0.jar<br />
test.Fuzzer 1.0.1,http://www.robocoderepository.com/BotFiles/3345/test.Fuzzer_1.0.1.jar<br />
tex.Longbot 0.4,https://sites.google.com/a/pelt.cc/pelt/home/my-roborcode-project/tex.Longbot_0.4.jar?attredirects=0&d=1<br />
testantiswapgun.AntiSwap 1.0,https://github.com/aleksey-zhidkov/rc-repo-mirror/raw/master/testantiswapgun.AntiSwap_1.0.jar<br />
throxbot.ThroxBot 0.1,http://www.robocoderepository.com/BotFiles/2548/throxbot.ThroxBot_0.1.jar<br />
tide.pear.Pear 0.62.1,http://www.robocoderepository.com/BotFiles/2393/tide.pear.Pear_0.62.1.jar<br />
timmit.micro.TimXJ 0.22,http://www.robocoderepository.com/BotFiles/1683/timmit.micro.TimXJ_0.22.jar<br />
timmit.mini.TimVA 0.43,http://www.robocoderepository.com/BotFiles/1681/timmit.mini.TimVA_0.43.jar<br />
timmit.nano.TimCat 0.13,http://www.robocoderepository.com/BotFiles/1600/timmit.nano.TimCat_0.13.jar<br />
timmit.nano.TimDog 0.33,http://www.robocoderepository.com/BotFiles/1602/timmit.nano.TimDog_0.33.jar<br />
timmit.TimmiT 0.22,http://www.robocoderepository.com/BotFiles/1468/timmit.TimmiT_0.22.jar<br />
TJ.Exupery 1.39,http://www.robocoderepository.com/BotFiles/3970/TJ.Exupery1.39.jar<br />
tjk.AFlatNatural 1.0,https://dl.dropboxusercontent.com/u/75978227/tjk.AFlatNatural_1.0.jar<br />
tjk.deBroglie rev0108,https://dl.dropboxusercontent.com/u/75978227/tjk.deBroglie_rev0108.jar<br />
tkt.RedShift 1.1.CS.0,https://github.com/ttaomae/robocode-tkt-redshift/raw/codesize/release/tkt.RedShift_1.1.CS.0.jar<br />
tlp.ThreeLeggedPig 1,https://dl.dropboxusercontent.com/u/75978227/roborumble_refuge/tlp.ThreeLeggedPig_1.jar<br />
tm.Yuugao 1.0,http://www.robocoderepository.com/BotFiles/1056/tm.Yuugao_1.0.jar<br />
tobe.calypso.Calypso 4.1,http://www.robocoderepository.com/BotFiles/784/tobe.calypso.Calypso_4.1.jar<br />
tobe.Fusion 1.0,http://www.robocoderepository.com/BotFiles/649/tobe.Fusion_1.0.jar<br />
tobe.mini.Charon 0.9,http://www.robocoderepository.com/BotFiles/836/tobe.mini.Charon_0.9.jar<br />
tobe.Relativity 3.9,http://www.robocoderepository.com/BotFiles/360/tobe.Relativity_3.9.jar<br />
tobe.Saturn lambda,http://www.robocoderepository.com/BotFiles/685/tobe.Saturn_lambda.jar<br />
tornyil.bottomup.BottomUp 1.05,http://www.alpha-consulting.hu/robo/tornyil.bottomup.BottomUp_1.05.jar<br />
tornyil.Lajcsi2.Lajcsi2sm 1.0,http://www.alpha-consulting.hu/robo/tornyil.Lajcsi2.Lajcsi2sm_1.0.jar<br />
toz.Gnome 1.1,http://robocode-archive.strangeautomata.com/robots/toz.Gnome_1.1.jar<br />
trab.Crusader 0.1.7,http://www.stud.ntnu.no/~grashei/bots/trab.Crusader_0.1.7.jar<br />
trab.nano.AinippeNano 1.3,http://www.stud.ntnu.no/~grashei/bots/trab.nano.AinippeNano_1.3.jar<br />
traker.Eraser 1,http://robocode-archive.strangeautomata.com/robots/traker.Eraser_1.jar<br />
tvv.micro.Antares 1.1.1,https://sites.google.com/site/tvvrobots/tvv.micro.Antares_1.1.1.jar?attredirects=0&d=1<br />
tvv.nano.Polaris 1.2,https://sites.google.com/site/tvvrobots/tvv.nano.Polaris_1.2.jar?attredirects=0&d=1<br />
tw.Exterminator 1.0,http://www.robocoderepository.com/BotFiles/3607/tw.Exterminator_1.0.jar<br />
tzu.TheArtOfWar 1.2,http://robocode-archive.strangeautomata.com/robots/tzu.TheArtOfWar_1.2.jar<br />
ua.kiiv.kosyak.robocode.tn1.Tn1 2.0,http://www.robocoderepository.com/BotFiles/4072/ua.kiiv.kosyak.robocode.tn1.Tn1_2.0.jar<br />
uccc.Dorito 1.12,https://github.com/aleksey-zhidkov/rc-repo-mirror/raw/master/uccc.Dorito_1.12.jar<br />
uccc.MilkyWay 1.01,https://github.com/aleksey-zhidkov/rc-repo-mirror/raw/master/uccc.MilkyWay_1.01.jar<br />
uccc.RingDing 1.12,https://github.com/aleksey-zhidkov/rc-repo-mirror/raw/master/uccc.RingDing_1.12.jar<br />
uccc.Scrapple 1.0,https://github.com/aleksey-zhidkov/rc-repo-mirror/raw/master/uccc.Scrapple_1.0.jar<br />
ultra.Defender 1.2,http://teamgallego.com/dl/bots/ultra.Defender_1.2.jar<br />
unarmedlad.nano.VirginSteele 2.2,https://dl.dropbox.com/s/nt32eas7mzp7wbe/unarmedlad.nano.VirginSteele_2.2.jar<br />
urdos.URDOS 1.3,http://robocode-archive.strangeautomata.com/robots/urdos.URDOS_1.3.jar<br />
usa.nano.Nemo 2.0,http://www.robocoderepository.com/BotFiles/2045/usa.nano.Nemo_2.0.jar<br />
vic.Locke 0.7.5.5,http://www.robocoderepository.com/BotFiles/2115/vic.Locke_0.7.5.5.jar<br />
vft.Valkyrie 1.0,http://www.robocoderepository.com/BotFiles/3009/vft.Valkyrie_1.0.jar<br />
vft.Hrist 1.0,http://robocode-archive.strangeautomata.com/robots/vft.Hrist_1.0.jar<br />
vjik.UnViolation 1.1,http://www.robocoderepository.com/BotFiles/3886/vjik.UnViolation_1.1.jar<br />
voidious.Diamond 1.8.22,http://www.dijitari.com/void/robocode/voidious.Diamond_1.8.22.jar<br />
voidious.Dookious 1.573c,https://dl.dropbox.com/u/72179384/voidious.Dookious_1.573c.jar<br />
voidious.micro.Jen 1.11,https://dl.dropbox.com/u/72179384/voidious.micro.Jen_1.11.jar<br />
voidious.mini.Komarious 1.88,https://dl.dropbox.com/u/72179384/voidious.mini.Komarious_1.88.jar<br />
voidious.perceptual.RetroGirl 1.0.0,https://dl.dropbox.com/u/72179384/voidious.perceptual.RetroGirl_1.0.0.jar<br />
vort.Chaser 0.0.3,https://github.com/Vort/Chaser/blob/master/packed/vort.Chaser_0.0.3.jar?raw=true<br />
vuen.Fractal 0.55,http://www.robocoderepository.com/BotFiles/1579/vuen.Fractal_0.55.jar<br />
WarfaJibril.Jibril_Warfa_Andromeda 1.11,http://www.robocoderepository.com/BotFiles/4089/WarfaJibril.Jibril_Warfa_Andromeda_1.11.jar<br />
wcsv.Engineer.Engineer 0.5.4,http://robocode-archive.strangeautomata.com/robots/wcsv.Engineer.Engineer_0.5.4.jar<br />
wcsv.PowerHouse.PowerHouse 1.7e3,http://robocode-archive.strangeautomata.com/robots/wcsv.PowerHouse.PowerHouse_1.7e3.jar<br />
wcsv.mega.PowerHouse2 0.2,http://robocode-archive.strangeautomata.com/robots/wcsv.mega.PowerHouse2_0.2.jar<br />
wcsv.Stampede 1.3.3,http://www.robocoderepository.com/BotFiles/2527/wcsv.Stampede_1.3.3.jar<br />
wcsv.Stampede2.Stampede2 1.1.0,http://www.robocoderepository.com/BotFiles/2714/wcsv.Stampede2.Stampede2_1.1.0.jar<br />
WdV.Lesserbee 0.01,http://www.robocoderepository.com/BotFiles/4046/WdV.Lesserbee_0.01.jar<br />
whind.Constitution 0.7.1,http://www.robocoderepository.com/BotFiles/2812/whind.Constitution_0.7.1.jar<br />
whind.Strength 0.6.4,https://github.com/aleksey-zhidkov/rc-repo-mirror/raw/master/whind.Strength_0.6.4.jar<br />
whind.StrengthBee 0.6.4,http://whindgames.50webs.com/otherstuff/whind.StrengthBee_0.6.4.jar<br />
whind.Wisdom 0.5.1,http://www.robocoderepository.com/BotFiles/2742/whind.Wisdom_0.5.1.jar<br />
whitesquare.robots.SkynetAdvanced 1.1,https://dl.dropbox.com/s/6epm51goxqp7p0h/whitesquare.robots.SkynetAdvanced_1.1.jar?dl=1<br />
WidowMakersAtWar.EpicCow 1.0,https://sites.google.com/site/dereksrobots/home/epiccow/WidowMakersAtWar.EpicCow_1.0.jar?attredirects=0&d=1<br />
wiki.BasicBulletShielder 1.0,http://robocode-archive.strangeautomata.com/robots/wiki.BasicBulletShielder_1.0.jar<br />
wiki.BasicGFSurfer 1.02,http://robocode-archive.strangeautomata.com/robots/wiki.BasicGFSurfer_1.02.jar<br />
wiki.mako.MakoHT 1.2.2.1,http://www.robocoderepository.com/BotFiles/1374/wiki.mako.MakoHT_1.2.2.1.jar<br />
wiki.mini.BlackDestroyer 0.9.0,http://www.robocoderepository.com/BotFiles/1927/wiki.mini.BlackDestroyer_0.9.0.jar<br />
wiki.mini.GouldingiHT 1.0,http://www.robocoderepository.com/BotFiles/1383/wiki.mini.GouldingiHT_1.0.jar<br />
wiki.mini.Griffon 0.1,http://www.robocoderepository.com/BotFiles/1774/wiki.mini.Griffon_0.1.jar<br />
wiki.mini.Sedan 1.0,http://www.robocoderepository.com/BotFiles/1676/wiki.mini.Sedan_1.0.jar<br />
wiki.nano.DevilFISH 1.0,http://www.robocoderepository.com/BotFiles/2235/wiki.nano.DevilFISH_1.0.jar<br />
wiki.nano.RaikoNano 1.1,http://www.robocoderepository.com/BotFiles/2163/wiki.nano.RaikoNano_1.1.jar<br />
wiki.SuperSampleBot.SuperSittingDuck 1.0,http://robocode-archive.strangeautomata.com/robots/wiki.SuperSampleBot.SuperSittingDuck_1.0.jar<br />
wiki.WaveRammer 1.0,http://www.robocoderepository.com/BotFiles/3505/wiki.WaveRammer_1.0.jar<br />
wiki.Wolverine 2.1,http://robocode-archive.strangeautomata.com/robots/wiki.Wolverine_2.1.jar<br />
wilson.Chameleon 0.91,http://www.robocoderepository.com/BotFiles/1608/wilson.Chameleon_0.91.jar<br />
winamp32.micro.MicroMacro 1.0,http://www.robocoderepository.com/BotFiles/2891/winamp32.micro.MicroMacro_1.0.jar<br />
wit.Chuliath 1.0,http://www.robocoderepository.com/BotFiles/2306/wit.Chuliath_1.0.jar<br />
wit.Deep7 2.0,http://www.robocoderepository.com/BotFiles/2313/wit.Deep7_2.0.jar<br />
wompi.Kowari 1.6,http://www.casepool.de/robocode/wompi.Kowari_1.6.jar<br />
wompi.Numbat 1.9,http://www.casepool.de/robocode/wompi.Numbat_1.9.jar<br />
xander.cat.Fiona 1.4,http://www.distantvisions.net/robocode/xander.cat.Fiona_1.4.jar<br />
xander.cat.Mikey 1.2,http://www.distantvisions.net/robocode/xander.cat.Mikey_1.2.jar<br />
xander.cat.SamAxe 1.1,http://www.distantvisions.net/robocode/xander.cat.SamAxe_1.1.jar<br />
xander.cat.Spitfire 1.4,http://www.distantvisions.net/robocode/xander.cat.Spitfire_1.4.jar<br />
xander.cat.XanderCat 12.6,http://www.distantvisions.net/robocode/xander.cat.XanderCat_12.6.jar<br />
xiongan.Xiongan 1.1,http://www.robocoderepository.com/BotFiles/3565/xiongan.Xiongan_1.1.jar<br />
yagami.Tidus 0.11,http://www.robocoderepository.com/BotFiles/4123/yagami.Tidus_0.11.jar<br />
yarghard.Y101 1.0,https://github.com/aleksey-zhidkov/rc-repo-mirror/raw/master/yarghard.Y101_1.0.jar<br />
yabot.YaBot 0.1,http://robocode-archive.strangeautomata.com/robots/yabot.YaBot_0.1.jar<br />
yk.JahMicro 1.0,http://www.robocoderepository.com/BotFiles/3033/yk.JahMicro_1.0.jar<br />
yk.JahRoslav 1.1,http://www.robocoderepository.com/BotFiles/3032/yk.JahRoslav_1.1.jar<br />
zen.Lindada 0.2,http://www.robocoderepository.com/BotFiles/1679/zen.Lindada_0.2.jar<br />
zeze2.OperatorZeze 1.05,http://www.robocoderepository.com/BotFiles/3330/zeze2.OperatorZeze_1.05.jar<br />
zch.David 0.21,http://www.robocoderepository.com/BotFiles/3575/zch.David_0.21.jar<br />
zch.Hirkan 0.11,http://www.robocoderepository.com/BotFiles/1288/zch.Hirkan_0.11.jar<br />
zh.UnderDog 0.0.2,http://www.robocoderepository.com/BotFiles/3053/zh.UnderDog_0.0.2.jar<br />
zignd.ZigIndexOutOfRange 1.1,https://dl.dropboxusercontent.com/s/fbq6nfybjjemp34/zignd.ZigIndexOutOfRange_1.1.jar<br />
zyx.mega.YersiniaPestis 3.0,http://robocode-archive.strangeautomata.com/robots/zyx.mega.YersiniaPestis_3.0.jar<br />
zyx.micro.Ant 1.1,http://www.robocoderepository.com/BotFiles/3481/zyx.micro.Ant_1.1.jar<br />
zyx.nano.Ant 1.1,http://www.robocoderepository.com/BotFiles/3493/zyx.nano.Ant_1.1.jar<br />
zyx.nano.EscherichiaColi 1.0,http://robocode-archive.strangeautomata.com/robots/zyx.nano.EscherichiaColi_1.0.jar<br />
zyx.nano.RedBull 1.0,http://robocode-archive.strangeautomata.com/robots/zyx.nano.RedBull_1.0.jar<br />
zzx.Ignohis 8.0,https://sites.google.com/site/devonrobots/home/wave-surfers/zzx.Ignohis_8.0.jar?attredirects=0&d=1<br />
zzx.StormHead 1.0.1,http://robocoderepository.com/BotFiles/4193/zzx.StormHead_1.0.1.jar<br />
zzx.Gron 1.14,http://robocoderepository.com/BotFiles/4194/zzx.Gron_1.14.jar<br />
zzx.Serunyr 2.0.2,https://github.com/aleksey-zhidkov/rc-repo-mirror/raw/master/zzx.Serunyr_2.0.2.jar<br />
</pre><br />
----<br />
'''''No chatting on this page. Use the /ParticipantsChat page for that.'''''<br />
<br />
'''''Removed due to Out Of Memory Exceptions against top bots'''''<br />
cs.ags.Scarlet 1.1c,http://file.csdgn.org/robocode/cs.ags.Scarlet_1.1c.jar<br />
<br />
'''''Removed because the jarcontent/filename is not correct'''''<br><br />
''cberendt.Bot1 0.160''<br><br />
''dmsr.MiniR101 0.6''<br><br />
''henriquevilela.TieFighter 0.1,3224''<br><br />
''jgap.Aspirant_7980_gen7 1.0,3552''br><br />
''jgap.Aspirant_13029_gen7 1.0,3553''<br><br />
''techdude.Carruthers 1.2.6''<br><br />
''uccc.Orbiter 1.0''<br><br />
''WhoAmI.WhoAmI 1.00''<br><br />
Nucleii.ED4 1.0,http://www.robocoderepository.com/BotFiles/4091/Nucleii.ED4_1.0.jar<br />
<br />
'''''Removed due to being a team'''''<br />
sp.Minis.GeneBotUpgrade 1.1,http://robocode-archive.strangeautomata.com/robots/sp.Minis.GeneBotUpgrade_1.1.jar?attredirects=0&d=1<br />
<br />
'''''Removed until file corruption is resolved:'''''<br />
<br />
''cas.CelsoKiller 1.0,3465''<br />
<br />
'''''Removed due to almost always giving '0' scores:'''''<br />
<br />
''lazarecki.PinkerStinker 0.1,http://www.robocoderepository.com/BotFiles/3824/lazarecki.PinkerStinker_0.1.jar''<br />
<br />
'''''Removed because it's incorrectly packaged:'''''<br />
<br />
''Indesh.Indesh 1.1,http://jakobserlier.250free.com/Indesh.jar''<br />
<br />
''loganom.FirstRobot 0.1, http://www.loganom.com/robocode/loganom.FirstRobot_0.1.jar''<br />
<br />
'''''Removed due to invalid line'''''<br />
<br />
''Legend.LNightHawk,http://robocoderepository.com/BotFiles/4167/Legend.LNightHawk.class''<br><br />
''WidowMakersAtWar.Hollow,http://http://www.robocoderepository.com/BotDetail/4169/WidowMakersAtWar.Hollow.jar''<br />
<br />
'''''Removed due to requiring Java 7'''''<br />
<br />
''fromHell.C4H10O 1.5,http://fromhell.schreiende-stille.de/Robocode/Java/fromHell.C4H10O_1.5.jar''<br><br />
''stranger.nano.TestBot 1.0,https://dl.dropboxusercontent.com/u/18119890/stranger.nano.TestBot_1.0.jar''<br><br />
''com.timothyveletta.FuzzyBot 1.1,https://github.com/aleksey-zhidkov/rc-repo-mirror/raw/master/com.timothyveletta.FuzzyBot_1.1.jar''<br />
<br />
----<br />
<br />
'''''Removed due to WontFix issues in Robocode 1.7+:'''''<br><br />
''* Hviela: ([[http://sourceforge.net/tracker/?func=detail&aid=2953268&group_id=37202&atid=419486 SF #2953268]])''<br><br />
'': hvilela.HVilela 0.9.3,http://henrique.vilela.googlepages.com/hvilela.HVilela_0.9.3.jar''<br><br />
''* Barney (Tries to write files without using RobocodeOutputStream. Robocode 1.7 punishes for that more harshly which will give 0 scores)<br><br />
'': Homer.Barney 1.0,http://www.robocoderepository.com/BotFiles/1932/Homer.Barney_1.0.jar<br></div>RobertWalkerhttp://robowiki.net/w/index.php?title=User:RobertWalker&diff=31210User:RobertWalker2013-06-22T18:02:38Z<p>RobertWalker: /* .plan */ Updated (Finally!)</p>
<hr />
<div>== Background ==<br />
I'm (current year - 1977) years old and work as a software developer in Salt Lake City, Utah. Started robocoding in 2007 after a co-worker suggested having a Robocode tournament at work after a long, painful software release cycle. Apparently, I was more interested than the rest of the company; the bot I built (and am still working on in my copious spare time) seems to have scared everyone else off. I have a [http://robert.walkertribe.com fledgling blog] to which I (very) occasionally post.<br />
<br />
== My bots ==<br />
* '''[[PluggableRobot]]''': A robot framework that provides a pluggable architecture and sophisticated [[Event Management|event management]].<br />
* '''[[RabidWombat]]''': My first robot, built on top of the [[PluggableRobot]] framework. A bit too rough yet to release into the wild.<br />
<br />
== .plan ==<br />
Just released RabidWombat on the rumble after years of not Robocoding, with the objective of motivating me to improve it.<br />
<br />
[[Category:Bot Authors|RobertWalker]]</div>RobertWalkerhttp://robowiki.net/w/index.php?title=RabidWombat&diff=31209RabidWombat2013-06-22T18:00:48Z<p>RobertWalker: RabidWombat is now live on the rumble</p>
<hr />
<div>{{Infobox Robot<br />
| image = RabidWombat.jpg<br />
| name = RabidWombat<br />
| author = [[RobertWalker]]<br />
| extends = [[PluggableRobot]]<br />
| targeting = [[VirtualGuns|Virtual gun array]]:<br />
:[[HeadOnTargeting|head-on]]<br />
:[[LinearTargeting|linear]]<br />
:[[CircularTargeting|circular]]<br />
:[[GuessFactorGun|guess factor]]<br />
| movement = [[AntiGravityMovement|antigravity]]<br />
| license = no license selected yet<br />
| isOneOnOne = true<br />
| isMelee = false<br />
| isOpenSource = true<br />
}}<br />
== News ==<br />
After not having Robocoded in quite some time, and at the prompting of a co-worker, I bit the bullet and entered RabidWombat into [[RoboRumble]]. Hopefully this will motivate me to improve it some more.<br />
<br />
== Background Info ==<br />
; What's special about it?<br />
: Nothing, particularly. Just another bot.<br />
<br />
; Great, I want to try it. Where can I download it?<br />
: [http://rjw.walkertribe.com/robocode/rjw.RabidWombat_0.7.jar RabidWombat 0.7]<br />
<br />
; How competitive is it?<br />
: It's not done yet, so it's not that competitive. It beats the [[SampleBots]], of course. I've also been pitting it against [[SpareParts]] with good success.<br />
<br />
== Strategy ==<br />
; How does it [[Movement|move]]?<br />
: It uses a variation of [[AntiGravityMovement|antigravity movement]]. The enemy robot exerts an attractive or repulsive force on RabidWombat, depending on how far away it is, in order to maintain a particular distance from the enemy. (It's pretty much working on [http://en.wikipedia.org/wiki/Hooke%27s_Law Hooke's law].) That distance grows if RabidWombat is losing and shrinks if it's winning, so that it'll run away or close in for the kill as appropriate. Walls exert a repulsive force when RabidWombat gets close enough to them, which gets stronger the closer it is. Bullet dodging is also done with force vectors (see below).<br />
<br />
; How does it fire?<br />
: It has a virtual gun array containing (currently) a [[HeadOnTargeting|head-on targeting gun]], a [[LinearTargeting|linear targeting gun]], a [[CircularTargeting|circular targeting gun]] and a [[GuessFactorGun|guess factor gun]]. (I suppose the linear targeting gun is probably redundant.) It fires [[Waves|waves]] (for guess factor targeting) and [[VirtualBullets|virtual bullets]] (for tracking the success of the various guns) every turn and fires the real bullets with the best gun. Stats decay over time so that it will adapt more readily to changes in enemy behavior. I might add a [[PatternMatching|pattern matching gun]] to the array.<br />
<br />
; How does it [[DodgingBullets|dodge bullets]]?<br />
: For the moment, it assumes that the opponent is using [[HeadOnTargeting|head-on targeting]], then creates a force vector which is perpendicular to the presumed bullet's flight path so that it will run away from the bullet. I'm still somewhat undecided on the final bullet dodging strategy.<br />
<br />
; What does it save between rounds and matches?<br />
: Currently, it saves gun accuracy, guess factor and energy stats between rounds and nothing between matches.<br />
<br />
== Additional Info ==<br />
; Where did you get the name?<br />
: It sounded cool. Its initials happening to be RW didn't hurt, either.<br />
<br />
; Can I use your code?<br />
: Yes, although I haven't applied a license yet, it really doesn't bother me if someone wants to adapt the code for their own purposes, as long as you credit me.<br />
<br />
; What's next for your robot?<br />
: Here's the to-do list:<br />
* RabidWombat is currently not shooting where it thinks it is all the time, so I need to fix that.<br />
* Update for Java 6.<br />
* Improve bullet dodging<br />
* Add a pattern matching gun<br />
* Take wall bumping into account for virtual gun calculations<br />
* Weight virtual gun stats based on hit probability<br />
* Segment statistics<br />
* Tweak, tweak, tweak... <br />
<br />
; Does it have any [[White Whale|white whales]]?<br />
: For now, I've been pitting RabidWombat against [[SpareParts]], with good results.<br />
<br />
== Credits ==<br />
[[PluggableRobot]] was developed in parallel to support RabidWombat, so look there for some credits. Other than that, it wasn't directly based on any other robot, although I've culled many ideas from the wiki. I'm trying to be good about giving attribution in the source, and when I get some time I'll transfer them to the wiki.<br />
<br />
[[Category:Bots|RabidWombat]]<br />
[[Category:1-vs-1 Bots|RabidWombat]]<br />
[[Category:MegaBots|RabidWombat]]<br />
<br />
__NOTOC__ __NOEDITSECTION__</div>RobertWalkerhttp://robowiki.net/w/index.php?title=RoboRumble/Country_Flags&diff=31206RoboRumble/Country Flags2013-06-22T17:48:19Z<p>RobertWalker: Added rjw</p>
<hr />
<div>In the rankings tables bots are represented with the flag of its author's nationality. We associate the "main" package of the bot with a flag.<br />
<br />
For this to work smoothly we will only allow one "main" package per author. You must have all your robots in the same package.<br />
<br />
Country codes are determined by their [http://en.wikipedia.org/wiki/ISO_3166-1_alpha-3 ISO-3166-1 alpha-3 code]. The following codes are currently associated with flag files:<br />
<br />
<code><br />
ABW AFG AGO AIA ALA ALB AND ARE <br />
ARG ARM ASM ATA ATF ATG AUS AUT <br />
AZE BDI ANK BRA CAN CHE CHN CZE DEU <br />
ESP FIN FRA GBR HUN IRL ITA JPN <br />
KOR LTU NLD NOR NZL POL PRT RUS SGP <br />
SRB SVK SWE THA USA VEN ZAF<br />
</code><br />
<br />
We also have two custom codes, <code>MAN</code> for anarcho-capitalist and/or Voluntarist, which was requested by [[PEZ]], and <code>WIKI</code> for wiki bots, which displays the United Nations flag.<br />
<br />
If your country code is not listed, you may use the WIKI or MAN flag, or make a new country flag of your own, of dimensions 30x18 pixels, and ask on the discussion page for it to added.<br />
<br />
Please add your packages in alphabetical order:<br />
<pre><br />
abc,PRT<br />
ad,USA<br />
ags,CAN<br />
ahf,USA<br />
ak,SGP<br />
alpha,USA<br />
altglass,DEU<br />
amk,IRL<br />
ap,DEU<br />
apv,ESP<br />
ar,USA<br />
ara,JPN<br />
areb,CAN<br />
arthord,CAN<br />
ary,SGP<br />
asm,LTU<br />
av,DEU<br />
aw,USA<br />
awesomeness,USA<br />
axeBots,BRA<br />
baal,USA<br />
bbo,NLD<br />
bing2,CHN<br />
blir,USA<br />
brainfade,GBR<br />
bvh,NLD<br />
caimano,ITA<br />
casey,USA<br />
cb,DEU<br />
cbot,SWE<br />
cf,DEU<br />
chase,JPN<br />
cjm,USA<br />
conscience,ITA<br />
cs,JPN<br />
csm,AUS<br />
cx,CHN<br />
dans,USA<br />
darkcanuck,CAN<br />
davidalves,USA<br />
dcs,USA<br />
deewiant,FIN<br />
deith,POL<br />
demetrix,RUS<br />
dft,USA<br />
divineomega,GBR<br />
DM,USA<br />
dmsr,PRT<br />
drm,JPN<br />
ds,FRA<br />
dummy,NLD<br />
dz,CAN<br />
eat,CAN<br />
emp,NLD<br />
ethdsy,FRA<br />
exauge,USA<br />
florent,FRA<br />
fm,FRA<br />
fnc,NLD<br />
fromHell,DEU<br />
germ,USA<br />
gf,DEU<br />
gg,USA<br />
gh,NLD<br />
gio,CHE<br />
gjr,CAN<br />
goblin,ITA<br />
grybgoofy,USA<br />
gu,CHN<br />
hirataatsushi,JPN<br />
hvilela,BRA<br />
intruder,USA<br />
jam,IRL<br />
japs,NLD<br />
jasolo,ESP<br />
jekl,USA<br />
jeremyreeder,USA<br />
jep,USA<br />
jk,ZAF<br />
jmcd,AUS<br />
jp,AUS<br />
justin,CAN<br />
jw,SWE<br />
kawigi,USA<br />
kc,USA<br />
kcn,USA<br />
kenran,DEU<br />
kid,USA<br />
kinsen,USA<br />
KiraNL,NLD<br />
Krabb,DEU<br />
kronenthaler,VEN<br />
krzysiek,POL<br />
kvk,FRA<br />
labg,AUS<br />
lancel,FIN<br />
leb,NLD<br />
lessonz,WIKI<br />
lmk,USA<br />
lucasslf,BRA<br />
logiblocs,GBR<br />
lorneswork,CAN<br />
lrem,POL<br />
lxx,RUS<br />
m3thos,PRT<br />
mae,DEU<br />
mahrgell,DEU<br />
marksteam,AUS<br />
matt,USA<br />
mc,BLANK<br />
md,RUS<br />
mk,NLD<br />
mladjo,SRB<br />
mld,USA<br />
mn,BRA<br />
ms,DEU<br />
mue,DEU<br />
muf,CZE<br />
myl,NOR<br />
mym,ZAF<br />
mz,USA<br />
nat,THA<br />
ne,USA<br />
nic,GBR<br />
nz,NZL<br />
nzeemin,RUS<br />
omens,NZL<br />
ouroboros,CHN<br />
pa3k,SVK<br />
pe,GBR<br />
pedersen,USA<br />
pez,MAN<br />
pfvicm,USA<br />
ph,POL<br />
pla,NLD<br />
Polkwane,ARG<br />
positive,NLD<br />
pulsar,SWE<br />
quietus,AUS<br />
radnor,USA<br />
rc,CAN<br />
rdt199,GBR<br />
rjw,USA<br />
robar,HUN<br />
romz,FRA<br />
rus,RUS<br />
rsim,SWE<br />
rz,CHE<br />
sadoner,ESP<br />
sample,USA<br />
sampleteam,USA<br />
sch,ITA<br />
serenity,RUS<br />
sgp,AUS<br />
sgs,CAN<br />
sheldor,USA<br />
shinh,JPN<br />
shrub,GBR<br />
simonton,USA<br />
spinnercat,USA<br />
staticline,DEU<br />
stefw,NLD<br />
stelo,KOR<br />
step,BRA<br />
strider,SWE<br />
supersample,WIKI<br />
synapse,USA<br />
synnalagma,BLANK<br />
tad,AUS<br />
takeBot,JPN<br />
tango,GBR<br />
taqho,SWE<br />
tcf,GBR<br />
techdude,AUS<br />
tide,CHN<br />
timmit,CHN<br />
tjk,USA<br />
tm,JPN<br />
tobe,SWE<br />
toz,NOR<br />
trab,NOR<br />
tzu,CAN<br />
uccc,USA<br />
uji,NOR<br />
vic,NLD<br />
voidious,USA<br />
vuen,CAN<br />
wcsv,USA<br />
whind,USA<br />
wiki,WIKI<br />
wilson,CHN<br />
wit,IRL<br />
wompi,DEU<br />
xander,USA<br />
yk,RUS<br />
zen,CHN<br />
zyx,VEN<br />
</pre><br />
<br />
<br />
{{:RoboRumble/Navigation}}</div>RobertWalkerhttp://robowiki.net/w/index.php?title=RoboRumble/Participants&diff=31205RoboRumble/Participants2013-06-22T17:47:29Z<p>RobertWalker: Added RabidWombat</p>
<hr />
<div>{{:RoboRumble/Navigation}}<br />
<br />
----<br />
Just add your bot name ('''as appears in the Robocode selector after packaging''', so including versionnumber) and the RobocodeRepository id number separated by "," (there must be no space after the comma).<br />
<br><br />
The list is in '''alphabetical''' order. Add your bot in the right slot.<br />
<br />
For your bot to be accepted by the RR@Home server, the following rules are mandatory:<br />
<br />
* The bot must have a package-name.<br />
* The bot must be packaged in a jar-file.<br />
* A <botname>.properties file must be present in the jar-file.<br />
* The naming of the bot must reflect the internal structure,see [http://home.versatel.nl/gheijenk/plaatjes/bot_naming.png]for sample.RamFire.<br />
<br />
The easiest way to do this is to package your bot with Robocode (Robot -> Package robot for upload).<br />
<br />
'''PLEASE MAKE SURE YOUR BOT IS NOT ALREADY ON THE LIST BEFORE YOU ADD IT.<br>IF YOU ARE ADDING A NEW VERSION OF YOUR BOT, PLEASE DELETE THE OLD ONE.'''<br />
<br />
----<br />
<pre><br />
ab.DengerousRoBatra 1.3,http://www.robocoderepository.com/BotFiles/3664/ab.DengerousRoBatra_1.3.jar<br />
abc.Shadow 3.83c,http://robocode.aclsi.pt/abc.Shadow_3.83c.jar<br />
abc.tron3.Tron 3.11,http://www.robocoderepository.com/BotFiles/2205/abc.tron3.Tron_3.11.jar<br />
abc.Tron 2.02,http://www.robocoderepository.com/BotFiles/241/abc.Tron_2.02.jar<br />
abud.ThirdRobo 1.0,http://www.robocoderepository.com/BotFiles/2479/abud.ThirdRobo_1.0.jar<br />
ad.last.Bottom 1.0,http://www.robocoderepository.com/BotFiles/1876/ad.last.Bottom_1.0.jar<br />
ad.Quest 0.10,http://www.robocoderepository.com/BotFiles/1846/ad.Quest_0.10.jar<br />
adt.Ar1 2.1,http://www.robocoderepository.com/BotFiles/2254/adt.Ar1_2.1.jar<br />
adt.Ar2 1.0,http://www.robocoderepository.com/BotFiles/2303/adt.Ar2_1.0.jar<br />
aetos.AetosFirstBot 1.0,http://robocode-archive.strangeautomata.com/robots/aetos.AetosFirstBot_1.0.jar<br />
ag.Gir 0.99,http://www.robocoderepository.com/BotFiles/3065/ag.Gir_0.99.jar<br />
agd.Mooserwirt2 2.7,https://dl.dropboxusercontent.com/u/75978227/roborumble_refuge/agd.Mooserwirt2_2.7.jar<br />
agrach.Dalek 1.0,https://github.com/aleksey-zhidkov/rc-repo-mirror/raw/master/agrach.Dalek_1.0.jar<br />
agrach.MicroDalek 1.0,https://github.com/aleksey-zhidkov/rc-repo-mirror/raw/master/agrach.MicroDalek_1.0.jar<br />
agrach.RobotSlayer 1.0,https://github.com/aleksey-zhidkov/rc-repo-mirror/raw/master/agrach.RobotSlayer_1.0.jar<br />
ags.Glacier 0.2.7,https://dl.dropboxusercontent.com/u/75978227/roborumble_refuge/ags.Glacier_0.2.7.jar<br />
ags.micro.Carpet 1.1,https://dl.dropboxusercontent.com/u/75978227/roborumble_refuge/ags.micro.Carpet_1.1.jar<br />
ags.Midboss 1q.fast,https://dl.dropboxusercontent.com/u/75978227/roborumble_refuge/ags.Midboss_1q.fast.jar<br />
ags.polished.PolishedRuby 1,https://dl.dropboxusercontent.com/u/75978227/roborumble_refuge/ags.polished.PolishedRuby_1.jar<br />
ags.rougedc.RougeDC willow,https://dl.dropboxusercontent.com/u/75978227/roborumble_refuge/ags.rougedc.RougeDC_willow.jar<br />
ahf.Acero 1.0,http://www.robocoderepository.com/BotFiles/2151/ahf.Acero_1.0.jar<br />
ahf.NanoAndrew .4,http://www.robocoderepository.com/BotFiles/2002/ahf.NanoAndrew_.4.jar<br />
ahf.r2d2.R2d2 0.86,http://www.robocoderepository.com/BotFiles/2035/ahf.r2d2.R2d2_0.86.jar<br />
ahr.ice.Ice 1.0,http://robocoderepository.com/BotFiles/3966/ahr.ice.Ice_1.0.jar<br />
AIR.iRobot 1.0,http://www.robocoderepository.com/BotFiles/3205/AIR.iRobot_1.0.jar<br />
ak.Fermat 2.0,http://www.robocoderepository.com/BotFiles/799/ak.Fermat_2.0.jar<br />
alex.Diabolo5 1.1,http://robocode-archive.strangeautomata.com/robots/alex.Diabolo5_1.1.jar<br />
alk.lap.LoudAndProud 2.23,http://www.robocoderepository.com/BotFiles/3601/alk.lap.LoudAndProud_2.23.jar<br />
alpha.BlackIce 1.0,https://docs.google.com/uc?export=download&confirm=no_antivirus&id=0B4I_xy0UZndLSkc3MVI3Y0sycW8<br />
alpha.RainingFire 1.0,https://docs.google.com/uc?export=download&id=0B4I_xy0UZndLQnVwbHBKVWd5ak0<br />
am.Miedzix 3.0,http://robocode-archive.strangeautomata.com/robots/am.Miedzix_3.0.jar<br />
amc.ROBv202 1.01,http://matron.ic.cz/robocode/amc.ROBv202_1.01.jar<br />
amc.ROBv203 1.0,http://matron.ic.cz/robocode/amc.ROBv203_1.0.jar<br />
amc.ROBv300 1.1,http://matron.ic.cz/robocode/amc.ROBv300_1.1.jar<br />
amc.ROBv301 1.1,http://matron.ic.cz/robocode/amc.ROBv301_1.1.jar<br />
amc.ROBv400 1.0,http://matron.ic.cz/robocode/amc.ROBv400_1.0.jar<br />
amarok.Rookie 1.1,http://www.robocoderepository.com/BotFiles/422/amarok.Rookie_1.1.jar<br />
amk.ChumbaMini 0.2,http://www.robocoderepository.com/BotFiles/2655/amk.ChumbaMini_0.2.jar<br />
amk.ChumbaWumba 0.3,http://www.robocoderepository.com/BotFiles/2646/amk.ChumbaWumba_0.3.jar<br />
amk.jointstrike.JointStrike 0.2,http://www.robocoderepository.com/BotFiles/2597/amk.jointstrike.JointStrike_0.2.jar<br />
amk.ShizzleStiX.ShizzleStiX 0.6,http://www.robocoderepository.com/BotFiles/2603/amk.ShizzleStiX.ShizzleStiX_0.6.jar<br />
amk.superstrike.SuperStrike 0.3,http://www.robocoderepository.com/BotFiles/2600/amk.superstrike.SuperStrike_0.3.jar<br />
amk.Punbot.Punbot 0.01,http://www.robocoderepository.com/BotFiles/2604/amk.Punbot.Punbot_0.01.jar<br />
And.BasicSurfer FF1.6,https://sites.google.com/site/devonrobots/home/basicsurfer/And.BasicSurfer_FF1.6.jar?attredirects=0&d=1<br />
ao.T100 0.9,http://www.robocoderepository.com/BotFiles/3385/ao.T100_0.9.jar<br />
ap.Frederick 1.1,http://robocode-archive.strangeautomata.com/robots/ap.Frederick_1.1.jar<br />
apc.botM 3.0, http://www.jambe.co.nz/~james/apc.botM_3.0.jar<br />
apc.Caan 1.0, http://www.jambe.co.nz/~james/apc.Caan_1.0.jar<br />
apc.Colossus2 0.12, http://robocode-archive.strangeautomata.com/robots/apc.Colossus2_0.12.jar<br />
apc.LeeroyJenkins2 1.0,http://robocode-archive.strangeautomata.com/robots/apc.LeeroyJenkins2_1.0.jar<br />
apollokidd.ApolloKidd 0.9,http://www.robocoderepository.com/BotFiles/321/apollokidd.ApolloKidd_0.9.jar<br />
apv.Aspid 1.7,http://www.robocoderepository.com/BotFiles/1412/apv.Aspid_1.7.jar<br />
apv.AspidReloaded 0.6,http://www.robocoderepository.com/BotFiles/1985/apv.AspidReloaded_0.6.jar<br />
apv.LauLectrik 1.2,http://www.robocoderepository.com/BotFiles/1300/apv.LauLectrik_1.2.jar<br />
apv.MicroAspid 1.8,http://www.robocoderepository.com/BotFiles/2519/apv.MicroAspid_1.8.jar<br />
apv.NanoLauLectrik 1.0,http://www.robocoderepository.com/BotFiles/1399/apv.NanoLauLectrik_1.0.jar<br />
apv.NanoLauLectrikTheCannibal 1.1,http://www.robocoderepository.com/BotFiles/2147/apv.NanoLauLectrikTheCannibal_1.1.jar<br />
apv.ScruchiPu 1.0,http://www.robocoderepository.com/BotFiles/1367/apv.ScruchiPu_1.0.jar<br />
apv.test.Virus 0.6.1,http://www.robocoderepository.com/BotFiles/2645/apv.test.Virus_0.6.1.jar<br />
apv.TheBrainPi 0.5fix,http://robocode-archive.strangeautomata.com/robots/apv.TheBrainPi_0.5fix.jar<br />
ar.horizon.Horizon 1.2.2,http://www.robocoderepository.com/BotFiles/3286/ar.horizon.Horizon_1.2.2.jar<br />
ar.QuantumChromodynamics 1.2.1,http://www.robocoderepository.com/BotFiles/3220/ar.QuantumChromodynamics_1.2.1.jar<br />
ar.TheoryOfEverything 1.2.1,http://www.robocoderepository.com/BotFiles/3221/ar.TheoryOfEverything_1.2.1.jar<br />
ara.Shera 0.88,http://www.robocoderepository.com/BotFiles/1050/ara.Shera_0.88.jar<br />
areb.Union 1.06,http://www.robocoderepository.com/BotFiles/2893/areb.Union_1.06.jar<br />
arthord.micro.Apoptygma 0.4,http://www.robocoderepository.com/BotFiles/1688/arthord.micro.Apoptygma_0.4.jar<br />
arthord.micro.Muffin 0.6.1,http://www.robocoderepository.com/BotFiles/1963/arthord.micro.Muffin_0.6.1.jar<br />
arthord.KostyaTszyu Beta2,http://www.robocoderepository.com/BotFiles/2322/arthord.KostyaTszyu_Beta2.jar<br />
arthord.MannyPacquiao Delta2,http://scoutery.awardspace.com/arthord.MannyPacquiao_Delta2.jar<br />
arthord.NanoSatan Mu,http://www.robocoderepository.com/BotFiles/2157/arthord.NanoSatan_Mu.jar<br />
arthord.NanoSatanMelee Beta,http://www.robocoderepository.com/BotFiles/2088/arthord.NanoSatanMelee_Beta.jar<br />
ary.micro.Weak 1.2,http://www.robocoderepository.com/BotFiles/3433/ary.micro.Weak_1.2.jar<br />
ary.mini.Nimi 1.0,http://www.robocoderepository.com/BotFiles/3397/ary.mini.Nimi_1.0.jar<br />
ary.nano.AceSurf 1.2,http://www.robocoderepository.com/BotFiles/3352/ary.nano.AceSurf_1.2.jar<br />
ary.nano.ColorNanoP 1.1,http://www.robocoderepository.com/BotFiles/3629/ary.nano.ColorNanoP_1.1.jar<br />
ary.Crisis 1.0,http://www.robocoderepository.com/BotFiles/3495/ary.Crisis_1.0.jar<br />
ary.Help 1.0,http://robocode-archive.strangeautomata.com/robots/ary.Help_1.0.jar<br />
ary.FourWD 1.3d,http://robocode-archive.strangeautomata.com/robots/ary.FourWD_1.3d.jar<br />
ary.SMG 1.01,https://dl.dropboxusercontent.com/u/75978227/roborumble_refuge/ary.SMG_1.01.jar<br />
as.xbots 1.0,http://robocode-archive.strangeautomata.com/robots/as.xbots_1.0.jar<br />
asd.Cthulhu 1.2,http://robocode-archive.strangeautomata.com/robots/asd.Cthulhu_1.2.jar<br />
asm.Statistas 0.1,http://www.robocoderepository.com/BotFiles/1989/asm.Statistas_0.1.jar<br />
av.RobAtHome 1.2,http://www.user.tu-berlin.de/vickqsjf/av.RobAtHome_1.2.jar<br />
aw.Gilgalad 1.99.6,https://sites.google.com/site/awusa94/robocode/aw.Gilgalad_1.99.6.jar?attredirects=0<br />
awesomeness.Elite 1.0,http://robocoderepository.com/BotFiles/3597/awesomeness.Elite.jar<br />
awl.Locutus 1.5,https://dl.dropboxusercontent.com/u/1589443/awl.Locutus_1.5.jar<br />
axeBots.HataMoto 3.09,http://www.robocoderepository.com/BotFiles/1655/axeBots.HataMoto_3.09.jar<br />
axeBots.Musashi 2.18,http://www.robocoderepository.com/BotFiles/1759/axeBots.Musashi_2.18.jar<br />
axeBots.Okami 1.04,http://www.robocoderepository.com/BotFiles/2016/axeBots.Okami_1.04.jar<br />
axeBots.SilverSurfer 2.53.33fix,https://dl.dropboxusercontent.com/u/75978227/roborumble_refuge/axeBots.SilverSurfer_2.53.33fix.jar<br />
ayk.WallHugger 1.0,http://robocode-archive.strangeautomata.com/robots/ayk.WallHugger_1.0.jar<br />
baal.nano.N 1.42,http://webpages.charter.net/eleeleth/Robots/baal.nano.N_1.42.jar<br />
banshee.mini.Nexus6 0.2.0,http://www.robocoderepository.com/BotFiles/3467/banshee.mini.Nexus6_0.2.0.jar<br />
banshee.micro.Nexus6 0.3.0,http://www.robocoderepository.com/BotFiles/3473/banshee.micro.Nexus6_0.3.0.jar<br />
bayen.nano.Squirrel 0.2,http://www.freewebs.com/bayen/files/bayen.nano.Squirrel_0.2.jar<br />
bayen.nut.Squirrel 1.621,http://robocode-archive.strangeautomata.com/robots/bayen.nut.Squirrel_1.621.jar<br />
bayen.UbaMicro 1.4,http://www.robocoderepository.com/BotFiles/2830/bayen.UbaMicro_1.4.jar<br />
bayen.UbaRamLT 1.0,http://www.robocoderepository.com/BotFiles/2868/bayen.UbaRamLT_1.0.jar<br />
bbo.RamboT 0.3,http://www.robocoderepository.com/BotFiles/2210/bbo.RamboT_0.3.jar<br />
bbo.TheRoof 1.4.3,http://www.robocoderepository.com/BotFiles/2179/bbo.TheRoof_1.4.3.jar<br />
Bemo.Sweet30 1.6.1,http://www.stg-volleyball.de/images/Bemo.Sweet30_1.6.1.jar<br />
benhorner.PureAggression 0.2.6,http://www.robocoderepository.com/BotFiles/3421/benhorner.PureAggression_0.2.6.jar<br />
bh.PencilRain 0.01,http://www.robocoderepository.com/BotFiles/3670/bh.PencilRain-0.01.jar<br />
bigpete.Stewie 1.0,http://www.robocoderepository.com/BotFiles/2927/bigpete.Stewie_1.0.jar<br />
bing2.Melody 1.3.1,http://www.ccs.neu.edu/home/bing/robocode/bing2.Melody_1.3.1.jar<br />
bjl.LoneDragon 0.5,http://www.robocoderepository.com/BotFiles/1929/bjl.LoneDragon_0.5.jar<br />
blir.micro.blixi.Blixi 1.0,https://dl.dropboxusercontent.com/u/103112496/Robocode/blir.micro.blixi.Blixi_1.0.jar<br />
blir.nano.Bruce R1.0.0,https://dl.dropboxusercontent.com/u/103112496/Robocode/blir.nano.Bruce_R1.0.0.jar<br />
blir.nano.Cabbage R1.0.1,https://dl.dropboxusercontent.com/u/103112496/Robocode/blir.nano.Cabbage_R1.0.1.jar<br />
blir.nano.inch.Inchworm 1.0,https://dl.dropboxusercontent.com/u/103112496/Robocode/blir.nano.inch.Inchworm_1.0.jar<br />
blr.Chicken001 0.1,https://dl.dropbox.com/s/b1isx9axzuyl2yb/blr.Chicken001_0.1.jar?dl=1<br />
bndl.LostLion 1.2,http://www.robocoderepository.com/BotFiles/1033/bndl.LostLion_1.2.jar<br />
bk.Shooter 1.0,https://dl.dropboxusercontent.com/u/81048920/bk.Shooter_1.0.jar<br />
boe.Minerva 0.72,https://dl.dropboxusercontent.com/u/27918021/boe.Minerva_0.72.jar<br />
bons.NanoStalker 1.2,http://www.robocoderepository.com/BotFiles/1179/bons.NanoStalker_1.2.jar<br />
bots.UberBot 1.2c,https://dl.dropboxusercontent.com/u/97134235/bots.UberBot_1.2c.jar<br />
bots.UnterBot 1.0,https://dl.dropboxusercontent.com/u/97134235/bots.UnterBot_1.0.jar<br />
bp.Kuma 1.0,http://www.robocoderepository.com/BotFiles/3238/bp.Kuma_1.0.jar<br />
braaropolis.Abot 1.0,http://robocode-archive.strangeautomata.com/robots/braaropolis.Abot_1.0.jar<br />
brainfade.Fallen 0.63,http://www.robocoderepository.com/BotFiles/2250/brainfade.Fallen_0.63.jar<br />
brainfade.melee.Dusk 0.44,http://www.robocoderepository.com/BotFiles/2518/brainfade.melee.Dusk_0.44.jar<br />
bts.mega.Gnarly 1.4,http://www.bluetorchsource.com/bots/bts.mega.Gnarly_1.4.jar<br />
buba.Archivist 0.1,http://www.robocoderepository.com/BotFiles/3899/buba.Archivist_0.1.jar<br />
buba.Buba 0.3,http://www.robocoderepository.com/BotFiles/3896/buba.Buba_0.3.jar<br />
bumblebee.Bumblebee 1.0, https://dl.dropbox.com/s/ac31anjpew7ownh/bumblebee.Bumblebee_1.0.jar?dl=1<br />
bvh.fnr.Fenrir 0.36l,http://www.robocoderepository.com/BotFiles/1428/bvh.fnr.Fenrir_0.36l.jar<br />
bvh.frg.Friga 0.112dev,http://robocode-archive.strangeautomata.com/robots/bvh.frg.Friga_0.112dev.jar<br />
bvh.fry.Freya 0.82,http://robocode-archive.strangeautomata.com/robots/bvh.fry.Freya_0.82.jar<br />
bvh.hdr.Hodur 0.4,http://www.robocoderepository.com/BotFiles/1954/bvh.hdr.Hodur_0.4.jar<br />
bvh.loki.Loki 0.5,http://www.robocoderepository.com/BotFiles/885/bvh.loki.Loki_0.5.jar<br />
bvh.micro.Freya 0.3,http://www.robocoderepository.com/BotFiles/2815/bvh.micro.Freya_0.3.jar<br />
bvh.micro.Svadilfari 0.2,http://www.robocoderepository.com/BotFiles/1086/bvh.micro.Svadilfari_0.2.jar<br />
bvh.mini.Fenrir 0.39,http://www.robocoderepository.com/BotFiles/1429/bvh.mini.Fenrir_0.39.jar<br />
bvh.mini.Freya 0.55,http://robocode-archive.strangeautomata.com/robots/bvh.mini.Freya_0.55.jar<br />
bvh.mini.Mjolnir 0.3,http://www.robocoderepository.com/BotFiles/2220/bvh.mini.Mjolnir_0.3.jar<br />
bvh.mini.Wodan 0.50,http://www.robocoderepository.com/BotFiles/2064/bvh.mini.Wodan_0.50.jar<br />
bvh.tyr.Tyr 1.74,http://www.robocoderepository.com/BotFiles/886/bvh.tyr.Tyr_1.74.jar<br />
bwbaugh.nano.Tirunculus 0.0.0a,https://dl.dropboxusercontent.com/u/75978227/roborumble_refuge/bwbaugh.nano.Tirunculus_0.0.0a.jar<br />
bzdp.BoxCar 2.0,http://www.robocoderepository.com/BotFiles/3703/bzdp.BoxCar_2.0.jar<br />
bzdp.Pansy 2.1,http://www.robocoderepository.com/BotFiles/3726/bzdp.Pansy_2.1.jar<br />
caimano.Furia_Ceca 0.22,http://www.robocoderepository.com/BotFiles/1843/caimano.Furia_Ceca_0.22.jar<br />
can.Pookie 1.1,http://www.robocoderepository.com/BotFiles/4086/can.Pookie-1.1.jar<br />
casey.Flee 1.0,http://www.robocoderepository.com/BotFiles/4108/casey.Flee_1.0.jar<br />
casey.Flump 1.0,https://www.sites.google.com/site/fatsandbox/robots/casey.Flump_1.0.jar<br />
cb.DeepThought 1.3,http://bomberportal.com/other/robocode/cb.DeepThought_1.3.jar<br />
cb.droid.Polyphem 1.0,http://bomberportal.com/other/robocode/cb.droid.Polyphem_1.0.jar<br />
cb.Femto 1.0,http://bomberportal.com/other/robocode/cb.Femto_1.0.jar<br />
cb.micro.Haiduc 1.0,http://bomberportal.com/other/robocode/cb.micro.Haiduc_1.0.jar<br />
cb.Sabertooth 1.0,http://bomberportal.com/other/robocode/cb.Sabertooth_1.0.jar<br />
cbot.agile.Nibbler 0.2,http://www.robocoderepository.com/BotFiles/1537/cbot.agile.Nibbler_0.2.jar<br />
cbot.cbot.CBot 0.8,http://www.robocoderepository.com/BotFiles/1375/cbot.cbot.CBot_0.8.jar<br />
cf.mini.Chiva 1.0,http://www.robocoderepository.com/BotFiles/2331/cf.mini.Chiva_1.0.jar<br />
cf.OldMan.OldManXP 0.1,http://www.robocoderepository.com/BotFiles/1968/cf.OldMan.OldManXP_0.1.jar<br />
cf.proto.Shiva 2.2,http://www.robocoderepository.com/BotFiles/2409/cf.proto.Shiva_2.2.jar<br />
cf.star.Star2 1.23,http://www.robocoderepository.com/BotFiles/2255/cf.star.Star2_1.23.jar<br />
ch.rhj.rbc.RHJ1 1.0,http://www.robocoderepository.com/BotFiles/1879/ch.rhj.rbc.RHJ1_1.0.jar<br />
CharlieN.Omega.Omega 1.03,http://www.robocoderepository.com/BotFiles/3503/CharlieN.Omega.Omega_1.03.jar<br />
chase.pm.Pytko 1.0,http://robocode-archive.strangeautomata.com/robots/chase.pm.Pytko_1.0.jar<br />
chickenfuego.UrChicken2 1.0,http://www.robocoderepository.com/BotFiles/3422/chickenfuego.UrChicken2_1.0.jar<br />
cjk.Merkava 0.1.1,http://www.robocoderepository.com/BotFiles/2637/cjk.Merkava_0.1.1.jar<br />
cjm.chalk.Chalk 2.6.Be,http://scatterbright.com/robots/cjm.chalk.Chalk_2.6.Be.jar<br />
cjm.Charo 1.1,http://scatterbright.com/robots/cjm.Charo_1.1.jar<br />
cjm.Che 1.2,http://www.robocoderepository.com/BotFiles/2703/cjm.Che_1.2.jar<br />
cjm.Chomsky 1.5,http://scatterbright.com/robots/cjm.Chomsky_1.5.jar<br />
cli.Dancer 1.1,http://robocode-archive.strangeautomata.com/robots/cli.Dancer_1.1.jar<br />
cli.WasteOfAmmo 1.0,http://robocode-archive.strangeautomata.com/robots/cli.WasteOfAmmo_1.0.jar<br />
codemojo.nano.Woot 1.0,http://robocode-archive.strangeautomata.com/robots/codemojo.nano.Woot_1.0.jar<br />
com.blogspot.malinkody.DestrobotMalin 1.0,http://www.robocoderepository.com/BotFiles/4109/com.blogspot.malinkody.DestrobotMalin_1.0.jar<br />
com.cohesiva.robocode.ManOwaR 1.0,http://www.robocoderepository.com/BotFiles/4160/com.cohesiva.robocode.ManOwaR_1.0.jar<br />
com.syncleus.robocode.Dreadnaught 0.1,http://robocoderepository.com/BotFiles/3426/com.syncleus.robocode.Dreadnaught_0.1.jar<br />
conscience.Electron 1.3g,http://pmdom.altervista.org/conscience.Electron_1.3g.jar<br />
conscience.Bulldozer 1.0a,http://pmdom.altervista.org/conscience.Bulldozer_1.0a.jar<br />
conscience.Idem 1.0a,http://pmdom.altervista.org/conscience.Idem_1.0a.jar<br />
conscience.Suicidal 1.1,http://pmdom.altervista.org/conscience.Suicidal_1.1.jar<br />
cre.Karolos 0.32,http://robocode-archive.strangeautomata.com/robots/cre.Karolos_0.32.jar<br />
cs.Nene 1.0.4,http://robocode-archive.strangeautomata.com/robots/cs.Nene_1.0.4.jar<br />
cs.s2.Seraphim 2.3.1,http://robocode-archive.strangeautomata.com/robots/cs.s2.Seraphim_2.3.1.jar<br />
cs.Wren 1.0,http://robocode-archive.strangeautomata.com/robots/cs.Wren_1.0.jar<br />
csm.NthGeneration 0.04,http://www.robocoderepository.com/BotFiles/1214/csm.NthGeneration_0.04.jar<br />
csp.Eagle 3.30,http://www.robocoderepository.com/BotFiles/2436/csp.Eagle_3.30.jar<br />
css.Delitioner 0.11,http://robocode-archive.strangeautomata.com/robots/css.Delitioner_0.11.jar<br />
cuoq.Kakera 1.0,http://robocode-archive.strangeautomata.com/robots/cuoq.Kakera_1.0.jar<br />
cw.megas.Blade 0.8,http://robocode-archive.strangeautomata.com/robots/cw.megas.Blade_0.8.jar<br />
cw.megas.GhostShell GT,http://robocode-archive.strangeautomata.com/robots/cw.megas.GhostShell_GT.jar<br />
cw.megas.Gridd 0.4,http://robocode-archive.strangeautomata.com/robots/cw.megas.Gridd_0.4.jar<br />
cw.megas.Polar 3.2,http://robocode-archive.strangeautomata.com/robots/cw.megas.Polar_3.2.jar<br />
cw.megas.Silhouette 1.1,http://robocode-archive.strangeautomata.com/robots/cw.megas.Silhouette_1.1.jar?attredirects=0&d=1<br />
cx.BlestPain 1.41,http://www.robocoderepository.com/BotFiles/1671/cx.BlestPain_1.41.jar<br />
cx.CigaretBH 1.03,http://www.robocoderepository.com/BotFiles/1414/cx.CigaretBH_1.03.jar<br />
cx.Lacrimas 1.36,http://www.robocoderepository.com/BotFiles/1820/cx.Lacrimas_1.36.jar<br />
cx.micro.Blur 0.2,http://www.robocoderepository.com/BotFiles/2447/cx.micro.Blur_0.2.jar<br />
cx.micro.Smoke 0.96,http://www.robocoderepository.com/BotFiles/1037/cx.micro.Smoke_0.96.jar<br />
cx.micro.Spark 0.6,http://www.robocoderepository.com/BotFiles/1320/cx.micro.Spark_0.6.jar<br />
cx.mini.BlackSwans 0.60,http://www.robocoderepository.com/BotFiles/1158/cx.mini.BlackSwans_0.60.jar<br />
cx.mini.Cigaret 1.31,http://www.robocoderepository.com/BotFiles/1152/cx.mini.Cigaret_1.31.jar<br />
cx.mini.Nimrod 0.55,http://www.robocoderepository.com/BotFiles/1236/cx.mini.Nimrod_0.55.jar<br />
cx.nano.Smog 2.6,http://www.robocoderepository.com/BotFiles/1036/cx.nano.Smog_2.6.jar<br />
cx.Princess 1.0,http://www.robocoderepository.com/BotFiles/1343/cx.Princess_1.0.jar<br />
cyragia.Bot 1.1,http://www.robocoderepository.com/BotFiles/4098/cyragia.Bot_1.1.jar<br />
da.NewBGank 1.4,http://www.robocoderepository.com/BotFiles/3312/da.NewBGank_1.4.jar<br />
dam.MogBot 2.9,http://www.robocoderepository.com/BotFiles/555/dam.MogBot_2.9.jar<br />
dans.Cinnamon 1.2,http://www.robocoderepository.com/BotFiles/1976/dans.Cinnamon_1.2.jar<br />
darkcanuck.Gaff 1.50,http://robocode-archive.strangeautomata.com/robots/darkcanuck.Gaff_1.50.jar<br />
darkcanuck.Holden 1.13a,http://robocode-archive.strangeautomata.com/robots/darkcanuck.Holden_1.13a.jar<br />
darkcanuck.Pris 0.92,http://robocode-archive.strangeautomata.com/robots/darkcanuck.Pris_0.92.jar<br />
davidalves.Firebird 0.25,https://github.com/aleksey-zhidkov/rc-repo-mirror/raw/master/davidalves.Firebird_0.25.jar<br />
davidalves.Phoenix 1.02,https://github.com/aleksey-zhidkov/rc-repo-mirror/raw/master/davidalves.Phoenix_1.02.jar<br />
davidalves.PhoenixOS 1.1,http://robocode-archive.strangeautomata.com/robots/davidalves.PhoenixOS_1.1.jar<br />
davidalves.net.Duelist 0.1.6src,http://www.robocoderepository.com/BotFiles/1000/davidalves.net.Duelist_0.1.6src.jar<br />
davidalves.net.DuelistMicro 1.22,http://www.robocoderepository.com/BotFiles/1144/davidalves.net.DuelistMicro_1.22.jar<br />
davidalves.net.DuelistMicroMkII 1.1,http://www.robocoderepository.com/BotFiles/1281/davidalves.net.DuelistMicroMkII_1.1.jar<br />
davidalves.net.DuelistMini 1.1,http://www.robocoderepository.com/BotFiles/1181/davidalves.net.DuelistMini_1.1.jar<br />
davidalves.net.DuelistNano 1.0,http://www.robocoderepository.com/BotFiles/1272/davidalves.net.DuelistNano_1.0.jar<br />
dcs.Eater_of_Worlds 1.1.3-A,http://www.robocoderepository.com/BotFiles/2578/dcs.Eater_of_Worlds_1.1.3-A.jar<br />
dcs.Eater_of_Worlds_Mini 1.0,http://www.robocoderepository.com/BotFiles/2850/dcs.Eater_of_Worlds_Mini_1.0.jar<br />
dcs.PM.Eater_of_Worlds_PM 1.2,http://www.robocoderepository.com/BotFiles/2856/dcs.PM.Eater_of_Worlds_PM_1.2.jar<br />
de.erdega.robocode.Polyphemos 0.4,http://robocode-archive.strangeautomata.com/robots/de.erdega.robocode.Polyphemos_0.4.jar<br />
deewiant.Anomaly 0.2,http://www.iki.fi/~deewiant/files/deewiant.Anomaly_0.2.jar<br />
deith.Czolgzilla 0.11,http://www.robocoderepository.com/BotFiles/3256/deith.Czolgzilla_0.11.jar<br />
demetrix.ForceMajeure 0.75,http://ever-rage.narod.ru/robowiki/demetrix.ForceMajeure_0.75.jar<br />
demetrix.nano.Neutrino 0.27,http://ever-rage.narod.ru/robowiki/demetrix.nano.Neutrino_0.27.jar<br />
demetrix.nano.SledgeHammer 0.22,http://ever-rage.narod.ru/robowiki/demetrix.nano.SledgeHammer_0.22.jar<br />
deo.CloudBot 1.3,http://robocoderepository.com/BotFiles/3644/deo.CloudBot_1.3.jar<br />
deo.FlowerBot 1.0,http://robocoderepository.com/BotFiles/3683/deo.FlowerBot_1.0.jar<br />
deo.virtual.RainbowBot 1.0,http://robocoderepository.com/BotFiles/3694/deo.virtual.RainbowBot_1.0.jar<br />
dft.Calliope 5.6,http://www.robocoderepository.com/BotFiles/237/dft.Calliope_5.6.jar<br />
dft.Cyanide 1.90,http://robocode-archive.strangeautomata.com/robots/dft.Cyanide_1.90.jar<br />
dft.Cyprus 3.0,http://www.robocoderepository.com/BotFiles/377/dft.Cyprus_3.0.jar<br />
dft.Freddie 1.32,http://robocode-archive.strangeautomata.com/robots/dft.Freddie_1.32.jar<br />
dft.Guppy 1.0,http://robocode-archive.strangeautomata.com/robots/dft.Guppy_1.0.jar<br />
dft.Immortal 1.40,http://robocode-archive.strangeautomata.com/robots/dft.Immortal_1.40.jar<br />
dft.Krazy 1.5,http://www.robocoderepository.com/BotFiles/2099/dft.Krazy_1.5.jar<br />
dft.Virgin 1.25,http://www.robocoderepository.com/BotFiles/1447/dft.Virgin_1.25.jar<br />
dggp.haiku.gpBot_0 1.1,http://www.robocoderepository.com/BotFiles/3154/dggp.haiku.gpBot_0_1.1.jar<br />
dhn.Immortal 1.0,http://www.griessersoftware.com/robocode/dhn.Immortal.1.0.jar<br />
disan.Chair 2.2.0,https://dl.dropboxusercontent.com/u/138299243/Robocode/disan.Chair_2.2.0.jar<br />
discan.mini.Exode 0.25,https://sites.google.com/site/discanroborumblebots/discan.mini.Exode_0.25.jar<br />
dittman.BlindSquirl Retired,http://home.comcast.net/~kokyunage/robocode/ugluk/dittman.BlindSquirl_Retired.jar<br />
divineomega.DivineBot 1.8,https://dl.dropboxusercontent.com/s/w269z6xao5ts52q/divineomega.DivineBot_1.8.jar?token_hash=AAF4rB6HaxYxfg1XrouasM9fLdRadeh30pUzF8wGU10q1w&dl=1<br />
divineomega.TrialBot 0.003,https://dl.dropboxusercontent.com/s/an44muntp8f0p6h/divineomega.TrialBot_0.003.jar?token_hash=AAG5XTuv2fkEkTYhNIEJ0zre-SpWgK-jvKNqQ120pFeYSA&dl=1<br />
djc.Aardvark 0.3.6,http://www.robocoderepository.com/BotFiles/652/djc.Aardvark_0.3.6.jar<br />
djdjdj.NanoSkunk10 1.0,http://davidjoerg.com/robocode/djdjdj.NanoSkunk10_1.0.jar<br />
dk.stable.Gorgatron 1.1,http://www.robocoderepository.com/BotFiles/2112/dk.stable.Gorgatron_1.1.jar<br />
dks.MicroDanMK2 1.0,http://robocode-archive.strangeautomata.com/robots/dks.MicroDanMK2_1.0.jar<br />
DM.Capriite 3.7.2,http://www.robocoderepository.com/BotFiles/2989/DM.Capriite_3.7.2.jar<br />
DM.Chicken 4.0,http://www.robocoderepository.com/BotFiles/3020/DM.Chicken_4.0.jar<br />
DM.Mijit .3,http://www.robocoderepository.com/BotFiles/3043/DM.Mijit_.3.jar<br />
dmp.micro.Aurora 1.41,http://www.robocoderepository.com/BotFiles/853/dmp.micro.Aurora_1.41.jar<br />
dmp.nano.Eve 3.41,http://www.robocoderepository.com/BotFiles/842/dmp.nano.Eve_3.41.jar<br />
donjezza.Jezza 1.0,http://www.robocoderepository.com/BotFiles/3385/donjezza.Jezza_1.0.jar<br />
donjezza.Muncho 1.0,http://www.robocoderepository.com/BotFiles/3384/donjezza.Muncho_1.0.jar<br />
drd.Dreadknoght 0.9,http://www.robocoderepository.com/BotFiles/3835/drd.Dreadknoght_0.9.jar<br />
drm.CobraBora 1.12,http://www.robocoderepository.com/BotFiles/1146/drm.CobraBora_1.12.jar<br />
drm.Magazine 0.39,http://www.robocoderepository.com/BotFiles/989/drm.Magazine_0.39.jar<br />
ds.OoV4 0.3b,http://www.robocoderepository.com/BotFiles/2851/ds.OoV4_0.3b.jar<br />
dsw.StaticD 1.0,http://robocode-archive.strangeautomata.com/robots/dsw.StaticD_1.0.jar<br />
dsx724.VSAB_EP3a 1.0,http://robocode-archive.strangeautomata.com/robots/dsx724.VSAB_EP3a_1.0.jar<br />
dsx724.VSAB_EP3_ATR 1.1,http://www.robocoderepository.com/BotFiles/3432/dsx724.VSAB_EP3_ATR_1.1.jar<br />
DTF.Kludgy 1.2b,http://www.robocoderepository.com/BotFiles/4041/DTF.Kludgy_1.2b.jar<br />
dukie.Ambassador 1.0,http://www.robocoderepository.com/BotFiles/2845/dukie.Ambassador_1.0.jar<br />
dummy.micro.HummingBird 2.14,http://www.robocoderepository.com/BotFiles/369/dummy.micro.HummingBird_2.14.jar<br />
dummy.micro.Sparrow 2.5,http://www.robocoderepository.com/BotFiles/484/dummy.micro.Sparrow_2.5.jar<br />
dummy.mini.Parakeet 2.40,http://www.robocoderepository.com/BotFiles/400/dummy.mini.Parakeet_2.40.jar<br />
dvogon.GangBang 1.0,http://www.robocoderepository.com/BotFiles/3193/dvogon.GangBang_1.0.jar<br />
dy.LevelOne 2.0,http://www.robocoderepository.com/BotFiles/3452/dy.LevelOne_2.0.jar<br />
dz.Caedo 1.4,http://www.robocoderepository.com/BotFiles/1044/dz.Caedo_1.4.jar<br />
dz.GalbaMicro 0.11,http://www.robocoderepository.com/BotFiles/2482/dz.GalbaMicro_0.11.jar<br />
dz.GalbaMini 0.121,http://robocode-archive.strangeautomata.com/robots/dz.GalbaMini_0.121.jar<br />
dz.MostlyHarmlessNano 2.1,http://www.robocoderepository.com/BotFiles/2166/dz.MostlyHarmlessNano_2.1.jar<br />
dz.OthoMicro 0.12,http://www.robocoderepository.com/BotFiles/2198/dz.OthoMicro_0.12.jar<br />
dz.OthoMini 0.15,http://www.robocoderepository.com/BotFiles/2221/dz.OthoMini_0.15.jar<br />
eat.HumblePieLite 1.0,http://www.robocoderepository.com/BotFiles/1088/eat.HumblePieLite_1.0.jar<br />
EBBU.Sim2 1.02,https://dl.dropbox.com/u/85847696/EBBU.Sim2_1.02.jar<br />
ebo.Sparse 0.02,http://www.4geeks.de/files/ebo.Sparse_0.02.jar<br />
ebo.Tahoe 1.1.79,http://www.4geeks.de/files/ebo.Tahoe_1.1.79.jar<br />
EE.LittleBig 1.0,http://www.robocoderepository.com/BotFiles/4009/EE.LittleBig_1.0.jar<br />
EFD.AdvancedEFD 0.4.5a,http://robocode-archive.strangeautomata.com/robots/EFD.AdvancedEFD_0.4.5a.jar<br />
el.Attackr 0.1,http://robocode-archive.strangeautomata.com/robots/el.Attackr_0.1.jar<br />
el.JumpShoot 0.2,http://www.robocoderepository.com/BotFiles/3360/el.JumpShoot_0.2.jar<br />
el33t.EL33tGangstarr2 2.0,http://www.robocoderepository.com/BotFiles/2069/el33t.EL33tGangstarr2_2.0.jar<br />
eld.Hmm 1.0,http://robocode-archive.strangeautomata.com/robots/eld.Hmm_1.0.jar<br />
element.Earth 1.1,http://www.robocoderepository.com/BotFiles/3587/element.Earth_1.1.jar<br />
elloco.Flower 0.1r1,http://www.robocoderepository.com/BotFiles/3242/elloco.Flower_0.1r1.jar<br />
elloco.Kabuto 0.2r,http://www.robocoderepository.com/BotFiles/3229/elloco.Kabuto_0.2r.jar<br />
elvbot.ElverionBot 0.3,http://www.robocoderepository.com/BotFiles/3541/elvbot.ElverionBot_0.3.jar<br />
emp.Yngwie 1.11,http://www.robocoderepository.com/BotFiles/1928/emp.Yngwie_1.11.jar<br />
erdnis.Rover 0.3,http://www.free-games-fun.com/erdnis.Rover_0.3.jar<br />
eskimo.micro.Echo 0.1,http://robocoderepository.com/BotFiles/3969/eskimo.micro.Echo_0.1.jar<br />
et.Predator 1.8,http://www.robocoderepository.com/BotFiles/668/et.Predator_1.8.jar<br />
ethdsy.Malacka 2.4,http://www.robocoderepository.com/BotFiles/1159/ethdsy.Malacka_2.4.jar<br />
evd.X1 0.01,http://www.robocoderepository.com/BotFiles/3503/evd.X1_0.01.jar<br />
exauge.GateKeeper 1.1.121g,http://www.robocoderepository.com/BotFiles/3928/exauge.GateKeeper_1.1.121g.jar<br />
exauge.LemonDrop 1.6.130,http://www.robocoderepository.com/BotFiles/3911/exauge.LemonDrop_1.6.130.jar<br />
exauge.Leopard 1.1.019,http://www.robocoderepository.com/BotFiles/3917/exauge.Leopard_1.1.019.jar<br />
extra.LightSauce 0.01,http://robocoderepository.com/BotFiles/4031/extra.LightSauce_0.01.jar<br />
extra.Sauce .01,http://robocoderepository.com/BotFiles/4029/extra.Sauce_.01.jar<br />
Ex.Survival 3.7,http://robocode-archive.strangeautomata.com/robots/Ex.Survival_3.7.jar?attredirects=0&d=1<br />
fala.robocode.FalaRobot 1.0,http://www.robocoderepository.com/BotFiles/3474/fala.robocode.FalaRobot_1.0.jar<br />
FatalFlaw.FatalFlaw 1.0.5,http://www.robocoderepository.com/BotFiles/4133/FatalFlaw.FatalFlaw_1.0.5.jar<br />
fcr.First 1.0,http://www.robocoderepository.com/BotFiles/3362/fcr.First_1.0.jar<br />
Fenix.FenixTrack 1.0,http://www.robocoderepository.com/BotFiles/1627/Fenix.FenixTrack_1.0.jar<br />
florent.FloatingTadpole 1.2.6,http://www.robocoderepository.com/BotFiles/2675/florent.FloatingTadpole_1.2.6.jar<br />
florent.small.LittleAngel 1.8,http://www.robocoderepository.com/BotFiles/2917/florent.small.LittleAngel_1.8.jar<br />
florent.test.Toad 0.14t,http://robocode-archive.strangeautomata.com/robots/florent.test.Toad_0.14t.jar<br />
florent.XSeries.X2 0.17,http://wesley3.free.fr/florent.XSeries.X2_0.17.jar<br />
fm.claire 1.7,http://www.robocoderepository.com/BotFiles/2251/fm.claire_1.7.jar<br />
fm.mammillarias 1.3,http://www.robocoderepository.com/BotFiles/2238/fm.mammillarias_1.3.jar<br />
fnc.bandit.Bandit 5.2.0,http://www.robocoderepository.com/BotFiles/2155/fnc.bandit.Bandit_5.2.0.jar<br />
fnc.bandit2002.Bandit2002 4.0.2,http://www.robocoderepository.com/BotFiles/2202/fnc.bandit2002.Bandit2002_4.0.2.jar<br />
frag.FragBot 1.0,http://robocode-archive.strangeautomata.com/robots/frag.FragBot_1.0.jar<br />
franzor.Lizt 1.3.1,https://dl.dropboxusercontent.com/u/75978227/roborumble_refuge/franzor.Lizt_1.3.1.jar<br />
froh.micro.Aversari 0.31,https://dl.dropbox.com/u/60122033/Bots/froh.micro.Aversari_0.31.jar<br />
fromHell.C22H30N2O2S 2.2,http://fromhell.schreiende-stille.de/Robocode/Java/fromHell.C22H30N2O2S_2.2.jar<br />
fromHell.C4H10O 1.5.1,http://fromhell.schreiende-stille.de/Robocode/Java/fromHell.C4H10O_1.5.1.jar<br />
fromHell.CHCl3 1.4.2,http://fromhell.schreiende-stille.de/Robocode/Java/fromHell.CHCl3_1.4.2.jar<br />
fruits.NanoStrawbery 1.3,https://github.com/aleksey-zhidkov/rc-repo-mirror/raw/master/fruits.NanoStrawbery_1.3.jar<br />
fullsail.LaxativeTeaTwo 1.0,http://www.robocoderepository.com/BotFiles/3403/fullsail.LaxativeTeaTwo_1.0.jar<br />
fullsail.TimbotNoPrediction 1.0,http://robocode-archive.strangeautomata.com/robots/fullsail.TimbotNoPrediction_1.0.jar<br />
fullsail.SweetTea 1.1,http://robocode-archive.strangeautomata.com/robots/fullsail.SweetTea_1.1.jar<br />
fushi.PvP1.PvP1 2004-02-16,http://www.robocoderepository.com/BotFiles/2023/fushi.PvP1.PvP1_2004-02-16.jar<br />
fw.Number1 1.0b,http://robocode-archive.strangeautomata.com/robots/fw.Number1_1.0b.jar<br />
gadsky.Gadsky 1.01,http://www.robocoderepository.com/BotFiles/3595/gadsky.Gadsky_1.01.jar<br />
Gecko.ultimateGeckoBot 1.0,http://www.robocoderepository.com/BotFiles/4039/Gecko.ultimateGeckoBot_1.0.jar<br />
geep.mini.GPBotA 1.0,http://www.robocoderepository.com/BotFiles/2361/geep.mini.GPBotA_1.0.jar<br />
geep.mini.GPBotB 1.1,http://www.robocoderepository.com/BotFiles/2363/geep.mini.GPBotB_1.1.jar<br />
genprog.Gajeel 1.0,http://www.robocoderepository.com/BotFiles/4287/genprog.Gajeel_1.0.jar<br />
genprog.Rinmorikazu 1.0,http://www.robocoderepository.com/BotFiles/4286/genprog.Rinmorikazu_1.0.jar<br />
genprog.Zafaran 1.0,http://www.robocoderepository.com/BotFiles/4288/genprog.Zafaran_1.0.jar<br />
germ.TheMind .2,http://www.robocoderepository.com/BotFiles/2525/germ.TheMind_.2.jar<br />
gf.Centaur.Centaur 0.6.7,http://www.robocoderepository.com/BotFiles/4066/gf.Centaur.Centaur_0.6.7.jar<br />
gg.Squaraus 0.6,http://www.robocoderepository.com/BotFiles/1788/gg.Squaraus_0.6.jar<br />
gg.Wolverine 2.0,http://robocode-archive.strangeautomata.com/robots/gg.Wolverine_2.0.jar<br />
gh.GresSuffurd 0.3.14,http://home.versatel.nl/gheijenk/robocode/jarfiles/gh.GresSuffurd_0.3.14.jar<br />
gh.GrubbmGrb 1.2.4,http://home.versatel.nl/gheijenk/robocode/jarfiles/gh.GrubbmGrb_1.2.4.jar<br />
gh.GrypRepetyf 0.13,http://www.robocoderepository.com/BotFiles/2650/gh.GrypRepetyf_0.13.jar<br />
gh.micro.Grinnik 0.7,http://www.robocoderepository.com/BotFiles/3208/gh.micro.Grinnik_0.7.jar<br />
gh.micro.GrubbmThree 0.9,http://www.robocoderepository.com/BotFiles/2444/gh.micro.GrubbmThree_0.9.jar<br />
gh.mini.Gruwel 0.9,http://www.robocoderepository.com/BotFiles/2511/gh.mini.Gruwel_0.9.jar<br />
gh.nano.Grofvuil 0.2,http://www.robocoderepository.com/BotFiles/2553/gh.nano.Grofvuil_0.2.jar<br />
gimp.GimpBot 0.1,http://www.robocoderepository.com/BotFiles/2434/gimp.GimpBot_0.1.jar<br />
gio.RealGioBot 1.0,http://www.robocoderepository.com/BotFiles/2521/gio.RealGioBot_1.0.jar<br />
gjr.Cephalosporin 0.2,http://www.robocoderepository.com/BotFiles/2240/gjr.Cephalosporin_0.2.jar<br />
gm.GaetanoA 2.15,http://www.robocoderepository.com/BotFiles/2188/gm.GaetanoA_2.15.jar<br />
goblin.Bender 2.4,http://www.robocoderepository.com/BotFiles/1871/goblin.Bender_2.4.jar<br />
grybgoofy.GoofyBot 0.10,http://www.robocoderepository.com/BotFiles/2196/grybgoofy.GoofyBot_0.10.jar<br />
gu.MicroScoob 1.3,http://www.robocoderepository.com/BotFiles/2086/gu.MicroScoob_1.3.jar<br />
gwah.GBotMarkIV 1.0,http://robocode-archive.strangeautomata.com/robots/gwah.GBotMarkIV_1.0.jar<br />
gwah.GerryBotMkII 1.5.1,http://robocode-archive.strangeautomata.com/robots/gwah.GerryBotMkII_1.5.1.jar<br />
ha2.T2 0.2,http://www.robocoderepository.com/BotFiles/4225/ha2.T2_0.2.jar<br />
ha2.T2b 0.2b,http://www.robocoderepository.com/BotFiles/4227/ha2.T2b_0.2b.jar<br />
ha2.T3 0.1,http://www.robocoderepository.com/BotFiles/4228/ha2.T3_0.1.jar<br />
ha2.T3 0.2,http://www.robocoderepository.com/BotFiles/4229/ha2.T3_0.2.jar<br />
hamilton.Hamilton 1.0,http://www.robocoderepository.com/BotFiles/1408/hamilton.Hamilton_1.0.jar<br />
hapiel.Spiral 0.1,http://robocoderepository.com/BotFiles/3997/hapiel.Spiral_0.1.jar<br />
Heal.TekitokaBot 1.0,http://www.robocoderepository.com/BotFiles/4285/Heal.TekitokaBot_1.0.jar<br />
hirataatsushi.Neo 1.6,http://www.robocoderepository.com/BotFiles/1081/hirataatsushi.Neo_1.6.jar<br />
hirataatsushi.Trinity 0.003,http://www.robocoderepository.com/BotFiles/1145/hirataatsushi.Trinity_0.003.jar<br />
hlavko.nano.Phoenix 1.0, http://robocode.hmark.eu/hlavko.nano.Phoenix_1.0.jar<br />
hlavko.nano.Ringo 1.0d, http://robocode.hmark.eu/hlavko.nano.Ringo_1.0d.jar<br />
hlavko.nano.Ringo 2.0, http://robocode.hmark.eu/hlavko.nano.Ringo_2.0.jar<br />
hlavko.micro.Flex 1.5, http://robocode.hmark.eu/hlavko.micro.Flex_1.5.jar<br />
homerbots.h1 1.0,http://www.robocoderepository.com/BotFiles/2999/homerbots.h1_1.0.jar<br />
hp.Athena 0.1,http://www.robocoderepository.com/BotFiles/3415/hp.Athena_0.1.jar<br />
hs.SimpleHBot 1.3,http://www.robocoderepository.com/BotFiles/4112/hs.SimpleHBot_1.3.jar<br />
hvilela.HVilela 0.9,http://robocode-archive.strangeautomata.com/robots/hvilela.HVilela_0.9.jar<br />
ICS4U1.Patrick_White_Schrodinger 1.1,http://www.robocoderepository.com/BotFiles/4087/ICS4U1.Patrick_White_Schrodinger_1.1.jar<br />
ins.MobyNano 0.8,http://www.robocoderepository.com/BotFiles/939/ins.MobyNano_0.8.jar<br />
intruder.PrairieWolf 2.61,http://robocode-archive.strangeautomata.com/robots/intruder.PrairieWolf_2.61.jar<br />
ivor.prophet.Prophet 0.01,http://www.ivan.php5.sk/ivor.prophet.Prophet_0.01.jar<br />
is.fon.rs.FonDestroyer3084 1.0,http://www.robocoderepository.com/BotFiles/4047/is.fon.rs.FonDestroyer3084_1.0.jar<br />
is.fon.rs.Kamikaza 1.0,https://dl.dropboxusercontent.com/u/81048920/is.fon.rs.Kamikaza_1.0.jar<br />
jaara.LambdaBot 1.1,http://www.robocoderepository.com/BotFiles/3514/jaara.LambdaBot_1.1.jar<br />
jab.avk.ManuelGallegus 0.6,http://robocode-archive.strangeautomata.com/robots/jab.avk.ManuelGallegus_0.6.jar<br />
jab.DiamondStealer 5,http://robocode-archive.strangeautomata.com/robots/jab.DiamondStealers_5.jar<br />
jab.micro.Sanguijuela 0.8,http://robocode-archive.strangeautomata.com/robots/jab.micro.Sanguijuela_0.8.jar<br />
janm.Jammy 1.0,http://www.robocoderepository.com/BotFiles/3543/janm.Jammy_1.0.jar<br />
jam.micro.RaikoMicro 1.44,http://www.robocoderepository.com/BotFiles/1983/jam.micro.RaikoMicro_1.44.jar<br />
jam.mini.Raiko 0.43,http://www.robocoderepository.com/BotFiles/1922/jam.mini.Raiko_0.43.jar<br />
jam.RaikoMX 0.32,http://www.robocoderepository.com/BotFiles/1961/jam.RaikoMX_0.32.jar<br />
japs.Serenity 1.0,http://www.robocoderepository.com/BotFiles/2217/japs.Serenity_1.0.jar<br />
japs.Sjonniebot 0.9.1,http://www.robocoderepository.com/BotFiles/2203/japs.Sjonniebot_0.9.1.jar<br />
jasolo.Sonda 0.55,http://www.robocoderepository.com/BotFiles/1534/jasolo.Sonda_0.55.jar<br />
jaw.Mouse 0.11,http://www.robocoderepository.com/BotFiles/2472/jaw.Mouse_0.11.jar<br />
jaw.KarenCain 0.11,http://www.robocoderepository.com/BotFiles/2474/jaw.KarenCain_0.11.jar<br />
jaybot.adv.bots.JayBot 2.0,http://robocode-archive.strangeautomata.com/robots/jaybot.adv.bots.JayBot_2.0.jar<br />
jaybot.bots.Oddball 4.0,http://robocode-archive.strangeautomata.com/robots/jaybot.bots.Oddball_4.0.jar<br />
jbot.Rabbit2 1.1,http://robocode-archive.strangeautomata.com/robots/jbot.Rabbit2_1.1.jar<br />
jcs.AutoBot 4.2.1,http://www.robocoderepository.com/BotFiles/2616/jcs.AutoBot_4.2.1.jar<br />
jcs.Decepticon 2.5.3,http://www.robocoderepository.com/BotFiles/2620/jcs.Decepticon_2.5.3.jar<br />
jcs.Megatron 1.2,http://www.robocoderepository.com/BotFiles/2632/jcs.Megatron_1.2.jar<br />
jcs.Seth 1.8,http://robocode-archive.strangeautomata.com/robots/jcs.Seth_1.8.jar<br />
jcw.ArcherOne 1.0,http://robocode-archive.strangeautomata.com/robots/jcw.ArcherOne_1.0.jar<br />
jdw.Hornet 1.0,http://robocode-archive.strangeautomata.com/robots/jdw.Hornet_1.0.jar<br />
jekl.DarkHallow .90.9,http://www.robocoderepository.com/BotFiles/2296/jekl.DarkHallow_.90.9.jar<br />
jekl.Jekyl .70,http://www.robocoderepository.com/BotFiles/1837/jekl.Jekyl_.70.jar<br />
jekl.mini.BlackPearl .91,http://www.robocoderepository.com/BotFiles/1875/jekl.mini.BlackPearl_.91.jar<br />
jep.nano.Hawkwing 0.4.1,http://www.robocoderepository.com/BotFiles/1561/jep.nano.Hawkwing_0.4.1.jar<br />
jep.nano.Hotspur 0.1,http://www.robocoderepository.com/BotFiles/1877/jep.nano.Hotspur_0.1.jar<br />
jep.Terrible 0.4.1,http://www.robocoderepository.com/BotFiles/1536/jep.Terrible_0.4.1.jar<br />
jeremyreeder.Bully 1,http://thesafehouse.info/robocode/jeremyreeder.Bully_1.jar<br />
jeremyreeder.collective.Prophet 5,http://thesafehouse.info/robocode/jeremyreeder.collective.Prophet_5.jar<br />
jeremyreeder.Vincent 2011.12.09,http://www.robocoderepository.com/BotFiles/3993/jeremyreeder.Vincent_2011.12.09.jar<br />
jf.Dodger 1.3,https://dl.dropboxusercontent.com/u/75978227/roborumble_refuge/jf.Dodger_1.3.jar<br />
jgap.JGAP12584 1.0,http://www.robocoderepository.com/BotFiles/3383/jgap.JGAP12584_1.0.jar<br />
jgap.JGAP130166 1.0,http://www.robocoderepository.com/BotFiles/3371/jgap.JGAP130166_1.0.jar<br />
jgap.JGAP23423 1.0,http://www.robocoderepository.com/BotFiles/3378/jgap.JGAP23423_1.0.jar<br />
jgap.JGAP6139 1.0,http://www.robocoderepository.com/BotFiles/3372/jgap.JGAP6139_1.0.jar<br />
jgap.JGAP7247_2 1.0,http://www.robocoderepository.com/BotFiles/3382/jgap.JGAP7247_2_1.0.jar<br />
jgap.JGAP7958 1.0,http://www.robocoderepository.com/BotFiles/3373/jgap.JGAP7958_1.0.jar<br />
jje.BagPuss 1.2,http://robocode-archive.strangeautomata.com/robots/jje.BagPuss_1.2.jar<br />
jk.mega.DrussGT 2.9.3,https://dl.dropboxusercontent.com/u/4066735/jk.mega.DrussGT_2.9.3.jar<br />
jk.melee.Neuromancer 4.0,https://dl.dropboxusercontent.com/u/4066735/jk.melee.Neuromancer_4.0.jar<br />
jk.micro.Cotillion 0.8,https://dl.dropboxusercontent.com/u/4066735/jk.micro.Cotillion_0.8.jar<br />
jk.mini.CunobelinDC 1.2,https://dl.dropboxusercontent.com/u/4066735/jk.mini.CunobelinDC_1.2.jar<br />
jk.nano.Machete 2.0, https://dl.dropboxusercontent.com/u/4066735/jk.nano.Machete_2.0.jar<br />
jk.precise.EnergyDome 1.6,https://dl.dropboxusercontent.com/u/4066735/jk.precise.EnergyDome_1.6.jar<br />
jk.precise.Wintermute 0.7,http://robocode-archive.strangeautomata.com/robots/jk.precise.Wintermute_0.7.jar<br />
jk.sheldor.nano.Yatagan 1.2.3,https://dl.dropboxusercontent.com/u/4066735/jk.sheldor.nano.Yatagan_1.2.3.jar<br />
jmcd.BeoWulf 2.8,http://www.robocoderepository.com/BotFiles/1377/jmcd.BeoWulf_2.8.jar<br />
joe.ADinosaur 1.0,http://www.robocoderepository.com/BotFiles/2822/joe.ADinosaur_1.0.jar<br />
josago.Jorgito 0.16,http://www.robocoderepository.com/BotFiles/4000/josago.Jorgito_0.16.jar<br />
jp.Perpy 16.0,http://www.robocoderepository.com/BotFiles/3001/jp.Perpy_16.0.jar<br />
jp.SineWall 1.0,http://www.robocoderepository.com/BotFiles/2968/jp.SineWall_1.0.jar<br />
jrm.Test0 1.0,http://www.robocoderepository.com/BotFiles/3636/jrm.Test0_1.0.jar<br />
js.PinBall 1.6,http://www.robocoderepository.com/BotFiles/684/js.PinBall_1.6.jar<br />
jsal.Jsalbot 1.0,http://robocode-archive.strangeautomata.com/robots/jsal.Jsalbot_1.0.jar<br />
jt.SpearmintCT Alpha,http://www.robocoderepository.com/BotFiles/2164/jt.SpearmintCT_Alpha.jar<br />
justin.DemonicRage 3.20,http://robocode-archive.strangeautomata.com/robots/justin.DemonicRage_3.20.jar<br />
jw.Booring 1.11,http://www.robocoderepository.com/BotFiles/1250/jw.Booring_1.11.jar<br />
jwirde.Gort 2.0,https://docs.google.com/uc?export=download&id=0B5g5k-WHNBJicHpNNXotVE9aNHc<br />
jwst.DAD.DarkAndDarker 1.1,http://robocode-archive.strangeautomata.com/robots/jwst.DAD.DarkAndDarker_1.1.jar<br />
kanishk.Fr0z3n 1.1,http://robocode-archive.strangeautomata.com/robots/kanishk.Fr0z3n_1.1.jar<br />
kano.gamma.KanoGamma 1.8,http://www.robocoderepository.com/BotFiles/1098/kano.gamma.KanoGamma_1.8.jar<br />
kawam.kmBot9 1.0,http://www.robocoderepository.com/BotFiles/967/kawam.kmBot9_1.0.jar<br />
kawigi.f.FhqwhgadsMicro 1.0,http://www.robocoderepository.com/BotFiles/1673/kawigi.f.FhqwhgadsMicro_1.0.jar<br />
kawigi.micro.Shiz 1.1,http://www.robocoderepository.com/BotFiles/2007/kawigi.micro.Shiz_1.1.jar<br />
kawigi.mini.Coriantumr 1.1,http://www.robocoderepository.com/BotFiles/1988/kawigi.mini.Coriantumr_1.1.jar<br />
kawigi.mini.Fhqwhgads 1.1,http://www.robocoderepository.com/BotFiles/1604/kawigi.mini.Fhqwhgads_1.1.jar<br />
kawigi.nano.FunkyChicken 1.1,http://www.robocoderepository.com/BotFiles/1512/kawigi.nano.FunkyChicken_1.1.jar<br />
kawigi.nano.ThnikkaBot 0.9,http://www.robocoderepository.com/BotFiles/2059/kawigi.nano.ThnikkaBot_0.9.jar<br />
kawigi.robot.Girl 1.2,http://www.robocoderepository.com/BotFiles/2124/kawigi.robot.Girl_1.2.jar<br />
kawigi.sbf.Barracuda 1.0,http://www.robocoderepository.com/BotFiles/1535/kawigi.sbf.Barracuda_1.0.jar<br />
kawigi.sbf.FloodHT 0.9.2,http://www.robocoderepository.com/BotFiles/1552/kawigi.sbf.FloodHT_0.9.2.jar<br />
kawigi.sbf.FloodMicro 1.5,http://www.robocoderepository.com/BotFiles/1381/kawigi.sbf.FloodMicro_1.5.jar<br />
kawigi.sbf.FloodMini 1.4,http://www.robocoderepository.com/BotFiles/1462/kawigi.sbf.FloodMini_1.4.jar<br />
kawigi.sbf.FloodNano 1.2,http://www.robocoderepository.com/BotFiles/1421/kawigi.sbf.FloodNano_1.2.jar<br />
kawigi.sbf.FloodSonnet 0.9,http://www.robocoderepository.com/BotFiles/1779/kawigi.sbf.FloodSonnet_0.9.jar<br />
kawigi.sbf.Teancum 1.3,http://www.robocoderepository.com/BotFiles/1470/kawigi.sbf.Teancum_1.3.jar<br />
kawigi.spare.SpareParts 0.7.6nosnd,http://www.robocoderepository.com/BotFiles/1335/kawigi.spare.SpareParts_0.7.6nosnd.jar<br />
kb.PingPong 1.0,http://www.griessersoftware.com/robocode/kb.PingPong.1.0.jar<br />
kc.micro.Needle 0.101,http://www.robocoderepository.com/BotFiles/3379/kc.micro.Needle_0.101.jar<br />
kc.micro.Thorn 1.252,http://robocode-archive.strangeautomata.com/robots/kc.micro.Thorn_1.252.jar<br />
kc.micro.WaveShark 0.31,http://www.robocoderepository.com/BotFiles/3822/kc.micro.WaveShark_0.31.jar<br />
kc.mini.Vyper 0.311,http://robocode-archive.strangeautomata.com/robots/kc.mini.Vyper_0.311.jar<br />
kc.nano.Splinter 1.2,http://robocode-archive.strangeautomata.com/robots/kc.nano.Splinter_1.2.jar<br />
kc.serpent.Hydra 0.21,http://robocode-archive.strangeautomata.com/robots/kc.serpent.Hydra_0.21.jar<br />
kc.serpent.WaveSerpent 2.11,http://robocode-archive.strangeautomata.com/robots/kc.serpent.WaveSerpent_2.11.jar<br />
kcn.percept.PerceptBot 2.3,http://www.robocoderepository.com/BotFiles/1075/kcn.percept.PerceptBot_2.3.jar<br />
kcn.unnamed.Unnamed 1.21,http://www.robocoderepository.com/BotFiles/1969/kcn.unnamed.Unnamed_1.21.jar<br />
kenran.InfiniteObscurity 0.8,https://dl.dropboxusercontent.com/u/66821565/robots/kenran.InfiniteObscurity_0.8.jar<br />
kenran.mega.Pantheist 1.1,http://robocode-archive.strangeautomata.com/robots/kenran.mega.Pantheist_1.1.jar<br />
kid.Gladiator .7.2,http://robocode-archive.strangeautomata.com/robots/kid.Gladiator_.7.2.jar<br />
kid.Toa .0.5,https://dl.dropboxusercontent.com/u/75978227/roborumble_refuge/kid.Toa_.0.5.jar<br />
KiraNL.Cataris 1.0,http://robocode-archive.strangeautomata.com/robots/KiraNL.Cataris_1.0.jar<br />
KiraNL.Chupacabra 0.5,https://dl.dropboxusercontent.com/u/75978227/roborumble_refuge/KiraNL.Chupacabra_0.5.jar<br />
KiraNL.ChupaLite 0.4,https://dl.dropboxusercontent.com/u/75978227/roborumble_refuge/KiraNL.ChupaLite_0.4.jar<br />
KiraNL.SpaceKees 0.1,https://dl.dropboxusercontent.com/u/75978227/roborumble_refuge/KiraNL.SpaceKees_0.1.jar<br />
kinsen.melee.Angsaichmophobia 1.8c,http://robocode-archive.strangeautomata.com/robots/kinsen.melee.Angsaichmophobia_1.8c.jar<br />
kinsen.nano.Charp 1.0,https://dl.dropbox.com/s/xivyqm5qi4z2bvp/kinsen.nano.Charp_1.0.jar?dl=1<br />
kinsen.nano.Hoplomachy 1.6,http://robocode-archive.strangeautomata.com/robots/kinsen.nano.Hoplomachy_1.6.jar<br />
kinsen.nano.Quarrelet 1.0,http://robocode-archive.strangeautomata.com/robots/kinsen.nano.Quarrelet_1.0.jar<br />
kinsen.nano.Senticous 1.0,http://robocode-archive.strangeautomata.com/robots/kinsen.nano.Senticous_1.0.jar<br />
kjc.etc.Dharok 1.0,http://www.robocoderepository.com/BotFiles/3293/kjc.etc.Dharok_1.0.jar<br />
kjc.MailManX 2.0,http://www.robocoderepository.com/BotFiles/3288/kjc.MailManX_2.0.jar<br />
kjc.Karaykan 1.0,http://www.robocoderepository.com/BotFiles/3289/kjc.Karaykan_1.0.jar<br />
klein.GottesKrieger 1.1,http://www.robocoderepository.com/BotFiles/3258/klein.GottesKrieger_1.1.jar<br />
kneels.ToNoone 0.2,http://www.schickt.de/robocode/kneels.ToNoone_0.2.jar<br />
kneels.nano.Derp 0.2,http://www.schickt.de/robocode/kneels.nano.Derp_0.2.jar<br />
Krabb.fe4r.Fe4r 0.4,http://www.robocoderepository.com/BotFiles/2766/Krabb.fe4r.Fe4r_0.4.jar<br />
Krabb.sliNk.Garm 0.9u,https://dl.dropboxusercontent.com/u/75978227/roborumble_refuge/Krabb.sliNk.Garm_0.9u.jar<br />
Krabb.krabby.Krabby 1.18b,http://robocode-archive.strangeautomata.com/robots/Krabb.krabby.Krabby_1.18b.jar<br />
Krabb.krabby2.Krabby2 1.9o,http://robocode-archive.strangeautomata.com/robots/Krabb.krabby2.Krabby2_1.9o.jar<br />
krillr.mini.JointStrike 2.0.0,http://robocode-archive.strangeautomata.com/robots/krillr.mini.JointStrike_2.0.0.jar<br />
krillr.mega.Psyche 0.0.3,http://robocode-archive.strangeautomata.com/robots/krillr.mega.Psyche_0.0.3.jar<br />
kronenthaler.Basilisk 1.0,http://www.robocoderepository.com/BotFiles/4051/kronenthaler.Basilisk_1.0.jar<br />
krzysiek.robbo2.Robbo 1.0.0,http://robocode-archive.strangeautomata.com/robots/krzysiek.robbo2.Robbo_1.0.0.jar<br />
kurios.DOSexe .9a,http://www.kuriosly.com/roborumble/kurios.DOSexe_.9a.jar<br />
kvk.HebusLeTroll 0.41,http://www.robocoderepository.com/BotFiles/2125/kvk.HebusLeTroll_0.41.jar<br />
labg.Cataclysm 2.05,http://www.robocoderepository.com/BotFiles/2399/labg.Cataclysm_2.05.jar<br />
lancel.Lynx 1.09,http://www.robocoderepository.com/BotFiles/3992/lancel.Lynx_1.09.jar<br />
lazarecki.mega.PinkerStinker 0.7,http://www.robocoderepository.com/BotFiles/3838/lazarecki.mega.PinkerStinker_0.7.jar<br />
leb.ShootAnArrow 0.1,http://www.robocoderepository.com/BotFiles/2648/leb.ShootAnArrow_0.1.jar<br />
lechu.Ala 0.0.4,http://www.robocoderepository.com/BotFiles/3497/lechu.Ala_0.0.4.jar<br />
lechu.Lechu 1.1,http://www.robocoderepository.com/BotFiles/3480/lechu.Lechu_1.1.jar<br />
Legend.Biogon 1.5,http://robocode-archive.strangeautomata.com/robots/Legend.Biogon_1.5.jar?attredirects=0&d=1<br />
Legend.BoulderZY 1.4.9,http://robocode-archive.strangeautomata.com/robots/Legend.BoulderZY_1.4.9.jar?attredirects=0&d=1<br />
Legend.Qetro 1.6,http://robocode-archive.strangeautomata.com/robots/Legend.Qetro_1.6.jar?attredirects=0&d=1<br />
Legend.X_FireFly 1.3,http://robocode-archive.strangeautomata.com/robots/Legend.X_FireFly_1.3.jar?attredirects=0&d=1<br />
lessonz.robocode.Oz 0.5.0,https://dl.dropbox.com/u/9231432/robocode/lessonz.robocode.Oz-0.5.0.jar<br />
lion.Kresnanano 1.0,http://www.robocoderepository.com/BotFiles/2295/lion.Kresnanano_1.0.jar<br />
lk.nano.Avesnar 1.1,http://www.robocoderepository.com/BotFiles/1597/lk.nano.Avesnar_1.1.jar<br />
lmk.ACPFinal 0.2,http://pillow.rscheme.org/lmk.ACPFinal_0.2.jar<br />
lorneswork.Predator 1.0,http://www.robocoderepository.com/BotFiles/2609/lorneswork.Predator_1.0.jar<br />
logiblocs.Fire 1.0,https://dl.dropboxusercontent.com/u/66369360/logiblocs.Fire_1.0.jar<br />
logiblocs.SittingDroid 1.0,https://dl.dropboxusercontent.com/u/66369360/logiblocs.SittingDroid_1.0.jar<br />
lrem.Spectre 0.4.4,http://www.robocoderepository.com/BotFiles/2253/lrem.Spectre_0.4.4.jar<br />
lrem.magic.TormentedAngel Antiquitie,http://robocode-archive.strangeautomata.com/robots/lrem.magic.TormentedAngel_Antiquitie.jar<br />
lrem.micro.MoggFanatic 0.2,http://www.robocoderepository.com/BotFiles/2639/lrem.micro.MoggFanatic_0.2.jar<br />
lrem.micro.FalseProphet Alpha,http://www.robocoderepository.com/BotFiles/2415/lrem.micro.FalseProphet_Alpha.jar<br />
lrem.quickhack.QuickHack 1.0,http://www.robocoderepository.com/BotFiles/2555/lrem.quickhack.QuickHack_1.0.jar<br />
lucasslf.Dodger 1.0,http://robocode-archive.strangeautomata.com/robots/lucasslf.Dodger_1.0.jar<br />
lucasslf.HariSeldon 0.2.1,http://robocode-archive.strangeautomata.com/robots/lucasslf.HariSeldon_0.2.1.jar<br />
lucasslf.Wiggins 0.6,http://robocode-archive.strangeautomata.com/robots/lucasslf.Wiggins_0.6.jar<br />
lunchie.Lunchbox 0.93,http://robocode-archive.strangeautomata.com/robots/lunchie.Lunchbox_0.93.jar<br />
lundal.Mark8 2012.09.15,https://dl.dropbox.com/s/gcs13tapwtwpdwc/lundal.Mark8_2012.09.15.jar<br />
lw.LuthersTest 0.1,http://robocode-archive.strangeautomata.com/robots/lw.LuthersTest_0.1.jar<br />
lxx.ConceptA 0.8,https://github.com/aleksey-zhidkov/ConceptA/raw/master/builds/lxx.ConceptA_0.8.jar<br />
lxx.Tomcat 3.67c,https://github.com/aleksey-zhidkov/Tomcat/raw/develop/builds/lxx.Tomcat_3.67c.jar<br />
m3thos.Eva00 1.1,http://robocode-archive.strangeautomata.com/robots/m3thos.Eva00_1.1.jar<br />
m3thos.Eva02 0.7.1,http://robocode-archive.strangeautomata.com/robots/m3thos.Eva02_0.7.1.jar<br />
m3thos.mini.Eva01 0.5.5,http://robocode-archive.strangeautomata.com/robots/m3thos.mini.Eva01_0.5.5.jar<br />
ma.is.fon.rs.RobotA 0.01,http://www.robocoderepository.com/BotFiles/4048/ma.is.fon.rs.RobotA_0.01.jar<br />
madmath.Cow 0.1.1,http://www.robocoderepository.com/BotFiles/3476/madmath.Cow_0.1.1.jar<br />
mae.Mae1 1.1,http://www.robocoderepository.com/BotFiles/4267/mae.Mae1_1.1.jar<br />
mahrgell.mahrram 1.3,http://www.robocoderepository.com/BotFiles/4284/mahrgell.mahrram_1.3.jar<br />
marcinek.TopGun 1.3,http://www.robocoderepository.com/BotFiles/3458/marcinek.TopGun_1.3.jar<br />
maribo.FollowFire 1.11,http://www.robocoderepository.com/BotFiles/4281/maribo.FollowFire_1.11.jar<br />
maribo.IotaCT 1.0,http://www.robocoderepository.com/BotFiles/4189/maribo.IotaCT_1.0.jar<br />
maribo.Omicron 1.0,http://www.robocoderepository.com/BotFiles/4191/maribo.Omicron_1.0.jar<br />
marksteam.Phoenix 1.0,http://www.robocoderepository.com/BotFiles/2749/marksteam.Phoenix_1.0.jar<br />
matt.advanced.Katana 1.0,http://www.robocoderepository.com/BotFiles/2498/matt.advanced.Katana_1.0.jar<br />
matt.BlueMind 0.8.00,http://www.robocoderepository.com/BotFiles/2685/matt.BlueMind_0.8.00.jar<br />
matt.UnderDark3 2.4.34,http://www.robocoderepository.com/BotFiles/2485/matt.UnderDark3_2.4.34.jar<br />
matt.UnderDark4 0.4.00,http://www.robocoderepository.com/BotFiles/2644/matt.UnderDark4_0.4.00.jar<br />
mb.Beast 0.4.1,http://cdn.bitbucket.org/mbrahm/robodownloads/downloads/mb.Beast_0.4.1.jar<br />
mb.Monte 0.1.0,http://cdn.bitbucket.org/mbrahm/robodownloads/downloads/mb.Monte_0.1.0.jar<br />
mbh.Mbh 0.1,http://www.robocoderepository.com/BotFiles/3365/mbh.Mbh_0.1.jar<br />
mbro.BelajarBot 0.0.3,http://www.robocoderepository.com/BotFiles/2471/mbro.BelajarBot_0.0.3.jar<br />
mbro.Detektor3 0.1.1,http://www.robocoderepository.com/BotFiles/2478/mbro.Detektor3_0.1.1.jar<br />
mc.Messapia 0.1.8,http://www.robocoderepository.com/BotFiles/2223/mc.Messapia_0.1.8.jar<br />
mcb.Audace 1.3,http://www.robocoderepository.com/BotFiles/3424/mcb.Audace_1.3.jar<br />
McS.Spanky_test 0.1a,http://www.robocoderepository.com/BotFiles/4067/McS.Spanky_test_0.1a.jar<br />
md.November 1.0,http://www.robocoderepository.com/BotFiles/1004/md.November_1.0.jar<br />
md.Pasta 1.1,http://www.robocoderepository.com/BotFiles/1014/md.Pasta_1.1.jar<br />
md.VelociRaptor 1.3,http://www.robocoderepository.com/BotFiles/232/md.VelociRaptor_1.3.jar<br />
mdouet.BotKicker 2.0,http://www.robocoderepository.com/BotFiles/1478/mdouet.BotKicker_2.0.jar<br />
metal.small.MCool 1.21,http://www.robocoderepository.com/BotFiles/1698/metal.small.MCool_1.21.jar<br />
metal.small.dna2.MCoolDNA 1.5,http://www.robocoderepository.com/BotFiles/2354/metal.small.dna2.MCoolDNA_1.5.jar<br />
microtestbotpack.MicroTestBot 1.0,https://dl.dropboxusercontent.com/u/4547352/robocode/microtestbotpack.MicroTestBot_1.0.jar<br />
mjhjd.MattHussey1 1.1,https://dl.dropbox.com/u/90567837/mjhjd.MattHussey1_1.1.jar<br />
mk.Alpha 0.2.1,http://robocode-archive.strangeautomata.com/robots/mk.Alpha_0.2.1.jar<br />
mladjo.AIR 0.7,http://www.robocoderepository.com/BotFiles/3187/mladjo.AIR_0.7.jar<br />
mladjo.GnuKlub 0.1,http://robocode-archive.strangeautomata.com/robots/mladjo.GnuKlub_0.1.jar<br />
mladjo.Grrrrr 0.9,http://www.robocoderepository.com/BotFiles/3189/mladjo.Grrrrr_0.9.jar<br />
mladjo.iRobot 0.3,http://www.robocoderepository.com/BotFiles/3149/mladjo.iRobot_0.3.jar<br />
mladjo.Startko 1.0,http://www.robocoderepository.com/BotFiles/3186/mladjo.Startko_1.0.jar<br />
mld.DustBunny 3.8,http://www.robocoderepository.com/BotFiles/3650/mld.DustBunny_3.8.jar<br />
mld.Infinity 2.2,http://www.robocoderepository.com/BotFiles/3591/mld.Infinity_2.2.jar<br />
mld.LittleBlackBook 1.69e,http://robocode-archive.strangeautomata.com/robots/mld.LittleBlackBook_1.69e.jar<br />
mld.Moebius 2.9.3,http://www.robocoderepository.com/BotFiles/3634/mld.Moebius_2.9.3.jar<br />
mld.Wisdom 1.0,http://www.robocoderepository.com/BotFiles/3640/mld.Wisdom_1.0.jar<br />
mmb.Roskilde 0.5,http://www.robocoderepository.com/BotFiles/3965/mmb.Roskilde_0.5.jar<br />
mme.NikeEnhanced 2.0,http://www.robocoderepository.com/BotFiles/2828/mme.NikeEnhanced_2.0.jar<br />
mn.micro.perceptual.Mimic 1.0.0,http://dl.dropbox.com/s/3m8lbyarqc06tps/mn.micro.perceptual.Mimic_1.0.0.jar?dl=1<br />
mn.nano.perceptual.Impact 1.3.0,http://dl.dropbox.com/s/njuuaycr3qswlgu/mn.nano.perceptual.Impact_1.3.0.jar?dl=1<br />
mn.Combat 3.19.1,http://dl.dropbox.com/s/w52ulpy9zeiylzi/mn.Combat_3.19.1.jar<br />
mn.Combat 3.21.0,http://dl.dropboxusercontent.com/s/qra9gek9sb502md/mn.Combat_3.21.0.jar<br />
mn.SuperSittingDuck 1.0.2,http://robocode-archive.strangeautomata.com/robots/mn.SuperSittingDuck_1.0.2.jar<br />
mnt.AHEB 0.6a,http://www.robocoderepository.com/BotFiles/2417/mnt.AHEB_0.6a.jar<br />
mnt.SurferBot 0.2.5,http://www.robocoderepository.com/BotFiles/2433/mnt.SurferBot_0.2.5.jar<br />
morbid.MorbidPriest 1.0,http://www.robocoderepository.com/BotFiles/1758/morbid.MorbidPriest_1.0.jar<br />
mrm.MightyMoose .2,http://robocode-archive.strangeautomata.com/robots/mrm.MightyMoose_.2.jar<br />
ms.Ares 0.19,http://www.robocoderepository.com/BotFiles/730/ms.Ares_0.19.jar<br />
mue.Ascendant 1.2.27,http://mue.sonar-echo.de/robocode/mue.Ascendant_1.2.27.jar<br />
mue.Hyperion 0.8,http://www.robocoderepository.com/BotFiles/2224/mue.Hyperion_0.8.jar<br />
muf.CrazyKitten 0.9,http://www.robocoderepository.com/BotFiles/1946/muf.CrazyKitten_0.9.jar<br />
mwj.A1176183 1.0,https://dl.dropboxusercontent.com/u/75978227/roborumble_refuge/mwj.A1176183_1.0.jar<br />
myl.micro.Avipes 1.00,http://www.robocoderepository.com/BotFiles/1347/myl.micro.Avipes_1.00.jar<br />
myl.micro.NekoNinja 1.30,http://www.robocoderepository.com/BotFiles/944/myl.micro.NekoNinja_1.30.jar<br />
myl.micro.Predator 1.50,http://www.robocoderepository.com/BotFiles/1097/myl.micro.Predator_1.50.jar<br />
myl.micro.Troodon 1.10,http://www.robocoderepository.com/BotFiles/1226/myl.micro.Troodon_1.10.jar<br />
myl.nano.Graviton 1.10,http://www.robocoderepository.com/BotFiles/770/myl.nano.Graviton_1.10.jar<br />
myl.nano.Kakuru 1.20,http://www.robocoderepository.com/BotFiles/1330/myl.nano.Kakuru_1.20.jar<br />
myl.nano.KomoriNinja 1.1,http://www.robocoderepository.com/BotFiles/978/myl.nano.KomoriNinja_1.1.jar<br />
mym.EdgeStalker 1.0,http://www.robocoderepository.com/BotFiles/3956/mym.EdgeStalker_1.0.jar<br />
mz.Adept 2.65,http://www.robocoderepository.com/BotFiles/2090/mz.Adept_2.65.jar<br />
mz.AdeptBSB 1.03,http://www.robocoderepository.com/BotFiles/2113/mz.AdeptBSB_1.03.jar<br />
mz.Movement 1.8,http://www.robocoderepository.com/BotFiles/2145/mz.Movement_1.8.jar<br />
mz.NanoDeath 2.56,http://www.robocoderepository.com/BotFiles/2010/mz.NanoDeath_2.56.jar<br />
mz.NanoGod 2.02,http://www.robocoderepository.com/BotFiles/1996/mz.NanoGod_2.02.jar<br />
nammyung.ModelT 0.23,http://www.robocoderepository.com/BotFiles/969/nammyung.ModelT_0.23.jar<br />
nan.Ihivatar_Mk_1 1.0,http://dl.dropbox.com/s/4oxw831xuu9yui0/nan.Ihivatar_Mk_1_1.0.jar?dl=1<br />
nanoskank.NanoSkank 1.0,http://robocode-archive.strangeautomata.com/robots/nanoskank.NanoSkank_1.0.jar<br />
nat.BlackHole 2.0gamma,http://nat.robothai.net/robots/nat.BlackHole_2.0gamma.jar<br />
nat.Hikari dev0001,http://nat.robothai.net/robots/nat.Hikari_dev0001.jar<br />
nat.micro.Reepicheep 0.1a,http://nat.robothai.net/robots/nat.micro.Reepicheep_0.1a.jar<br />
nat.nano.Ocnirp 1.73,http://nat.robothai.net/robots/nat.nano.Ocnirp_1.73.jar<br />
nat.nano.OcnirpPM 1.0,http://nat.robothai.net/robots/nat.nano.OcnirpPM_1.0.jar<br />
nat.nano.OcnirpSNG 1.0b,http://nat.robothai.net/robots/nat.nano.OcnirpSNG_1.0b.jar<br />
nat.Samekh 0.4,http://nat.robothai.net/robots/nat.Samekh_0.4.jar<br />
ncj.MoxieBot 1.0,http://www.robocoderepository.com/BotFiles/4003/ncj.MoxieBot_1.0.jar<br />
ndn.DyslexicMonkey 1.1,http://www.robocoderepository.com/BotFiles/1141/ndn.DyslexicMonkey_1.1.jar<br />
NDH.GuessFactor 1.0, http://www.robocoderepository.com/BotFiles/3949/NDH.GuessFactor_1.0.jar<br />
ne.Chimera 1.2,http://www.robocoderepository.com/BotFiles/3276/ne.Chimera_1.2.jar<br />
nexus.One 1.0,http://robocode-archive.strangeautomata.com/robots/nexus.One_1.0.jar<br />
nexus.Prototype 1.0,http://robocode-archive.strangeautomata.com/robots/nexus.Prototype_1.0.jar<br />
nexus.Two 0.2,https://dl.dropbox.com/s/glol05xymwbb0a7/nexus.Two_0.2.jar<br />
nexus.Experimental 0.2,https://dl.dropbox.com/s/kxeorcrx6jwlm2e/nexus.Experimental_0.2.jar<br />
ngf.nano.Sparky 0.1.5,http://robocode-archive.strangeautomata.com/robots/ngf.nano.Sparky_0.1.5.jar<br />
nic.Nicator 2.4,http://www.robocoderepository.com/BotFiles/193/nic.Nicator_2.4.jar<br />
nic.SnippetBot 1.0,http://www.robocoderepository.com/BotFiles/286/nic.SnippetBot_1.0.jar<br />
nkn.mini.Jskr0 0.1,http://www.robocoderepository.com/BotFiles/3852/nkn.mini.Jskr0_0.1.jar<br />
NG.LegatusLegionis 1.2,http://www.robocoderepository.com/BotFiles/4026/NG.LegatusLegionis_1.2.jar<br />
non.mega.NaN 0.1,http://www.robocoderepository.com/BotFiles/1960/non.mega.NaN_0.1.jar<br />
non.mega.NoName 0.0,http://www.robocoderepository.com/BotFiles/1957/non.mega.NoName_0.0.jar<br />
Noran.BitchingElk 0.054,http://www.robocoderepository.com/BotFiles/1855/Noran.BitchingElk_0.054.jar<br />
Noran.RandomTargeting 0.02,http://www.robocoderepository.com/BotFiles/1849/Noran.RandomTargeting_0.02.jar<br />
nova.Snow 1.0,http://www.robocoderepository.com/BotFiles/3623/nova.Snow_1.0.jar<br />
ntc.Cannon 1.12test,http://www.robocoderepository.com/BotFiles/3815/ntc.Cannon_1.12test.jar<br />
ntc.Evader 1.2,http://www.robocoderepository.com/BotFiles/3355/ntc.Evader_1.2.jar<br />
ntc.Knowledge 1.1,http://www.robocoderepository.com/BotFiles/3354/ntc.Knowledge_1.1.jar<br />
ntc.Lasers.Lasers 0.9,http://www.robocoderepository.com/BotFiles/3359/ntc.Lasers.Lasers_0.9.jar<br />
ntc.Plains 0.9,http://www.robocoderepository.com/BotFiles/3381/ntc.Plains_0.9.jar<br />
ntc.Swim 0.9,http://www.robocoderepository.com/BotFiles/3820/ntc.Swim_0.9.jar<br />
ntw.Sighup 1.5,http://robocode-archive.strangeautomata.com/robots/ntw.Sighup_1.5.jar<br />
ntw.Sigsys 1.6,http://robocode-archive.strangeautomata.com/robots/ntw.Sigsys_1.6.jar<br />
nz.jdc.micro.HedgehogGF 1.3,http://www.robocoderepository.com/BotFiles/3626/nz.jdc.micro.HedgehogGF_1.3.jar<br />
nz.jdc.micro.HedgehogP 1.2,http://www.robocoderepository.com/BotFiles/3622/nz.jdc.micro.HedgehogP_1.2.jar<br />
nz.jdc.nano.AralT 1.1,http://www.robocoderepository.com/BotFiles/4269/nz.jdc.nano.AralT_1.1.jar<br />
nz.jdc.nano.AralR 1.1,http://www.robocoderepository.com/BotFiles/4268/nz.jdc.nano.AralR_1.1.jar<br />
nz.jdc.nano.NeophytePattern 1.1,http://www.robocoderepository.com/BotFiles/4244/nz.jdc.nano.NeophytePattern_1.1.jar<br />
nz.jdc.nano.NeophytePRAL 1.4,http://www.robocoderepository.com/BotFiles/4250/nz.jdc.nano.NeophytePRAL_1.4.jar<br />
nz.jdc.nano.NeophyteSRAL 1.3,http://www.robocoderepository.com/BotFiles/4246/nz.jdc.nano.NeophyteSRAL_1.3.jar<br />
nz.jdc.nano.PatternAdept 1.0,http://www.robocoderepository.com/BotFiles/4271/nz.jdc.nano.PatternAdept_1.0.jar<br />
nz.jdc.nano.PralDeGuerre 1.1,http://www.robocoderepository.com/BotFiles/4273/nz.jdc.nano.PralDeGuerre_1.1.jar<br />
nzeemin.Izh 0.5,http://nzeemin-opensrc.googlecode.com/files/nzeemin.Izh_0.5.jar<br />
oa.weak.BotherBot 0.1,http://www.robocoderepository.com/BotFiles/2956/oa.weak.BotherBot_0.1.jar<br />
oa.weak.FlyMk1 0.1,http://www.robocoderepository.com/BotFiles/2958/oa.weak.FlyMk1_0.1.jar<br />
ola.Puffin 1.0,http://www.robocoderepository.com/BotFiles/3380/ola.Puffin_1.0.jar<br />
omens.CannonfodderMicro 1.4,https://dl.dropbox.com/s/ye675r93lpgpuei/omens.CannonfodderMicro_1.4.jar<br />
omens.CannonfodderNano 1.4,https://dl.dropbox.com/s/u94wp86uo34feue/omens.CannonfodderNano_1.4.jar<br />
oog.melee.Capulet 1.2,https://sites.google.com/site/crazybassoon/oog.melee.Capulet_1.2.jar<br />
oog.melee.Mercutio 1.0,http://www.robocoderepository.com/BotFiles/3848/oog.melee.Mercutio_1.0.jar<br />
oog.micro.MagicD3 0.41,http://www.robocoderepository.com/BotFiles/3801/oog.micro.MagicD3_0.41.jar<br />
oog.micro.Maui 1.2,http://robocode-archive.strangeautomata.com/robots/oog.micro.Maui_1.2.jar<br />
oog.micro.SavantMicro 1.1,http://robocode-archive.strangeautomata.com/robots/oog.micro.SavantMicro_1.1.jar<br />
oog.mini.AlphaDragon 0.1,http://www.robocoderepository.com/BotFiles/4015/oog.mini.AlphaDragon_0.1.jar<br />
oog.nano.Caligula 1.15,http://www.robocoderepository.com/BotFiles/4022/oog.nano.Caligula_1.15.jar<br />
oog.nano.Fuatisha 1.1,http://www.robocoderepository.com/BotFiles/4045/oog.nano.Fuatisha_1.1.jar<br />
oog.nano.MagicD2 2.4,http://www.robocoderepository.com/BotFiles/3749/oog.nano.MagicD2_2.4.jar<br />
oog.nano.SavantVS 1.1,http://www.robocoderepository.com/BotFiles/3714/oog.nano.SavantVS_1.1.jar<br />
oog.nano.SavantWS 0.1,http://www.robocoderepository.com/BotFiles/3709/oog.nano.SavantWS_0.1.jar<br />
oog.PricklyPear 1.0.6,http://robocode-archive.strangeautomata.com/robots/oog.PricklyPear_1.0.6.jar<br />
ouroboros.Dragon 0.0.3,https://dl.dropboxusercontent.com/u/98946154/robocode/ouroboros.Dragon_0.0.3.jar<br />
pa.Improved 1.1,http://robocode-archive.strangeautomata.com/robots/pa.Improved_1.1.jar<br />
pa3k.Manta 1.20,https://dl.dropboxusercontent.com/u/21124688/robocode/pa3k.Manta_1.20.jar<br />
pa3k.Quark 1.02,https://dl.dropboxusercontent.com/u/21124688/robocode/pa3k.Quark_1.02.jar<br />
pa3k.Viper 5.03,https://dl.dropboxusercontent.com/u/21124688/robocode/pa3k.Viper_5.03.jar<br />
pac.ABC 2.1,https://dl.dropbox.com/u/5439044/Robocode/pac.ABC_2.1.jar<br />
pak.JakeTheTestingRobot .1b,http://www.robocoderepository.com/BotFiles/3373/pak.JakeTheTestingRobot_.1b.jar<br />
pak.Dargon 1.0b,http://www.robocoderepository.com/BotFiles/3388/pak.Dargon_1.0b.jar<br />
paket.MojRobot 1.0,https://dl.dropbox.com/s/faovho732zgpvq8/paket.MojRobot_1.0.jar?dl=1<br />
panzer.Panzer 0.2,http://www.robocoderepository.com/BotFiles/4008/panzer.Panzer_0.2.jar<br />
paolord.TheHulk 1.0,http://www.robocoderepository.com/BotFiles/3595/paolord.TheHulk_1.0.jar<br />
patson.PatsonTestBot 1.0,http://www.robocoderepository.com/BotFiles/3324/patson.PatsonTestBot_1.0.jar<br />
paulk.PaulV3 1.7,http://www.robocoderepository.com/BotFiles/3502/paulk.PaulV3_1.7.jar<br />
pb.Oscillator 1.0,http://www.robocoderepository.com/BotFiles/2070/pb.Oscillator_1.0.jar<br />
pe.mini.SandboxMini 1.2,http://www.robocoderepository.com/BotFiles/917/pe.mini.SandboxMini_1.2.jar<br />
pe.minimelee.SandboxMiniMelee 1.1,http://www.robocoderepository.com/BotFiles/934/pe.minimelee.SandboxMiniMelee_1.1.jar<br />
pe.SandboxDT 3.02,http://www.robocoderepository.com/BotFiles/793/pe.SandboxDT_3.02.jar<br />
pe.SandboxLump 1.52,http://www.robocoderepository.com/BotFiles/731/pe.SandboxLump_1.52.jar<br />
pedersen.Hubris 2.4,http://home.comcast.net/~kokyunage/robocode/hubris/pedersen.Hubris_2.4.jar<br />
pedersen.Ugluk 1.0,http://home.comcast.net/~kokyunage/robocode/ugluk/pedersen.Ugluk_1.0.jar<br />
pez.clean.Swiffer 0.2.9,http://www.robocoderepository.com/BotFiles/1883/pez.clean.Swiffer_0.2.9.jar<br />
pez.frankie.Frankie 0.9.6.1,http://www.robocoderepository.com/BotFiles/1565/pez.frankie.Frankie_0.9.6.1.jar<br />
pez.gloom.GloomyDark 0.9.2,http://www.robocoderepository.com/BotFiles/1741/pez.gloom.GloomyDark_0.9.2.jar<br />
pez.mako.Mako 1.5,http://www.robocoderepository.com/BotFiles/1317/pez.mako.Mako_1.5.jar<br />
pez.micro.Aristocles 0.3.7,http://www.robocoderepository.com/BotFiles/1923/pez.micro.Aristocles_0.3.7.jar<br />
pez.mini.ChironexFleckeri 0.5,http://www.robocoderepository.com/BotFiles/2513/pez.mini.ChironexFleckeri_0.5.jar<br />
pez.mini.Gouldingi 1.5,http://www.robocoderepository.com/BotFiles/1351/pez.mini.Gouldingi_1.5.jar<br />
pez.mini.Pugilist 2.5.1f,https://dl.dropboxusercontent.com/u/3259215/robocode/bots/pez.mini.Pugilist_2.5.1f.jar<br />
pez.mini.Tityus 0.9.1,http://www.robocoderepository.com/BotFiles/1657/pez.mini.Tityus_0.9.1.jar<br />
pez.mini.VertiLeach 0.4.0,http://www.robocoderepository.com/BotFiles/1744/pez.mini.VertiLeach_0.4.0.jar<br />
pez.nano.Icarus 0.3,http://www.robocoderepository.com/BotFiles/2353/pez.nano.Icarus_0.3.jar<br />
pez.nano.LittleEvilBrother 0.1,http://www.robocoderepository.com/BotFiles/2056/pez.nano.LittleEvilBrother_0.1.jar<br />
pez.rumble.Ali 0.4.9,http://www.robocoderepository.com/BotFiles/2416/pez.rumble.Ali_0.4.9.jar<br />
pez.rumble.CassiusClay 2rho.02no,https://dl.dropboxusercontent.com/u/3259215/robocode/bots/pez.rumble.CassiusClay_2rho.02no.jar<br />
pfvicm.Sobieski 7.2.3b,http://www.robocoderepository.com/BotFiles/2911/pfvicm.Sobieski_7.2.3b.jar<br />
ph.micro.Pikeman 0.4.5,http://www.robocoderepository.com/BotFiles/2364/ph.micro.Pikeman_0.4.5.jar<br />
ph.mini.Archer 0.6.6,http://www.robocoderepository.com/BotFiles/2326/ph.mini.Archer_0.6.6.jar<br />
ph.musketeer.Musketeer 0.6,http://www.robocoderepository.com/BotFiles/2281/ph.musketeer.Musketeer_0.6.jar<br />
ph.Thinker 0.2.5,http://www.robocoderepository.com/BotFiles/2336/ph.Thinker_0.2.5.jar<br />
pi.Dark 10,http://robocode-archive.strangeautomata.com/robots/pi.Dark_10.jar<br />
pl.Drum 0.1,http://robocode-archive.strangeautomata.com/robots/pl.Drum_0.1.jar<br />
pl.mskiba.Hilton 0.4,https://dl.dropbox.com/u/1209595/robots/pl.mskiba.Hilton_0.4.jar<br />
pl.Patton.GeneralPatton 1.54,http://robocode-archive.strangeautomata.com/robots/pl.Patton.GeneralPatton_1.54.jar<br />
pla.Memnoch 0.5,http://www.robocoderepository.com/BotFiles/2211/pla.Memnoch_0.5.jar<br />
PK.Twardy 0.4.2,http://www.robocoderepository.com/BotFiles/3272/PK.Twardy_0.4.2.jar<br />
pkbots.BoyTDSurfer 1.0,http://robocode-archive.strangeautomata.com/robots/pkbots.BoyTDSurfer_1.0.jar<br />
pkdeken.Paladin 1.0,http://www.robocoderepository.com/BotFiles/3556/pkdeken.Paladin_1.0.jar<br />
PkKillers.PkAssassin 1.0,http://www.robocoderepository.com/BotFiles/3485/PkKillers.PkAssassin_1.0.jar<br />
pmc.SniperBot 1.0,http://robocode-archive.strangeautomata.com/robots/pmc.SniperBot_1.0.jar<br />
Polkwane.Piyane 0.7b,https://dl.dropbox.com/s/mztcvf13ab41or5/Polkwane.Piyane_0.7b.jar?token_hash=AAH-IVvOaiKm2CWOaEKosx9APzGrfMWF-jpbOJaY_bFnow&dl=1<br />
Polkwane.Intensive 1.0,http://robowiki.net/w/images/1/1d/Polkwane.Intensive_1.0.jar<br />
populations.TrainStoopidbot 0.01,http://www.robocoderepository.com/BotFiles/4052/populations.TrainStoopidbot_0.01.jar<br />
positive.Portia 1.26e,http://robocode-archive.strangeautomata.com/robots/positive.Portia_1.26e.jar<br />
povik.nano.Smilee 0.2.1,http://www.robocoderepository.com/BotFiles/3950/povik.nano.Smilee_0.2.1.jar<br />
projectx.ProjectNano 2.0,http://robocode-archive.strangeautomata.com/robots/projectx.ProjectNano_2.0.jar<br />
projectx.TestNano 1.0,http://www.robocoderepository.com/BotFiles/3444/projectx.TestNano_1.0.jar<br />
PSW.Relentless 0.1,http://www.robocoderepository.com/BotFiles/4082/PSW.Relentless_0.1.jar<br />
pulsar.PulsarMax 0.8.9,http://www.robocoderepository.com/BotFiles/2227/pulsar.PulsarMax_0.8.9.jar<br />
pulsar.PulsarNano 0.2.4,http://www.robocoderepository.com/BotFiles/2335/pulsar.PulsarNano_0.2.4.jar<br />
pulsar.Nanis 0.3,http://www.robocoderepository.com/BotFiles/2560/pulsar.Nanis_0.3.jar<br />
qohnil.blot.BlotBot 3.61,http://www.robocoderepository.com/BotFiles/546/qohnil.blot.BlotBot_3.61.jar<br />
qualidafial.MajorDick 1.0.1,https://www.dropbox.com/sh/n570kf8rsq6fuw2/vVQSIJJnAS/qualidafial.MajorDick_1.0.1.jar<br />
Queens_teamrobot.UltraRazor 1.0,http://www.robocoderepository.com/BotFiles/2108/Queens_teamrobot.UltraRazor_1.0.jar<br />
quietus.Invader 0.1,https://dl.dropboxusercontent.com/u/75978227/roborumble_refuge/quietus.Invader_0.1.jar<br />
quietus.NarrowRadar 0.1,https://dl.dropboxusercontent.com/u/75978227/roborumble_refuge/quietus.NarrowRadar_0.1.jar<br />
qwaker00.Gandhi 1.0.1mini,https://dl.dropbox.com/u/29826809/bots/qwaker00.Gandhi_1.0.1mini.jar<br />
qwaker00.Ahchoo 1.1.j6,https://dl.dropbox.com/u/29826809/bots/qwaker00.Ahchoo_1.1.j6.jar<br />
racso.Crono 1.0,http://oscargomez.net/files/racso.Crono_1.0.jar<br />
racso.Frog 0.9,http://oscargomez.net/files/racso.Frog_0.9.jar<br />
radnor.DoctorBob 1.42,http://www.robocoderepository.com/BotFiles/2133/radnor.DoctorBob_1.42.jar<br />
radnor.RamRod 1.0,http://www.robocoderepository.com/BotFiles/2085/radnor.RamRod_1.0.jar<br />
rampancy.Durandal 2.2d,https://github.com/aleksey-zhidkov/rc-repo-mirror/raw/master/rampancy.Durandal_2.2d.jar<br />
rampancy.micro.Epiphron 1.0,https://github.com/aleksey-zhidkov/rc-repo-mirror/raw/master/rampancy.micro.Epiphron_1.0.jar<br />
rapture.Rapture 2.13,http://www.robocoderepository.com/BotFiles/15/rapture.Rapture_2.13.jar<br />
ratosh.nano.Debo 1.36,http://www.robocoderepository.com/BotFiles/1702/ratosh.nano.Debo_1.36.jar<br />
ratosh.Nobo 0.21,http://www.robocoderepository.com/BotFiles/1612/ratosh.Nobo_0.21.jar<br />
ratosh.Wesco 1.4,http://www.robocoderepository.com/BotFiles/1914/ratosh.Wesco_1.4.jar<br />
rc.yoda.Yoda 1.0.6c.fix,https://dl.dropboxusercontent.com/u/75978227/roborumble_refuge/rc.yoda.Yoda_1.0.6c.fix.jar<br />
rc.RCBot 2.0,http://robocode-archive.strangeautomata.com/robots/rc.RCBot_2.0.jar<br />
rcb.Vanessa03 0,http://www.robocoderepository.com/BotFiles/1364/rcb.Vanessa03_0.jar<br />
rcp.Kuramatron 1.0,http://www.robocoderepository.com/BotFiles/3307/rcp.Kuramatron_1.0.jar<br />
rdt199.Warlord 0.73,http://www.robocoderepository.com/BotFiles/1130/rdt199.Warlord_0.73.jar<br />
reaper.Reaper 1.1,http://www.robocoderepository.com/BotFiles/3412/reaper.Reaper_1.1.jar<br />
reeder.caden.Elmo 1,http://reederhome.net/colin/Elmo_1.jar<br />
reeder.caden.Grover 1.0,http://reederhome.net/colin/Grover_1.0.jar<br />
reeder.colin.WallGuy3 1.0,http://reederhome.net/colin/WallGuy3_1.0.jar<br />
repositorio.NanoStep 1.0,http://robocode-archive.strangeautomata.com/robots/repositorio.NanoStep_1.0.jar<br />
rfj.Sunburn 1.1,http://www.robocoderepository.com/BotFiles/1060/rfj.Sunburn_1.1.jar<br />
rijteam.SmartDodge 1.1,http://www.robocoderepository.com/BotFiles/2959/rijteam.SmartDodge_1.1.jar<br />
rjw.RabidWombat 0.7,http://rjw.walkertribe.com/robocode/rjw.RabidWombat_0.7.jar<br />
robar.haiku.Spike 1.0,https://dl.dropboxusercontent.com/u/75978227/roborumble_refuge/robar.haiku.Spike_1.0.jar<br />
robar.micro.Gladius 1.15,https://dl.dropboxusercontent.com/u/75978227/roborumble_refuge/robar.micro.Gladius_1.15.jar<br />
robar.micro.Kirbyi 1.0,http://hunrobar.freeblog.hu/files/myrobots/robar.micro.Kirbyi_1.0.jar<br />
robar.micro.Topaz 0.25,https://dl.dropboxusercontent.com/u/75978227/roborumble_refuge/robar.micro.Topaz_0.25.jar<br />
robar.nano.Assertive 0.3,https://dl.dropboxusercontent.com/u/75978227/roborumble_refuge/robar.nano.Assertive_0.3.jar<br />
robar.nano.BlackWidow 1.3,http://www.robocoderepository.com/BotFiles/3574/robar.nano.BlackWidow_1.3.jar<br />
robar.nano.Breeze 0.3,http://hunrobar.freeblog.hu/files/myrobots/robar.nano.Breeze_0.3.jar<br />
robar.nano.Mosquito 1.1,http://hunrobar.freeblog.hu/files/myrobots/robar.nano.Mosquito_1.1.jar<br />
robar.nano.MosquitoPM 1.0,http://www.robocoderepository.com/BotFiles/3559/robar.nano.MosquitoPM_1.0.jar<br />
robar.nano.Prestige 1.0,http://www.robocoderepository.com/BotFiles/3507/robar.nano.Prestige_1.0.jar<br />
robar.nano.Pugio 1.49,http://www.robocoderepository.com/BotFiles/3710/robar.nano.Pugio_1.49.jar<br />
robar.nano.Scytodes 0.3,http://hunrobar.freeblog.hu/files/myrobots/robar.nano.Scytodes_0.3.jar<br />
robar.nano.Vespa 0.95,http://hunrobar.freeblog.hu/files/myrobots/robar.nano.Vespa_0.95.jar<br />
robin.SCALPBot 1.0,http://www.fairyapp.com.au/robin.SCALPBot_1.0.jar<br />
robo.PartsBot 1.1,http://robocode-archive.strangeautomata.com/robots/robo.PartsBot_1.1.jar<br />
RobotMarco.MarcoV 0.1,http://www.robocoderepository.com/BotFiles/3941/RobotMarco.MarcoV_0.1.jar<br />
romz.robot.circular.WildRabbit 0.9.6, https://dl.dropboxusercontent.com/u/19698591/robocode/romz.robot.circular.WildRabbit_0.9.6.jar<br />
romz.robot.guessfactor.TeasingFox 0.2, https://dl.dropboxusercontent.com/u/19698591/robocode/romz.robot.guessfactor.TeasingFox_0.2.jar<br />
romz.robot.Test 0.1.0, https://dl.dropboxusercontent.com/u/19698591/robocode/romz.robot.Test_0.1.0.jar<br />
rsim.micro.uCatcher 0.1,http://robocode-archive.strangeautomata.com/robots/rsim.micro.uCatcher_0.1.jar<br />
rsim.mini.BulletCatcher 0.4,http://www.robocoderepository.com/BotFiles/3737/rsim.mini.BulletCatcher_0.4.jar<br />
rsk1.RSK1 4.0,http://www.robocoderepository.com/BotFiles/3284/rsk1.RSK1_4.0.jar<br />
rtk.Tachikoma 1.0,http://www.robocoderepository.com/BotFiles/4121/rtk.Tachikoma1.0.jar<br />
ruc.nano.Zealot 0.2,http://www.robocoderepository.com/BotFiles/1229/ruc.nano.Zealot_0.2.jar<br />
rus.vv.Dzhigit 1.1,http://www.robocoderepository.com/BotFiles/4002/rus.vv.Dzhigit1.1.jar<br />
rus.vv.Snezhok 1.1,http://www.robocoderepository.com/BotFiles/3998/rus.vv.Snezhok1.1.jar<br />
ry.LightningBug 1.0,http://www.robocoderepository.com/BotFiles/3472/ry.LightningBug_1.0.jar<br />
ry.VirtualGunExperiment 1.2.0,http://www.robocoderepository.com/BotFiles/3662/ry.VirtualGunExperiment_1.2.0.jar<br />
ry.Worst 1.0,http://www.robocoderepository.com/BotFiles/3645/ry.Worst_1.0.jar<br />
rz.Aleph 0.34,http://www.robocoderepository.com/BotFiles/1993/rz.Aleph_0.34.jar<br />
rz.Apollon 0.23,http://www.robocoderepository.com/BotFiles/2098/rz.Apollon_0.23.jar<br />
rz.Artist 0.2,http://www.robocoderepository.com/BotFiles/2156/rz.Artist_0.2.jar<br />
rz.GlowBlow 2.31,http://www.robocoderepository.com/BotFiles/1354/rz.GlowBlow_2.31.jar<br />
rz.GlowBlowAPM 1.0,http://www.robocoderepository.com/BotFiles/1382/rz.GlowBlowAPM_1.0.jar<br />
rz.GlowBlowMelee 1.4,http://www.robocoderepository.com/BotFiles/1436/rz.GlowBlowMelee_1.4.jar<br />
rz.HawkOnFire 0.1,http://www.robocoderepository.com/BotFiles/1575/rz.HawkOnFire_0.1.jar<br />
rz.SmallDevil 1.502,http://www.robocoderepository.com/BotFiles/1322/rz.SmallDevil_1.502.jar<br />
sadoner.killer 0.2,http://www.robocoderepository.com/BotFiles/4020/sadoner.killer_0.2.jar<br />
sam.ChipmunkDuelist 1.0,http://www.robocoderepository.com/BotFiles/3094/sam.ChipmunkDuelist_1.0.jar<br />
sam.Samspin 1.0,http://www.robocoderepository.com/BotFiles/2823/sam.Samspin_1.0.jar<br />
sample.Corners 1.0,http://www.robocoderepository.com/BotFiles/1/sample.Corners_1.0.jar<br />
sample.Crazy 1.0,http://www.robocoderepository.com/BotFiles/2/sample.Crazy_1.0.jar<br />
sample.Fire 1.0,http://www.robocoderepository.com/BotFiles/3/sample.Fire_1.0.jar<br />
sample.MyFirstJuniorRobot 1.0,http://robocode-archive.strangeautomata.com//robots/sample.MyFirstJuniorRobot_1.0.jar<br />
sample.MyFirstRobot 1.0,http://www.robocoderepository.com/BotFiles/4/sample.MyFirstRobot_1.0.jar<br />
sample.RamFire 1.0,http://www.robocoderepository.com/BotFiles/5/sample.RamFire_1.0.jar<br />
sample.SittingDuck 1.0,http://www.robocoderepository.com/BotFiles/6/sample.SittingDuck_1.0.jar<br />
sample.SpinBot 1.0,http://www.robocoderepository.com/BotFiles/7/sample.SpinBot_1.0.jar<br />
sample.Target 1.0,http://www.robocoderepository.com/BotFiles/8/sample.Target_1.0.jar<br />
sample.Tracker 1.0,http://www.robocoderepository.com/BotFiles/9/sample.Tracker_1.0.jar<br />
sample.TrackFire 1.0,http://www.robocoderepository.com/BotFiles/10/sample.TrackFire_1.0.jar<br />
sample.VelociRobot 1.0,http://robocode-archive.strangeautomata.com//robots/sample.VelociRobot_1.0.jar<br />
sample.Walls 1.0,http://www.robocoderepository.com/BotFiles/11/sample.Walls_1.0.jar<br />
satan.R0 0.2,http://satan.so/robocode/satan.R0_0.2.jar<br />
satan.White 0.26,http://satan.so/robocode/satan.White_0.26.jar<br />
sanyi.mikrobi.Roberto 1.0,http://www.robocoderepository.com/BotFiles/3929/sanyi.mikrobi.Roberto_1.0.jar<br />
sch.Simone 0.3d,http://www.robocoderepository.com/BotFiles/374/sch.Simone_0.3d.jar<br />
serenity.moonlightBat 1.17,http://www.robocoderepository.com/BotFiles/2877/serenity.moonlightBat_1.17.jar<br />
serenity.nonSense 1.39,http://www.robocoderepository.com/BotFiles/3586/serenity.nonSense_1.39.jar<br />
serenity.serenityFire 1.29,https://github.com/aleksey-zhidkov/rc-repo-mirror/raw/master/serenity.serenityFire_1.29.jar<br />
SFS.SamsSecondRobot 1.0,http://www.robocoderepository.com/BotFiles/4148/SFS.SamsSecondRobot_1.0.jar<br />
sfergus.Terminator 1.0,https://dl.dropbox.com/u/16877681/sfergus.Terminator_1.0.jar<br />
sfergus.Terminator 1.2,https://dl.dropbox.com/u/16877681/sfergus.Terminator_1.2.jar<br />
sgp.JollyNinja 3.53,http://www.robocoderepository.com/BotFiles/183/sgp.JollyNinja_3.53.jar<br />
sgp.MadHatter 4.13,http://www.robocoderepository.com/BotFiles/156/sgp.MadHatter_4.13.jar<br />
sgp.nano.FurryLeech 1.0,http://www.robocoderepository.com/BotFiles/802/sgp.nano.FurryLeech_1.0.jar<br />
sgp.ShiningBeetle 1.1,http://www.robocoderepository.com/BotFiles/498/sgp.ShiningBeetle_1.1.jar<br />
sgp.SleepingGoat 1.1,http://www.robocoderepository.com/BotFiles/500/sgp.SleepingGoat_1.1.jar<br />
SHAM.WOW 1.4,http://robocode-archive.strangeautomata.com/robots/SHAM.WOW_1.4.jar<br />
sheldor.melee.nano.TestMelee 0.1,http://www.robocoderepository.com/BotFiles/4217/sheldor.melee.nano.TestMelee_0.1.jar<br />
sheldor.micro.EpeeistMicro 1.8.3,http://www.robocoderepository.com/BotFiles/4248/sheldor.micro.EpeeistMicro_1.8.3.jar<br />
sheldor.nano.Epeeist 1.1.0,http://www.robocoderepository.com/BotFiles/4237/sheldor.nano.Epeeist_1.1.0.jar<br />
sheldor.nano.Foilist 2.0.0,http://www.robocoderepository.com/BotFiles/4239/sheldor.nano.Foilist_2.0.0.jar<br />
sheldor.nano.PointInLine 1.0,http://www.robocoderepository.com/BotFiles/4207/sheldor.nano.PointInLine_1.0.jar<br />
sheldor.nano.PointInLineRRAL 1.0.0,http://www.robocoderepository.com/BotFiles/4259/sheldor.nano.PointInLineRRAL_1.0.0.jar<br />
sheldor.nano.Retreat 1.0,http://www.robocoderepository.com/BotFiles/4208/sheldor.nano.Retreat_1.0.jar<br />
sheldor.nano.Sabreur 1.1.2,http://www.robocoderepository.com/BotFiles/4257/sheldor.nano.Sabreur_1.1.2.jar<br />
sheldor.nano.Sabreuse 1.0.0,http://www.robocoderepository.com/BotFiles/4258/sheldor.nano.Sabreuse_1.0.0.jar<br />
shinh.Entangled 0.3,http://www.robocoderepository.com/BotFiles/1070/shinh.Entangled_0.3.jar<br />
shrub.Silver v048,http://www.robocoderepository.com/BotFiles/449/shrub.Silver_v048.jar<br />
shrub.Vapour v159,http://www.robocoderepository.com/BotFiles/2654/shrub.Vapour_v159.jar<br />
shu.nitro.LENIN .T34,http://www.robocoderepository.com/BotFiles/1956/shu.nitro.LENIN_.T34.jar<br />
sigterm.Sigterm 1.0,http://robocode-archive.strangeautomata.com/robots/sigterm.Sigterm_1.0.jar<br />
simonton.beta.LifelongObsession 0.5.1,http://www.robocoderepository.com/BotFiles/3195/simonton.beta.LifelongObsession_0.5.1.jar<br />
simonton.GFNano_D 3.1b,http://www.robocoderepository.com/BotFiles/3114/simonton.GFNano_D_3.1b.jar<br />
simonton.nano.WeekendObsession_S 1.7,http://www.robocoderepository.com/BotFiles/3117/simonton.nano.WeekendObsession_S_1.7.jar<br />
simonton.mega.SniperFrog 1.0.fix2,https://dl.dropboxusercontent.com/u/75978227/roborumble_refuge/simonton.mega.SniperFrog_1.0.fix2.jar<br />
simonton.micro.GFMicro 1.0,http://robocode-archive.strangeautomata.com/robots/simonton.micro.GFMicro_1.0.jar<br />
simonton.micro.WeeklongObsession 3.4.1,http://robocode-archive.strangeautomata.com/robots/simonton.micro.WeeklongObsession_3.4.1.jar<br />
simonton.mini.WeeksOnEnd 1.10.4,http://robocode-archive.strangeautomata.com/robots/simonton.mini.WeeksOnEnd_1.10.4.jar<br />
SK.SimpleKiller 1.0,http://www.robocoderepository.com/BotFiles/4129/SK.SimpleKiller_1.0.jar<br />
skm.butterfly 1.0,http://www.robocoderepository.com/BotFiles/3868/sean1.jar<br />
skm.Ryubot 1.0,http://www.robocoderepository.com/BotFiles/3594/skm.Ryubot_1.0.jar<br />
skm.PateranBotlock2 1.0,http://www.robocoderepository.com/BotFiles/3591/skm.PateranBotlock2_1.0.jar<br />
sL300.Mozart life,http://www.robocoderepository.com/BotFiles/1992/sL300.Mozart_life.jar<br />
sm.Devil 7.3,http://www.robocoderepository.com/BotFiles/1481/sm.Devil_7.3.jar<br />
sng.arco.Arco 0.0,http://www.robocoderepository.com/BotFiles/3279/sng.arco.Arco_0.0.jar<br />
sos.SOS 1.0,http://www.robocoderepository.com/BotFiles/3489/sos.SOS_1.0.jar<br />
spartancompany.Spartan2 1.0,http://robocode-archive.strangeautomata.com/robots/spartancompany.Spartan2_1.0.jar<br />
spin.Bugstard 0.012b,https://dl.dropbox.com/s/jvm89xy5z5911ws/spin.Bugstard_0.012b.jar?dl=1<br />
spinnercat.CopyKat 1.2.3,http://www.robocoderepository.com/BotFiles/3818/spinnercat.CopyKat_1.2.3.jar<br />
spinnercat.Limit .01,http://www.robocoderepository.com/BotFiles/3659/spinnercat.Limit_.01.jar<br />
spinnercat.Kitten 1.6,http://www.robocoderepository.com/BotFiles/3819/spinnercat.Kitten_1.6.jar<br />
spinnercat.haiku.Refrigerator 1.1,http://www.robocoderepository.com/BotFiles/3688/spinnercat.haiku.Refrigerator_1.1.jar<br />
spinnercat.mega.Tardis 1.2,http://www.robocoderepository.com/BotFiles/3692/spinnercat.mega.Tardis_1.2.jar<br />
spinnercat.Robovirus 2.718,http://www.robocoderepository.com/BotFiles/3657/spinnercat.Robovirus_2.718.jar<br />
sp.Megas.AGravitatorExcel 1.4,http://www.robocoderepository.com/BotFiles/4153/sp.Megas.AGravitatorExcel_1.4.jar<br />
sp.Minis.Survival 1.0,http://robocode-archive.strangeautomata.com/robots/sp.Minis.Survival_1.0.jar?attredirects=0&d=1<br />
sp.Megas.Trident 2.7,http://robocode-archive.strangeautomata.com/robots/sp.Megas.Trident_2.7.jar?attredirects=0&d=1<br />
sp.Micros.WallAvoider 1.0,http://robocode-archive.strangeautomata.com/robots/sp.Micros.WallAvoider_1.0.jar?attredirects=0&d=1<br />
sp.Minis.LNightHawk 1.2,http://www.robocoderepository.com/BotFiles/4166/sp.Minis.LNightHawk_1.2.jar<br />
sp.Nanos.CopyMachine 1.0,http://www.robocoderepository.com/BotFiles/4172/sp.Nanos.CopyMachine_1.0.jar<br />
sqTank.waveSurfing.LionWWSVMvoid 0.01,http://www.robocoderepository.com/BotFiles/3436/sqTank.waveSurfing.LionWWSVMvoid_0.01.jar<br />
squidM.SquidmanNano 1.0,https://dl.dropboxusercontent.com/u/75978227/roborumble_refuge/squidM.SquidmanNano_1.0.jar<br />
squidM.SurfinUSA 1.0,https://dl.dropboxusercontent.com/u/75978227/roborumble_refuge/squidM.SurfinUSA_1.0.jar<br />
starpkg.StarViewerZ 1.26,http://www.robocoderepository.com/BotFiles/1931/starpkg.StarViewerZ_1.26.jar<br />
staticline.whiskey.Whiskey 0.6,https://dl.dropboxusercontent.com/u/75978227/roborumble_refuge/staticline.whiskey.Whiskey_0.6.jar<br />
stefw.Tigger 0.0.23,http://robocode-archive.strangeautomata.com/robots/stefw.Tigger_0.0.23.jar<br />
stelo.Chord 1.0,http://robocode-archive.strangeautomata.com/robots/stelo.Chord_1.0.jar<br />
stelo.FretNano 1.1,http://robocode-archive.strangeautomata.com/robots/stelo.FretNano_1.1.jar<br />
stelo.Lifestealer 1.0,http://robocode-archive.strangeautomata.com/robots/stelo.Lifestealer_1.0.jar<br />
stelo.MatchupMini 1.1,http://robocode-archive.strangeautomata.com/robots/stelo.MatchupMini_1.1.jar<br />
stelo.MatchupMicro 1.2,http://robocode-archive.strangeautomata.com/robots/stelo.MatchupMicro_1.2.jar<br />
stelo.MatchupAGF 1.1,http://robocode-archive.strangeautomata.com/robots/stelo.MatchupAGF_1.1.jar<br />
stelo.MatchupWS 1.2c,http://robocode-archive.strangeautomata.com/robots/stelo.MatchupWS_1.2c.jar<br />
stelo.Mirror 1.1,http://www.robocoderepository.com/BotFiles/3034/stelo.Mirror_1.1.jar<br />
stelo.MirrorMicro 1.1,http://robocode-archive.strangeautomata.com/robots/stelo.MirrorMicro_1.1.jar<br />
stelo.MirrorNano 1.4,http://robocode-archive.strangeautomata.com/robots/stelo.MirrorNano_1.4.jar<br />
stelo.MoojukNano 1.2,http://robocode-archive.strangeautomata.com/robots/stelo.MoojukNano_1.2.jar<br />
stelo.PastFuture 2.1.9,http://www.robocoderepository.com/BotFiles/3910/stelo.PastFuture_2.1.9.jar<br />
stelo.PatternRobot 1.0,http://www.robocoderepository.com/BotFiles/2995/stelo.PatternRobot_1.0.jar<br />
stelo.PianistNano 1.3,http://robocode-archive.strangeautomata.com/robots/stelo.PianistNano_1.3.jar<br />
stelo.RamTrackSurfer 1.2,http://robocode-archive.strangeautomata.com/robots/stelo.RamTrackSurfer_1.2.jar<br />
stelo.Randomness 1.1,http://www.robocoderepository.com/BotFiles/3021/stelo.Randomness_1.1.jar<br />
stelo.Spread 0.3,http://www.robowiki.net/w/images/a/a5/Stelo.Spread_0.3.jar<br />
stelo.SteloTestNano 1.0,http://robocode-archive.strangeautomata.com/robots/stelo.SteloTestNano_1.0.jar<br />
stelo.UnfoolableNano 1.0,http://robocode-archive.strangeautomata.com/robots/stelo.UnfoolableNano_1.0.jar<br />
stelo.UntouchableNano 1.4,http://robocode-archive.strangeautomata.com/robots/stelo.UntouchableNano_1.4.jar<br />
step.nanoPri 1.0,http://www.robocoderepository.com/BotFiles/2996/step.nanoPri_1.0.jar<br />
step.NanoBidu 1.0,http://www.robocoderepository.com/BotFiles/3014/step.NanoBidu_1.0.jar<br />
stf.PanzerGeneral 0.1,http://www.robocoderepository.com/BotFiles/2233/stf.PanzerGeneral_0.1.jar<br />
stordy.StordyBot 1.0,http://robocode-archive.strangeautomata.com/robots/stordy.StordyBot_1.0.jar<br />
strider.Festis 1.2.1,http://www.robocoderepository.com/BotFiles/2355/strider.Festis_1.2.1.jar<br />
strider.Mer 1.1.0,http://www.robocoderepository.com/BotFiles/2360/strider.Mer_1.1.0.jar<br />
stuff.Vlad 0.1,http://www.robocoderepository.com/BotFiles/3701/stuff.Vlad_0.1.jar<br />
sul.NanoR2 1.32,http://www.robocoderepository.com/BotFiles/3348/sul.NanoR2_1.32.jar<br />
sul.Pinkbot 1.1,http://www.robocoderepository.com/BotFiles/3346/sul.Pinkbot_1.1.jar<br />
sul.Bicephal 1.2,http://www.robocoderepository.com/BotFiles/3343/sul.Bicephal_1.2.jar<br />
sul.BlueBot 1.0,http://www.robocoderepository.com/BotFiles/3347/sul.BlueBot_1.0.jar<br />
supersample.SuperBoxBot 1.0,http://www.robocoderepository.com/BotFiles/3994/supersample.SuperBoxBot_1.0.jar<br />
supersample.SuperCorners 1.0,http://robocode-archive.strangeautomata.com//robots/supersample.SuperCorners_1.0.jar<br />
SuperSample.SuperCrazy 1.0,http://robocode-archive.strangeautomata.com/robots/SuperSample.SuperCrazy_1.0.jar<br />
supersample.SuperMercutio 1.0,http://robocode-archive.strangeautomata.com//robots/supersample.SuperMercutio_1.0.jar<br />
supersample.SuperRamFire 1.0,http://robocode-archive.strangeautomata.com//robots/supersample.SuperRamFire_1.0.jar<br />
supersample.SuperSpinBot 1.0,http://robocode-archive.strangeautomata.com//robots/supersample.SuperSpinBot_1.0.jar<br />
supersample.SuperTracker 1.0,http://robocode-archive.strangeautomata.com//robots/supersample.SuperTracker_1.0.jar<br />
supersample.SuperTrackFire 1.0,http://robocode-archive.strangeautomata.com//robots/supersample.SuperTrackFire_1.0.jar<br />
supersample.SuperWalls 1.0,http://robocode-archive.strangeautomata.com//robots/supersample.SuperWalls_1.0.jar<br />
syl.Centipede 0.5,http://www.robocoderepository.com/BotFiles/1254/syl.Centipede_0.5.jar<br />
synapse.Geomancy 15,http://robocode-archive.strangeautomata.com/robots/synapse.Geomancy_15.jar<br />
synapse.rsim.GeomancyBS 0.11,http://robocoderepository.com/BotFiles/3758/synapse.rsim.GeomancyBS_0.11.jar<br />
synnalagma.NeuralPremier 0.51,http://www.robocoderepository.com/BotFiles/1557/synnalagma.NeuralPremier_0.51.jar<br />
synnalagma.test.MiniNeural 1.1,http://www.robocoderepository.com/BotFiles/1754/synnalagma.test.MiniNeural_1.1.jar<br />
tad.Dalek98 0.98,http://robocode-archive.strangeautomata.com/robots/tad.Dalek98_0.98.jar<br />
takeBot.SpinSpiral 1.2,http://www.robocoderepository.com/BotFiles/312/takeBot.SpinSpiral_1.2.jar<br />
takeBot.SpiralCrash 1.0,http://www.robocoderepository.com/BotFiles/1013/takeBot.SpiralCrash_1.0.jar<br />
takeBot.WeavingWiggle 1.1,http://www.robocoderepository.com/BotFiles/1012/takeBot.WeavingWiggle_1.1.jar<br />
tango.Recrimpo 2.51,http://www.robocoderepository.com/BotFiles/2015/tango.Recrimpo_2.51.jar<br />
taqho.taqbot 1.0,http://www.robocoderepository.com/BotFiles/1316/taqho.taqbot_1.0.jar<br />
tcf.Drifter 29,http://www.7sun.com/robocode/robots/tcf.Drifter_29.jar<br />
tcf.Repat3 2,http://www.robocoderepository.com/BotFiles/3328/tcf.Repat3_2.jar<br />
TCMI.Enyo 0.4,http://www.timthegeek.com/other/robocode/TCMI.Enyo_0.4.jar<br />
TCMI.nano.Copper 0.2,http://www.timthegeek.com/other/robocode/TCMI.nano.Copper_0.2.jar<br />
techdude.kombat.FlamingKombat 1.5,http://www.robocoderepository.com/BotFiles/2810/techdude.kombat.FlamingKombat_1.5.jar<br />
techdude.Class2C.Class2C 0.1,http://www.robocoderepository.com/BotFiles/3078/techdude.Class2C.Class2C_0.1.jar<br />
test.Podgy 4.0,http://www.robocoderepository.com/BotFiles/3214/test.Podgy_4.0.jar<br />
test.Fuzzer 1.0.1,http://www.robocoderepository.com/BotFiles/3345/test.Fuzzer_1.0.1.jar<br />
tex.Longbot 0.4,https://sites.google.com/a/pelt.cc/pelt/home/my-roborcode-project/tex.Longbot_0.4.jar?attredirects=0&d=1<br />
testantiswapgun.AntiSwap 1.0,https://github.com/aleksey-zhidkov/rc-repo-mirror/raw/master/testantiswapgun.AntiSwap_1.0.jar<br />
throxbot.ThroxBot 0.1,http://www.robocoderepository.com/BotFiles/2548/throxbot.ThroxBot_0.1.jar<br />
tide.pear.Pear 0.62.1,http://www.robocoderepository.com/BotFiles/2393/tide.pear.Pear_0.62.1.jar<br />
timmit.micro.TimXJ 0.22,http://www.robocoderepository.com/BotFiles/1683/timmit.micro.TimXJ_0.22.jar<br />
timmit.mini.TimVA 0.43,http://www.robocoderepository.com/BotFiles/1681/timmit.mini.TimVA_0.43.jar<br />
timmit.nano.TimCat 0.13,http://www.robocoderepository.com/BotFiles/1600/timmit.nano.TimCat_0.13.jar<br />
timmit.nano.TimDog 0.33,http://www.robocoderepository.com/BotFiles/1602/timmit.nano.TimDog_0.33.jar<br />
timmit.TimmiT 0.22,http://www.robocoderepository.com/BotFiles/1468/timmit.TimmiT_0.22.jar<br />
TJ.Exupery 1.39,http://www.robocoderepository.com/BotFiles/3970/TJ.Exupery1.39.jar<br />
tjk.AFlatNatural 1.0,https://dl.dropboxusercontent.com/u/75978227/tjk.AFlatNatural_1.0.jar<br />
tjk.deBroglie rev0108,https://dl.dropboxusercontent.com/u/75978227/tjk.deBroglie_rev0108.jar<br />
tkt.RedShift 1.1.CS.0,https://github.com/ttaomae/robocode-tkt-redshift/raw/codesize/release/tkt.RedShift_1.1.CS.0.jar<br />
tlp.ThreeLeggedPig 1,https://dl.dropboxusercontent.com/u/75978227/roborumble_refuge/tlp.ThreeLeggedPig_1.jar<br />
tm.Yuugao 1.0,http://www.robocoderepository.com/BotFiles/1056/tm.Yuugao_1.0.jar<br />
tobe.calypso.Calypso 4.1,http://www.robocoderepository.com/BotFiles/784/tobe.calypso.Calypso_4.1.jar<br />
tobe.Fusion 1.0,http://www.robocoderepository.com/BotFiles/649/tobe.Fusion_1.0.jar<br />
tobe.mini.Charon 0.9,http://www.robocoderepository.com/BotFiles/836/tobe.mini.Charon_0.9.jar<br />
tobe.Relativity 3.9,http://www.robocoderepository.com/BotFiles/360/tobe.Relativity_3.9.jar<br />
tobe.Saturn lambda,http://www.robocoderepository.com/BotFiles/685/tobe.Saturn_lambda.jar<br />
tornyil.bottomup.BottomUp 1.05,http://www.alpha-consulting.hu/robo/tornyil.bottomup.BottomUp_1.05.jar<br />
tornyil.Lajcsi2.Lajcsi2sm 1.0,http://www.alpha-consulting.hu/robo/tornyil.Lajcsi2.Lajcsi2sm_1.0.jar<br />
toz.Gnome 1.1,http://robocode-archive.strangeautomata.com/robots/toz.Gnome_1.1.jar<br />
trab.Crusader 0.1.7,http://www.stud.ntnu.no/~grashei/bots/trab.Crusader_0.1.7.jar<br />
trab.nano.AinippeNano 1.3,http://www.stud.ntnu.no/~grashei/bots/trab.nano.AinippeNano_1.3.jar<br />
traker.Eraser 1,http://robocode-archive.strangeautomata.com/robots/traker.Eraser_1.jar<br />
tvv.micro.Antares 1.1.1,https://sites.google.com/site/tvvrobots/tvv.micro.Antares_1.1.1.jar?attredirects=0&d=1<br />
tvv.nano.Polaris 1.2,https://sites.google.com/site/tvvrobots/tvv.nano.Polaris_1.2.jar?attredirects=0&d=1<br />
tw.Exterminator 1.0,http://www.robocoderepository.com/BotFiles/3607/tw.Exterminator_1.0.jar<br />
tzu.TheArtOfWar 1.2,http://robocode-archive.strangeautomata.com/robots/tzu.TheArtOfWar_1.2.jar<br />
ua.kiiv.kosyak.robocode.tn1.Tn1 2.0,http://www.robocoderepository.com/BotFiles/4072/ua.kiiv.kosyak.robocode.tn1.Tn1_2.0.jar<br />
uccc.Dorito 1.12,https://github.com/aleksey-zhidkov/rc-repo-mirror/raw/master/uccc.Dorito_1.12.jar<br />
uccc.MilkyWay 1.01,https://github.com/aleksey-zhidkov/rc-repo-mirror/raw/master/uccc.MilkyWay_1.01.jar<br />
uccc.RingDing 1.12,https://github.com/aleksey-zhidkov/rc-repo-mirror/raw/master/uccc.RingDing_1.12.jar<br />
uccc.Scrapple 1.0,https://github.com/aleksey-zhidkov/rc-repo-mirror/raw/master/uccc.Scrapple_1.0.jar<br />
ultra.Defender 1.2,http://teamgallego.com/dl/bots/ultra.Defender_1.2.jar<br />
unarmedlad.nano.VirginSteele 2.2,https://dl.dropbox.com/s/nt32eas7mzp7wbe/unarmedlad.nano.VirginSteele_2.2.jar<br />
urdos.URDOS 1.3,http://robocode-archive.strangeautomata.com/robots/urdos.URDOS_1.3.jar<br />
usa.nano.Nemo 2.0,http://www.robocoderepository.com/BotFiles/2045/usa.nano.Nemo_2.0.jar<br />
vic.Locke 0.7.5.5,http://www.robocoderepository.com/BotFiles/2115/vic.Locke_0.7.5.5.jar<br />
vft.Valkyrie 1.0,http://www.robocoderepository.com/BotFiles/3009/vft.Valkyrie_1.0.jar<br />
vft.Hrist 1.0,http://robocode-archive.strangeautomata.com/robots/vft.Hrist_1.0.jar<br />
vjik.UnViolation 1.1,http://www.robocoderepository.com/BotFiles/3886/vjik.UnViolation_1.1.jar<br />
voidious.Diamond 1.8.22,http://www.dijitari.com/void/robocode/voidious.Diamond_1.8.22.jar<br />
voidious.Dookious 1.573c,https://dl.dropbox.com/u/72179384/voidious.Dookious_1.573c.jar<br />
voidious.micro.Jen 1.11,https://dl.dropbox.com/u/72179384/voidious.micro.Jen_1.11.jar<br />
voidious.mini.Komarious 1.88,https://dl.dropbox.com/u/72179384/voidious.mini.Komarious_1.88.jar<br />
voidious.perceptual.RetroGirl 1.0.0,https://dl.dropbox.com/u/72179384/voidious.perceptual.RetroGirl_1.0.0.jar<br />
vort.Chaser 0.0.3,https://github.com/Vort/Chaser/blob/master/packed/vort.Chaser_0.0.3.jar?raw=true<br />
vuen.Fractal 0.55,http://www.robocoderepository.com/BotFiles/1579/vuen.Fractal_0.55.jar<br />
WarfaJibril.Jibril_Warfa_Andromeda 1.11,http://www.robocoderepository.com/BotFiles/4089/WarfaJibril.Jibril_Warfa_Andromeda_1.11.jar<br />
wcsv.Engineer.Engineer 0.5.4,http://robocode-archive.strangeautomata.com/robots/wcsv.Engineer.Engineer_0.5.4.jar<br />
wcsv.PowerHouse.PowerHouse 1.7e3,http://robocode-archive.strangeautomata.com/robots/wcsv.PowerHouse.PowerHouse_1.7e3.jar<br />
wcsv.mega.PowerHouse2 0.2,http://robocode-archive.strangeautomata.com/robots/wcsv.mega.PowerHouse2_0.2.jar<br />
wcsv.Stampede 1.3.3,http://www.robocoderepository.com/BotFiles/2527/wcsv.Stampede_1.3.3.jar<br />
wcsv.Stampede2.Stampede2 1.1.0,http://www.robocoderepository.com/BotFiles/2714/wcsv.Stampede2.Stampede2_1.1.0.jar<br />
WdV.Lesserbee 0.01,http://www.robocoderepository.com/BotFiles/4046/WdV.Lesserbee_0.01.jar<br />
whind.Constitution 0.7.1,http://www.robocoderepository.com/BotFiles/2812/whind.Constitution_0.7.1.jar<br />
whind.Strength 0.6.4,https://github.com/aleksey-zhidkov/rc-repo-mirror/raw/master/whind.Strength_0.6.4.jar<br />
whind.StrengthBee 0.6.4,http://whindgames.50webs.com/otherstuff/whind.StrengthBee_0.6.4.jar<br />
whind.Wisdom 0.5.1,http://www.robocoderepository.com/BotFiles/2742/whind.Wisdom_0.5.1.jar<br />
whitesquare.robots.SkynetAdvanced 1.1,https://dl.dropbox.com/s/6epm51goxqp7p0h/whitesquare.robots.SkynetAdvanced_1.1.jar?dl=1<br />
WidowMakersAtWar.EpicCow 1.0,https://sites.google.com/site/dereksrobots/home/epiccow/WidowMakersAtWar.EpicCow_1.0.jar?attredirects=0&d=1<br />
wiki.BasicBulletShielder 1.0,http://robocode-archive.strangeautomata.com/robots/wiki.BasicBulletShielder_1.0.jar<br />
wiki.BasicGFSurfer 1.02,http://robocode-archive.strangeautomata.com/robots/wiki.BasicGFSurfer_1.02.jar<br />
wiki.mako.MakoHT 1.2.2.1,http://www.robocoderepository.com/BotFiles/1374/wiki.mako.MakoHT_1.2.2.1.jar<br />
wiki.mini.BlackDestroyer 0.9.0,http://www.robocoderepository.com/BotFiles/1927/wiki.mini.BlackDestroyer_0.9.0.jar<br />
wiki.mini.GouldingiHT 1.0,http://www.robocoderepository.com/BotFiles/1383/wiki.mini.GouldingiHT_1.0.jar<br />
wiki.mini.Griffon 0.1,http://www.robocoderepository.com/BotFiles/1774/wiki.mini.Griffon_0.1.jar<br />
wiki.mini.Sedan 1.0,http://www.robocoderepository.com/BotFiles/1676/wiki.mini.Sedan_1.0.jar<br />
wiki.nano.DevilFISH 1.0,http://www.robocoderepository.com/BotFiles/2235/wiki.nano.DevilFISH_1.0.jar<br />
wiki.nano.RaikoNano 1.1,http://www.robocoderepository.com/BotFiles/2163/wiki.nano.RaikoNano_1.1.jar<br />
wiki.SuperSampleBot.SuperSittingDuck 1.0,http://robocode-archive.strangeautomata.com/robots/wiki.SuperSampleBot.SuperSittingDuck_1.0.jar<br />
wiki.WaveRammer 1.0,http://www.robocoderepository.com/BotFiles/3505/wiki.WaveRammer_1.0.jar<br />
wiki.Wolverine 2.1,http://robocode-archive.strangeautomata.com/robots/wiki.Wolverine_2.1.jar<br />
wilson.Chameleon 0.91,http://www.robocoderepository.com/BotFiles/1608/wilson.Chameleon_0.91.jar<br />
winamp32.micro.MicroMacro 1.0,http://www.robocoderepository.com/BotFiles/2891/winamp32.micro.MicroMacro_1.0.jar<br />
wit.Chuliath 1.0,http://www.robocoderepository.com/BotFiles/2306/wit.Chuliath_1.0.jar<br />
wit.Deep7 2.0,http://www.robocoderepository.com/BotFiles/2313/wit.Deep7_2.0.jar<br />
wompi.Kowari 1.6,http://www.casepool.de/robocode/wompi.Kowari_1.6.jar<br />
wompi.Numbat 1.9,http://www.casepool.de/robocode/wompi.Numbat_1.9.jar<br />
xander.cat.Fiona 1.4,http://www.distantvisions.net/robocode/xander.cat.Fiona_1.4.jar<br />
xander.cat.Mikey 1.2,http://www.distantvisions.net/robocode/xander.cat.Mikey_1.2.jar<br />
xander.cat.SamAxe 1.1,http://www.distantvisions.net/robocode/xander.cat.SamAxe_1.1.jar<br />
xander.cat.Spitfire 1.4,http://www.distantvisions.net/robocode/xander.cat.Spitfire_1.4.jar<br />
xander.cat.XanderCat 12.6,http://www.distantvisions.net/robocode/xander.cat.XanderCat_12.6.jar<br />
xiongan.Xiongan 1.1,http://www.robocoderepository.com/BotFiles/3565/xiongan.Xiongan_1.1.jar<br />
yagami.Tidus 0.11,http://www.robocoderepository.com/BotFiles/4123/yagami.Tidus_0.11.jar<br />
yarghard.Y101 1.0,https://github.com/aleksey-zhidkov/rc-repo-mirror/raw/master/yarghard.Y101_1.0.jar<br />
yabot.YaBot 0.1,http://robocode-archive.strangeautomata.com/robots/yabot.YaBot_0.1.jar<br />
yk.JahMicro 1.0,http://www.robocoderepository.com/BotFiles/3033/yk.JahMicro_1.0.jar<br />
yk.JahRoslav 1.1,http://www.robocoderepository.com/BotFiles/3032/yk.JahRoslav_1.1.jar<br />
zen.Lindada 0.2,http://www.robocoderepository.com/BotFiles/1679/zen.Lindada_0.2.jar<br />
zeze2.OperatorZeze 1.05,http://www.robocoderepository.com/BotFiles/3330/zeze2.OperatorZeze_1.05.jar<br />
zch.David 0.21,http://www.robocoderepository.com/BotFiles/3575/zch.David_0.21.jar<br />
zch.Hirkan 0.11,http://www.robocoderepository.com/BotFiles/1288/zch.Hirkan_0.11.jar<br />
zh.UnderDog 0.0.2,http://www.robocoderepository.com/BotFiles/3053/zh.UnderDog_0.0.2.jar<br />
zignd.ZigIndexOutOfRange 1.1,https://dl.dropboxusercontent.com/s/fbq6nfybjjemp34/zignd.ZigIndexOutOfRange_1.1.jar<br />
zyx.mega.YersiniaPestis 3.0,http://robocode-archive.strangeautomata.com/robots/zyx.mega.YersiniaPestis_3.0.jar<br />
zyx.micro.Ant 1.1,http://www.robocoderepository.com/BotFiles/3481/zyx.micro.Ant_1.1.jar<br />
zyx.nano.Ant 1.1,http://www.robocoderepository.com/BotFiles/3493/zyx.nano.Ant_1.1.jar<br />
zyx.nano.EscherichiaColi 1.0,http://robocode-archive.strangeautomata.com/robots/zyx.nano.EscherichiaColi_1.0.jar<br />
zyx.nano.RedBull 1.0,http://robocode-archive.strangeautomata.com/robots/zyx.nano.RedBull_1.0.jar<br />
zzx.Ignohis 8.0,https://sites.google.com/site/devonrobots/home/wave-surfers/zzx.Ignohis_8.0.jar?attredirects=0&d=1<br />
zzx.StormHead 1.0.1,http://robocoderepository.com/BotFiles/4193/zzx.StormHead_1.0.1.jar<br />
zzx.Gron 1.14,http://robocoderepository.com/BotFiles/4194/zzx.Gron_1.14.jar<br />
zzx.Serunyr 2.0.2,https://github.com/aleksey-zhidkov/rc-repo-mirror/raw/master/zzx.Serunyr_2.0.2.jar<br />
</pre><br />
----<br />
'''''No chatting on this page. Use the /ParticipantsChat page for that.'''''<br />
<br />
'''''Removed due to Out Of Memory Exceptions against top bots'''''<br />
cs.ags.Scarlet 1.1c,http://file.csdgn.org/robocode/cs.ags.Scarlet_1.1c.jar<br />
<br />
'''''Removed because the jarcontent/filename is not correct'''''<br><br />
''cberendt.Bot1 0.160''<br><br />
''dmsr.MiniR101 0.6''<br><br />
''henriquevilela.TieFighter 0.1,3224''<br><br />
''jgap.Aspirant_7980_gen7 1.0,3552''br><br />
''jgap.Aspirant_13029_gen7 1.0,3553''<br><br />
''techdude.Carruthers 1.2.6''<br><br />
''uccc.Orbiter 1.0''<br><br />
''WhoAmI.WhoAmI 1.00''<br><br />
Nucleii.ED4 1.0,http://www.robocoderepository.com/BotFiles/4091/Nucleii.ED4_1.0.jar<br />
<br />
'''''Removed due to being a team'''''<br />
sp.Minis.GeneBotUpgrade 1.1,http://robocode-archive.strangeautomata.com/robots/sp.Minis.GeneBotUpgrade_1.1.jar?attredirects=0&d=1<br />
<br />
'''''Removed until file corruption is resolved:'''''<br />
<br />
''cas.CelsoKiller 1.0,3465''<br />
<br />
'''''Removed due to almost always giving '0' scores:'''''<br />
<br />
''lazarecki.PinkerStinker 0.1,http://www.robocoderepository.com/BotFiles/3824/lazarecki.PinkerStinker_0.1.jar''<br />
<br />
'''''Removed because it's incorrectly packaged:'''''<br />
<br />
''Indesh.Indesh 1.1,http://jakobserlier.250free.com/Indesh.jar''<br />
<br />
''loganom.FirstRobot 0.1, http://www.loganom.com/robocode/loganom.FirstRobot_0.1.jar''<br />
<br />
'''''Removed due to invalid line'''''<br />
<br />
''Legend.LNightHawk,http://robocoderepository.com/BotFiles/4167/Legend.LNightHawk.class''<br><br />
''WidowMakersAtWar.Hollow,http://http://www.robocoderepository.com/BotDetail/4169/WidowMakersAtWar.Hollow.jar''<br />
<br />
'''''Removed due to requiring Java 7'''''<br />
<br />
''fromHell.C4H10O 1.5,http://fromhell.schreiende-stille.de/Robocode/Java/fromHell.C4H10O_1.5.jar''<br><br />
''stranger.nano.TestBot 1.0,https://dl.dropboxusercontent.com/u/18119890/stranger.nano.TestBot_1.0.jar''<br><br />
''com.timothyveletta.FuzzyBot 1.1,https://github.com/aleksey-zhidkov/rc-repo-mirror/raw/master/com.timothyveletta.FuzzyBot_1.1.jar''<br />
<br />
----<br />
<br />
'''''Removed due to WontFix issues in Robocode 1.7+:'''''<br><br />
''* Hviela: ([[http://sourceforge.net/tracker/?func=detail&aid=2953268&group_id=37202&atid=419486 SF #2953268]])''<br><br />
'': hvilela.HVilela 0.9.3,http://henrique.vilela.googlepages.com/hvilela.HVilela_0.9.3.jar''<br><br />
''* Barney (Tries to write files without using RobocodeOutputStream. Robocode 1.7 punishes for that more harshly which will give 0 scores)<br><br />
'': Homer.Barney 1.0,http://www.robocoderepository.com/BotFiles/1932/Homer.Barney_1.0.jar<br></div>RobertWalkerhttp://robowiki.net/w/index.php?title=Bulky_Project_Demotivation&diff=7907Bulky Project Demotivation2009-06-01T14:46:46Z<p>RobertWalker: BPD? Oh, yeah, I got it.</p>
<hr />
<div>So, I have a plan for a new surfing movement, and I really want to make it. I have a reasonable amount of free time in a given week in total, but it's spread out into small blocks so I'd never be able to make the movement work within one sitting. Due to not being able to make it work in one sitting, I feel significantly demotivated to actually work on it. I call it "Bulky Project Demotivation". Anyone else get this? :) --[[User:Rednaxela|Rednaxela]] 13:10, 29 May 2009 (UTC)<br />
<br />
Really, I have this most of the time, or you will see a lot more robots from me. Most likely I have finished everything except the core surfing system in one sitting. Then, I don't have enough motivation to continue code the core surfing part. I don't want to use BasicSurfer framework since I need to do a lot refactoring (which I hate since I'll see a lot of error lines in Eclipse). I'm currently coding the abstract framework for wave surfing, which all the utility and stats manager as interfaces, which will implement later.<br />
<br />
I'm really happy that other people get this too, only they can finished their work while I can't. I think I should use EP on my robots. &raquo; <span style="font-size:0.9em;color:darkgreen;">[[User:Nat|Nat]] | [[User_talk:Nat|Talk]]</span> &raquo; 13:29, 29 May 2009 (UTC)<br />
<br />
This is my life - and the reason why I've mostly stuck to nanos. Getting a base nano up and running takes a couple hours. Then you can tweak numbers in your spare time until you find a sweet spot and can upload. I've started on a micro, but am having trouble finding enough time to get it properly debugged. --[[User:Miked0801|Miked0801]] 15:28, 29 May 2009 (UTC)<br />
[[Category:Discussions]]<br />
<br />
Often I will start a large bot and finish the basics of it, ending up with a bot that works quite well. However, usually I'll set down the next day to tweak it and find that the code is so bloated that it makes my head hurt just to look at it. Then I make a SuperSampleBot...--[[User:CrazyBassoonist|CrazyBassoonist]] 15:33, 29 May 2009 (UTC)<br />
<br />
lol... all I can say is my gf (who I live with) despises roboCode ;) I told her I'd leave it alone this week but here I am feeding my obsessive tendency :) debating on coding a new gun, and with a movement full of buggs that I know will consume much more time than socially healthy. not sure if or where to start, maybe I'll just mindlessly watch another battle.. :) lol - justin " the Professional time waster" --[[User:Jlm0924|Justin]] 09:12, 29 May 2009 (UTC)<br />
<br />
Sometimes I feel like I am the freaking king of BPD. I have my Robocode bot that has been "in development" for probably 2 years now. There are a few other Java projects I have that are in various stages of completion, as well as one project in Inform 7 that hasn't seen daylight in months. I have the excuse of having a wife, kids, a job and a mortgage, but still... --[[User:RobertWalker|RobertWalker]] 14:46, 1 June 2009 (UTC)</div>RobertWalkerhttp://robowiki.net/w/index.php?title=Talk:PluggableRobot&diff=7546Talk:PluggableRobot2009-05-25T19:20:44Z<p>RobertWalker: /* Version 2.0 alpha released */ Painting bug notes</p>
<hr />
<div>[[Talk:PluggableRobot/Archive|/Archive]]<br />
<br />
== Working on version 2.0 ==<br />
<br />
So I've been absent a long time, but I've been changing PluggableRobot some. Mainly because some changes to Robocode made it so PluggableRobot doesn't paint debug graphics anymore, and partly because I thought of some additional things I could do with it. When I'm finished, I'll update the source code on the wiki. [[User:RobertWalker|RobertWalker]] 15:36, 4 May 2009 (UTC)<br />
<br />
: I'm very pleased to know how many Robocoders that isn't forgot robocode already. Hoping the robocode community will be as active as the past. May I asked you to merge the DrawingBot and [[User:Nfwu/Painter]] to the PluggableRobot? It seem far more effective that your Hud. And can make the ListenerDelegate class warning-free with generic under java5? &raquo; <span style="font-size:0.9em;color:darkgreen;">[[User:Nat|Nat]] | [[User_talk:Nat|Talk]]</span> &raquo; 15:43, 4 May 2009 (UTC)<br />
<br />
:: Yeah, I was actually thinking about changing both of those things. I'm a little confused as to why exactly the ListenerDelegate is giving me the warnings; maybe you could enlighten me? Generics are awesome, but sometimes they give me migraines. I've tried various things to try to resolve it, but the warning either remains unchanged or I get a different one. As for the Hud class, I was planning on completely reworking that, but I didn't have any thoughts yet as to exactly how. I'll be sure to take a look at [[User:Nfwu/Painter]] and DrawingBot for ideas. Any other ideas for improvements while I'm at it? [[User:RobertWalker|RobertWalker]] 15:23, 5 May 2009 (UTC)<br />
<br />
::: I try to generic-ize you ListenerDelegate before, but I can't make it warningless. I have problem with some thing so if I generic-ize the Class<EventListener> and vice versa, I'll have an error in the processEvent() method so I revert to the non-generic version =( &raquo; <span style="font-size:0.9em;color:darkgreen;">[[User:Nat|Nat]] | [[User_talk:Nat|Talk]]</span> &raquo; 15:43, 5 May 2009 (UTC)<br />
<br />
:::: Well, the more I monkeyed around with it, the more I felt that generics were just making things unnecessarily complicated in this case. So I removed generics from the Invoker class, and changed it to have a consumesEvent(Event) method instead of an eventClass() method. This has cleared up all the warnings. The only bummer is that I lose some compile-time type checking, but the ListenerDelegate is built to ensure that the events get handed to the correct listeners in the first place, so I'm not terribly worried about it. Now to give it better painting support! [[User:RobertWalker|RobertWalker]] 17:38, 8 May 2009 (UTC)<br />
<br />
::::: Wow! Thanks! I usually do @SuppressWarnings("unchecked") though. &raquo; <span style="font-size:0.9em;color:darkgreen;">[[User:Nat|Nat]] | [[User_talk:Nat|Talk]]</span> &raquo; 17:54, 8 May 2009 (UTC)<br />
<br />
:::::: Yeah, I was considering that, but when I can, I prefer to solve warnings rather than ignore them. In any case, the code is easier to follow without the loads of generics stuff cluttering it up. Usually, generics make things simpler, but in this case.... Anyway, I'll post new source when I finish writing the other changes I'm working on. [[User:RobertWalker|RobertWalker]] 02:33, 9 May 2009 (UTC)<br />
<br />
I'm putting together the new debug graphics code. Like before, you register objects that are interested in drawing graphics with PluggableRobot, and they'll get invoked when it's time to paint. However, I'm also incorporating layering behavior similar to [[User:Nfwu/Painter]]. All debug code will be modularized for efficiency. For example, PluggableRobot will avoid wasting time on logic dealing with debug graphics if painting is disabled. It will also be easy to completely disable debugging code if you like before releasing your robot. (Although, if you release the source with it, it's also easy to turn it back on.)<br />
<br />
Some other things I'm planning on for the new PluggableRobot revision:<br />
<br />
* Some basic, optional components that could be used directly, extended, or used as example code for your own components. They would be things that a lot of robots would need anyway, like a data collection object or a 1-on-1 radar module.<br />
<br />
* A tweaking framework that would allow you to declare properties for your robot, then run a separate application that would test a range of different values for those properties and report on the results in combat. For example, let's say your robot has a property that controls the preferred distance your robot wishes to maintain from the enemy, and you'd like to figure out what the best value for this property would be. You'd configure the tweaking framework to test a range of values for this property, and then it would run a bunch of battles, storing the results in an database. When it was done, you could then run a viewer that would display the results with fancy graphs and such.<br />
<br />
I welcome your feedback. [[User:RobertWalker|RobertWalker]] 15:30, 11 May 2009 (UTC)<br />
<br />
Awesome! Actually I don't think it is easy to re-enabled it if you release the source code. =D<br />
<br />
* I'd suggest you do release a plain version without it and release its extension which doing those thing. Anyway, I think that thing will be used by only your own =P<br />
* I don't really get the point what you are going to do with that thing, really. Please explain more.<br />
<br />
&raquo; <span style="font-size:0.9em;color:darkgreen;">[[User:Nat|Nat]] | [[User_talk:Nat|Talk]]</span> &raquo; 15:48, 11 May 2009 (UTC)<br />
<br />
Okay, so when you're coding your bot, you will likely encounter places where you will create a constant. Let's say you need to set how many bins to use in your guess factor calculations. So you might write something like this:<br />
<br />
<pre>private static final int BINS = 25;</pre><br />
<br />
But how do you know that 25 is a good number of bins? How do you figure out what the optimal number of bins is for your robot? This is where the tweaking framework comes in. I haven't fully coded it yet, but it would look something like this. First, you'd replace the hard-coded 25 with something like this:<br />
<br />
<pre>private static final int BINS = Props.getInt("guessfactor.bins");</pre><br />
<br />
The Props class would statically load a properties file out of your data folder, which would contain a line like this:<br />
<br />
<pre>guessfactor.bins=25</pre><br />
<br />
So now it's time to run the tweaker program. It would give you a list of the robots in your library, and you'd select the one you want to tweak from the list. It would then read the properties file and auto-detect the possible types of each (boolean, int, double or String). So you'd select "guessfactor.bins" out of the list and select int as its type. You'd then provide a range of values to test. You want to have an odd number of bins (so that a bin always falls directly at 0.0), so you configure it to test values between, say, 7 and 49, incrementing by 2. You'd then select what robots you want it to fight against and how many rounds to fight each bot.<br />
<br />
Once you hit "Run", the program would back up your properties file, and write a new one with guessfactor.bins=7. It would then run battles between your bot and the others you selected, similar to RoboRumble, and store the results in memory. It would then increment guessfactor.bins to 9 and run the battles again, and continue in this way until it gets to 49.<br />
<br />
Once it has finished, it will write a report of the results to a file, and restore the backed up properties file. You can open this file in a viewer that will show you a fancy chart of your bot's performance over the different values and show you which one did best.<br />
<br />
What do you think? [[User:RobertWalker|RobertWalker]] 18:43, 11 May 2009 (UTC)<br />
<br />
: I think it sounds great. I (like many others, I'm sure) have wished I had something like this many times before. The only other instance I know of someone really trying to do this was with [[AgentSmith]] (not migrated yet), but I don't think he had much success nor ever released his code. You might be able to pull some stuff from [[RoboResearch]] for automating the battles, by the way. Good luck! --[[User:Voidious|Voidious]] 18:57, 11 May 2009 (UTC)<br />
<br />
: Great! I now understand. Hope I'll get it in .jar, not a brunch of .class files like [[RoboResearch]] :-) &raquo; <span style="font-size:0.9em;color:darkgreen;">[[User:Nat|Nat]] | [[User_talk:Nat|Talk]]</span> &raquo; 09:58, 12 May 2009 (UTC)<br />
<br />
Hi. I'm using your PluggableRobot to make a new bot (my old one was ds.OoV4 and was horribly coded) and, as a not so familiar with java developer, I've had some trouble getting the debug graphics to work.<br />
So here is my solution in case someone is in the same situation. I added this in OnBeforeEventsProcessed() : <br />
<pre>Vector<Event> events = getAllEvents();<br />
for(Event event : events)<br />
{<br />
if(!event.getClass().isAssignableFrom(PaintEvent.class))<br />
onPaint( getGraphics() );<br />
}</pre><br />
I guess adding an interface for the OnPaint event in the ListenerDelegate and registering the main class as a listener would work too btw.<br />
Anyway keep up the good work you've got a fan ;) --[[User:f4|f4]] 22:22, 11 May 2009 (UTC)<br />
<br />
:: Thank you for your kind words. The debug graphics weren't working because of a change to Robocode. I'm working on improvements to PluggableRobot and I currently have graphics drawing again, though there are still some problems that I'm shaking out. Once I've got things settled down, I'll post the updated source. [[User:RobertWalker|RobertWalker]] 02:32, 13 May 2009 (UTC)<br />
<br />
== Version 2.0 alpha released ==<br />
I've just released version 2.0 alpha of PluggableRobot. There are some improvements to the Hud display code I want to make before I call it 2.0 final, but those changes are waiting on a couple of Robocode bug fixes to be released.<br />
<br />
Also, I've decided to release the tweaking platform that I've been working on as a completely separate project from PluggableRobot. I didn't want to force people to extend PluggableRobot to get the benefits of the tweaking platform. Hopefully I can release an alpha version of the tweaking platform soon.<br />
<br />
As always, I welcome your feedback and constructive criticism. --[[User:RobertWalker|RobertWalker]] 21:37, 24 May 2009 (UTC)<br />
<br />
: Have you test it with 1.6.1.4, 1.6.0 or 1.5.4? Rumble client still use those version. I bet the painting this will fail with version older than 1.6.1 &raquo; <span style="font-size:0.9em;color:darkgreen;">[[User:Nat|Nat]] | [[User_talk:Nat|Talk]]</span> &raquo; 12:05, 25 May 2009 (UTC)<br />
<br />
:: The only version I have tested it with at this time is 1.7.1.1. As I have left out the changes that required the painting fixes (specifically [http://sourceforge.net/tracker/?func=detail&aid=2791007&group_id=37202&atid=419486 this one] and [http://sourceforge.net/tracker/?func=detail&aid=2791010&group_id=37202&atid=419486 this one]), PluggableRobot 2.0 alpha should theoretically work with any version of Robocode that supports the PaintEvent. Once the painting fixes are implemented, some code changes will go in which will break certain painting features for whatever versions of Robocode have the bugs in question. It pretty much only affects debug graphics text alignment, which is what I ripped out for the current version. The fixes will allow me to add code to permit various vertical and horizontal text alignment options. If you didn't use those features, PluggableRobot would still work, even on versions of Robocode that still have the bugs. --[[User:RobertWalker|RobertWalker]] 19:20, 25 May 2009 (UTC)</div>RobertWalkerhttp://robowiki.net/w/index.php?title=Talk:PluggableRobot&diff=7507Talk:PluggableRobot2009-05-24T21:44:13Z<p>RobertWalker: /* Version 2.0 alpha released */ Soliciting feedback</p>
<hr />
<div>[[Talk:PluggableRobot/Archive|/Archive]]<br />
<br />
== Working on version 2.0 ==<br />
<br />
So I've been absent a long time, but I've been changing PluggableRobot some. Mainly because some changes to Robocode made it so PluggableRobot doesn't paint debug graphics anymore, and partly because I thought of some additional things I could do with it. When I'm finished, I'll update the source code on the wiki. [[User:RobertWalker|RobertWalker]] 15:36, 4 May 2009 (UTC)<br />
<br />
: I'm very pleased to know how many Robocoders that isn't forgot robocode already. Hoping the robocode community will be as active as the past. May I asked you to merge the DrawingBot and [[User:Nfwu/Painter]] to the PluggableRobot? It seem far more effective that your Hud. And can make the ListenerDelegate class warning-free with generic under java5? &raquo; <span style="font-size:0.9em;color:darkgreen;">[[User:Nat|Nat]] | [[User_talk:Nat|Talk]]</span> &raquo; 15:43, 4 May 2009 (UTC)<br />
<br />
:: Yeah, I was actually thinking about changing both of those things. I'm a little confused as to why exactly the ListenerDelegate is giving me the warnings; maybe you could enlighten me? Generics are awesome, but sometimes they give me migraines. I've tried various things to try to resolve it, but the warning either remains unchanged or I get a different one. As for the Hud class, I was planning on completely reworking that, but I didn't have any thoughts yet as to exactly how. I'll be sure to take a look at [[User:Nfwu/Painter]] and DrawingBot for ideas. Any other ideas for improvements while I'm at it? [[User:RobertWalker|RobertWalker]] 15:23, 5 May 2009 (UTC)<br />
<br />
::: I try to generic-ize you ListenerDelegate before, but I can't make it warningless. I have problem with some thing so if I generic-ize the Class<EventListener> and vice versa, I'll have an error in the processEvent() method so I revert to the non-generic version =( &raquo; <span style="font-size:0.9em;color:darkgreen;">[[User:Nat|Nat]] | [[User_talk:Nat|Talk]]</span> &raquo; 15:43, 5 May 2009 (UTC)<br />
<br />
:::: Well, the more I monkeyed around with it, the more I felt that generics were just making things unnecessarily complicated in this case. So I removed generics from the Invoker class, and changed it to have a consumesEvent(Event) method instead of an eventClass() method. This has cleared up all the warnings. The only bummer is that I lose some compile-time type checking, but the ListenerDelegate is built to ensure that the events get handed to the correct listeners in the first place, so I'm not terribly worried about it. Now to give it better painting support! [[User:RobertWalker|RobertWalker]] 17:38, 8 May 2009 (UTC)<br />
<br />
::::: Wow! Thanks! I usually do @SuppressWarnings("unchecked") though. &raquo; <span style="font-size:0.9em;color:darkgreen;">[[User:Nat|Nat]] | [[User_talk:Nat|Talk]]</span> &raquo; 17:54, 8 May 2009 (UTC)<br />
<br />
:::::: Yeah, I was considering that, but when I can, I prefer to solve warnings rather than ignore them. In any case, the code is easier to follow without the loads of generics stuff cluttering it up. Usually, generics make things simpler, but in this case.... Anyway, I'll post new source when I finish writing the other changes I'm working on. [[User:RobertWalker|RobertWalker]] 02:33, 9 May 2009 (UTC)<br />
<br />
I'm putting together the new debug graphics code. Like before, you register objects that are interested in drawing graphics with PluggableRobot, and they'll get invoked when it's time to paint. However, I'm also incorporating layering behavior similar to [[User:Nfwu/Painter]]. All debug code will be modularized for efficiency. For example, PluggableRobot will avoid wasting time on logic dealing with debug graphics if painting is disabled. It will also be easy to completely disable debugging code if you like before releasing your robot. (Although, if you release the source with it, it's also easy to turn it back on.)<br />
<br />
Some other things I'm planning on for the new PluggableRobot revision:<br />
<br />
* Some basic, optional components that could be used directly, extended, or used as example code for your own components. They would be things that a lot of robots would need anyway, like a data collection object or a 1-on-1 radar module.<br />
<br />
* A tweaking framework that would allow you to declare properties for your robot, then run a separate application that would test a range of different values for those properties and report on the results in combat. For example, let's say your robot has a property that controls the preferred distance your robot wishes to maintain from the enemy, and you'd like to figure out what the best value for this property would be. You'd configure the tweaking framework to test a range of values for this property, and then it would run a bunch of battles, storing the results in an database. When it was done, you could then run a viewer that would display the results with fancy graphs and such.<br />
<br />
I welcome your feedback. [[User:RobertWalker|RobertWalker]] 15:30, 11 May 2009 (UTC)<br />
<br />
Awesome! Actually I don't think it is easy to re-enabled it if you release the source code. =D<br />
<br />
* I'd suggest you do release a plain version without it and release its extension which doing those thing. Anyway, I think that thing will be used by only your own =P<br />
* I don't really get the point what you are going to do with that thing, really. Please explain more.<br />
<br />
&raquo; <span style="font-size:0.9em;color:darkgreen;">[[User:Nat|Nat]] | [[User_talk:Nat|Talk]]</span> &raquo; 15:48, 11 May 2009 (UTC)<br />
<br />
Okay, so when you're coding your bot, you will likely encounter places where you will create a constant. Let's say you need to set how many bins to use in your guess factor calculations. So you might write something like this:<br />
<br />
<pre>private static final int BINS = 25;</pre><br />
<br />
But how do you know that 25 is a good number of bins? How do you figure out what the optimal number of bins is for your robot? This is where the tweaking framework comes in. I haven't fully coded it yet, but it would look something like this. First, you'd replace the hard-coded 25 with something like this:<br />
<br />
<pre>private static final int BINS = Props.getInt("guessfactor.bins");</pre><br />
<br />
The Props class would statically load a properties file out of your data folder, which would contain a line like this:<br />
<br />
<pre>guessfactor.bins=25</pre><br />
<br />
So now it's time to run the tweaker program. It would give you a list of the robots in your library, and you'd select the one you want to tweak from the list. It would then read the properties file and auto-detect the possible types of each (boolean, int, double or String). So you'd select "guessfactor.bins" out of the list and select int as its type. You'd then provide a range of values to test. You want to have an odd number of bins (so that a bin always falls directly at 0.0), so you configure it to test values between, say, 7 and 49, incrementing by 2. You'd then select what robots you want it to fight against and how many rounds to fight each bot.<br />
<br />
Once you hit "Run", the program would back up your properties file, and write a new one with guessfactor.bins=7. It would then run battles between your bot and the others you selected, similar to RoboRumble, and store the results in memory. It would then increment guessfactor.bins to 9 and run the battles again, and continue in this way until it gets to 49.<br />
<br />
Once it has finished, it will write a report of the results to a file, and restore the backed up properties file. You can open this file in a viewer that will show you a fancy chart of your bot's performance over the different values and show you which one did best.<br />
<br />
What do you think? [[User:RobertWalker|RobertWalker]] 18:43, 11 May 2009 (UTC)<br />
<br />
: I think it sounds great. I (like many others, I'm sure) have wished I had something like this many times before. The only other instance I know of someone really trying to do this was with [[AgentSmith]] (not migrated yet), but I don't think he had much success nor ever released his code. You might be able to pull some stuff from [[RoboResearch]] for automating the battles, by the way. Good luck! --[[User:Voidious|Voidious]] 18:57, 11 May 2009 (UTC)<br />
<br />
: Great! I now understand. Hope I'll get it in .jar, not a brunch of .class files like [[RoboResearch]] :-) &raquo; <span style="font-size:0.9em;color:darkgreen;">[[User:Nat|Nat]] | [[User_talk:Nat|Talk]]</span> &raquo; 09:58, 12 May 2009 (UTC)<br />
<br />
Hi. I'm using your PluggableRobot to make a new bot (my old one was ds.OoV4 and was horribly coded) and, as a not so familiar with java developer, I've had some trouble getting the debug graphics to work.<br />
So here is my solution in case someone is in the same situation. I added this in OnBeforeEventsProcessed() : <br />
<pre>Vector<Event> events = getAllEvents();<br />
for(Event event : events)<br />
{<br />
if(!event.getClass().isAssignableFrom(PaintEvent.class))<br />
onPaint( getGraphics() );<br />
}</pre><br />
I guess adding an interface for the OnPaint event in the ListenerDelegate and registering the main class as a listener would work too btw.<br />
Anyway keep up the good work you've got a fan ;) --[[User:f4|f4]] 22:22, 11 May 2009 (UTC)<br />
<br />
:: Thank you for your kind words. The debug graphics weren't working because of a change to Robocode. I'm working on improvements to PluggableRobot and I currently have graphics drawing again, though there are still some problems that I'm shaking out. Once I've got things settled down, I'll post the updated source. [[User:RobertWalker|RobertWalker]] 02:32, 13 May 2009 (UTC)<br />
<br />
== Version 2.0 alpha released ==<br />
I've just released version 2.0 alpha of PluggableRobot. There are some improvements to the Hud display code I want to make before I call it 2.0 final, but those changes are waiting on a couple of Robocode bug fixes to be released.<br />
<br />
Also, I've decided to release the tweaking platform that I've been working on as a completely separate project from PluggableRobot. I didn't want to force people to extend PluggableRobot to get the benefits of the tweaking platform. Hopefully I can release an alpha version of the tweaking platform soon.<br />
<br />
As always, I welcome your feedback and constructive criticism. --[[User:RobertWalker|RobertWalker]] 21:37, 24 May 2009 (UTC)</div>RobertWalkerhttp://robowiki.net/w/index.php?title=Talk:PluggableRobot&diff=7506Talk:PluggableRobot2009-05-24T21:37:07Z<p>RobertWalker: PluggableRobot 2.0 alpha release</p>
<hr />
<div>[[Talk:PluggableRobot/Archive|/Archive]]<br />
<br />
== Working on version 2.0 ==<br />
<br />
So I've been absent a long time, but I've been changing PluggableRobot some. Mainly because some changes to Robocode made it so PluggableRobot doesn't paint debug graphics anymore, and partly because I thought of some additional things I could do with it. When I'm finished, I'll update the source code on the wiki. [[User:RobertWalker|RobertWalker]] 15:36, 4 May 2009 (UTC)<br />
<br />
: I'm very pleased to know how many Robocoders that isn't forgot robocode already. Hoping the robocode community will be as active as the past. May I asked you to merge the DrawingBot and [[User:Nfwu/Painter]] to the PluggableRobot? It seem far more effective that your Hud. And can make the ListenerDelegate class warning-free with generic under java5? &raquo; <span style="font-size:0.9em;color:darkgreen;">[[User:Nat|Nat]] | [[User_talk:Nat|Talk]]</span> &raquo; 15:43, 4 May 2009 (UTC)<br />
<br />
:: Yeah, I was actually thinking about changing both of those things. I'm a little confused as to why exactly the ListenerDelegate is giving me the warnings; maybe you could enlighten me? Generics are awesome, but sometimes they give me migraines. I've tried various things to try to resolve it, but the warning either remains unchanged or I get a different one. As for the Hud class, I was planning on completely reworking that, but I didn't have any thoughts yet as to exactly how. I'll be sure to take a look at [[User:Nfwu/Painter]] and DrawingBot for ideas. Any other ideas for improvements while I'm at it? [[User:RobertWalker|RobertWalker]] 15:23, 5 May 2009 (UTC)<br />
<br />
::: I try to generic-ize you ListenerDelegate before, but I can't make it warningless. I have problem with some thing so if I generic-ize the Class<EventListener> and vice versa, I'll have an error in the processEvent() method so I revert to the non-generic version =( &raquo; <span style="font-size:0.9em;color:darkgreen;">[[User:Nat|Nat]] | [[User_talk:Nat|Talk]]</span> &raquo; 15:43, 5 May 2009 (UTC)<br />
<br />
:::: Well, the more I monkeyed around with it, the more I felt that generics were just making things unnecessarily complicated in this case. So I removed generics from the Invoker class, and changed it to have a consumesEvent(Event) method instead of an eventClass() method. This has cleared up all the warnings. The only bummer is that I lose some compile-time type checking, but the ListenerDelegate is built to ensure that the events get handed to the correct listeners in the first place, so I'm not terribly worried about it. Now to give it better painting support! [[User:RobertWalker|RobertWalker]] 17:38, 8 May 2009 (UTC)<br />
<br />
::::: Wow! Thanks! I usually do @SuppressWarnings("unchecked") though. &raquo; <span style="font-size:0.9em;color:darkgreen;">[[User:Nat|Nat]] | [[User_talk:Nat|Talk]]</span> &raquo; 17:54, 8 May 2009 (UTC)<br />
<br />
:::::: Yeah, I was considering that, but when I can, I prefer to solve warnings rather than ignore them. In any case, the code is easier to follow without the loads of generics stuff cluttering it up. Usually, generics make things simpler, but in this case.... Anyway, I'll post new source when I finish writing the other changes I'm working on. [[User:RobertWalker|RobertWalker]] 02:33, 9 May 2009 (UTC)<br />
<br />
I'm putting together the new debug graphics code. Like before, you register objects that are interested in drawing graphics with PluggableRobot, and they'll get invoked when it's time to paint. However, I'm also incorporating layering behavior similar to [[User:Nfwu/Painter]]. All debug code will be modularized for efficiency. For example, PluggableRobot will avoid wasting time on logic dealing with debug graphics if painting is disabled. It will also be easy to completely disable debugging code if you like before releasing your robot. (Although, if you release the source with it, it's also easy to turn it back on.)<br />
<br />
Some other things I'm planning on for the new PluggableRobot revision:<br />
<br />
* Some basic, optional components that could be used directly, extended, or used as example code for your own components. They would be things that a lot of robots would need anyway, like a data collection object or a 1-on-1 radar module.<br />
<br />
* A tweaking framework that would allow you to declare properties for your robot, then run a separate application that would test a range of different values for those properties and report on the results in combat. For example, let's say your robot has a property that controls the preferred distance your robot wishes to maintain from the enemy, and you'd like to figure out what the best value for this property would be. You'd configure the tweaking framework to test a range of values for this property, and then it would run a bunch of battles, storing the results in an database. When it was done, you could then run a viewer that would display the results with fancy graphs and such.<br />
<br />
I welcome your feedback. [[User:RobertWalker|RobertWalker]] 15:30, 11 May 2009 (UTC)<br />
<br />
Awesome! Actually I don't think it is easy to re-enabled it if you release the source code. =D<br />
<br />
* I'd suggest you do release a plain version without it and release its extension which doing those thing. Anyway, I think that thing will be used by only your own =P<br />
* I don't really get the point what you are going to do with that thing, really. Please explain more.<br />
<br />
&raquo; <span style="font-size:0.9em;color:darkgreen;">[[User:Nat|Nat]] | [[User_talk:Nat|Talk]]</span> &raquo; 15:48, 11 May 2009 (UTC)<br />
<br />
Okay, so when you're coding your bot, you will likely encounter places where you will create a constant. Let's say you need to set how many bins to use in your guess factor calculations. So you might write something like this:<br />
<br />
<pre>private static final int BINS = 25;</pre><br />
<br />
But how do you know that 25 is a good number of bins? How do you figure out what the optimal number of bins is for your robot? This is where the tweaking framework comes in. I haven't fully coded it yet, but it would look something like this. First, you'd replace the hard-coded 25 with something like this:<br />
<br />
<pre>private static final int BINS = Props.getInt("guessfactor.bins");</pre><br />
<br />
The Props class would statically load a properties file out of your data folder, which would contain a line like this:<br />
<br />
<pre>guessfactor.bins=25</pre><br />
<br />
So now it's time to run the tweaker program. It would give you a list of the robots in your library, and you'd select the one you want to tweak from the list. It would then read the properties file and auto-detect the possible types of each (boolean, int, double or String). So you'd select "guessfactor.bins" out of the list and select int as its type. You'd then provide a range of values to test. You want to have an odd number of bins (so that a bin always falls directly at 0.0), so you configure it to test values between, say, 7 and 49, incrementing by 2. You'd then select what robots you want it to fight against and how many rounds to fight each bot.<br />
<br />
Once you hit "Run", the program would back up your properties file, and write a new one with guessfactor.bins=7. It would then run battles between your bot and the others you selected, similar to RoboRumble, and store the results in memory. It would then increment guessfactor.bins to 9 and run the battles again, and continue in this way until it gets to 49.<br />
<br />
Once it has finished, it will write a report of the results to a file, and restore the backed up properties file. You can open this file in a viewer that will show you a fancy chart of your bot's performance over the different values and show you which one did best.<br />
<br />
What do you think? [[User:RobertWalker|RobertWalker]] 18:43, 11 May 2009 (UTC)<br />
<br />
: I think it sounds great. I (like many others, I'm sure) have wished I had something like this many times before. The only other instance I know of someone really trying to do this was with [[AgentSmith]] (not migrated yet), but I don't think he had much success nor ever released his code. You might be able to pull some stuff from [[RoboResearch]] for automating the battles, by the way. Good luck! --[[User:Voidious|Voidious]] 18:57, 11 May 2009 (UTC)<br />
<br />
: Great! I now understand. Hope I'll get it in .jar, not a brunch of .class files like [[RoboResearch]] :-) &raquo; <span style="font-size:0.9em;color:darkgreen;">[[User:Nat|Nat]] | [[User_talk:Nat|Talk]]</span> &raquo; 09:58, 12 May 2009 (UTC)<br />
<br />
Hi. I'm using your PluggableRobot to make a new bot (my old one was ds.OoV4 and was horribly coded) and, as a not so familiar with java developer, I've had some trouble getting the debug graphics to work.<br />
So here is my solution in case someone is in the same situation. I added this in OnBeforeEventsProcessed() : <br />
<pre>Vector<Event> events = getAllEvents();<br />
for(Event event : events)<br />
{<br />
if(!event.getClass().isAssignableFrom(PaintEvent.class))<br />
onPaint( getGraphics() );<br />
}</pre><br />
I guess adding an interface for the OnPaint event in the ListenerDelegate and registering the main class as a listener would work too btw.<br />
Anyway keep up the good work you've got a fan ;) --[[User:f4|f4]] 22:22, 11 May 2009 (UTC)<br />
<br />
:: Thank you for your kind words. The debug graphics weren't working because of a change to Robocode. I'm working on improvements to PluggableRobot and I currently have graphics drawing again, though there are still some problems that I'm shaking out. Once I've got things settled down, I'll post the updated source. [[User:RobertWalker|RobertWalker]] 02:32, 13 May 2009 (UTC)<br />
<br />
== Version 2.0 alpha released ==<br />
I've just released version 2.0 alpha of PluggableRobot. There are some improvements to the Hud display code I want to make before I call it 2.0 final, but those changes are waiting on a couple of Robocode bug fixes to be released.<br />
<br />
Also, I've decided to release the tweaking platform that I've been working on as a completely separate project from PluggableRobot. I didn't want to force people to extend PluggableRobot to get the benefits of the tweaking platform. Hopefully I can release an alpha version of the tweaking platform soon. [[User:RobertWalker|RobertWalker]] 21:37, 24 May 2009 (UTC)</div>RobertWalkerhttp://robowiki.net/w/index.php?title=Talk:PluggableRobot/Archive&diff=7505Talk:PluggableRobot/Archive2009-05-24T21:32:41Z<p>RobertWalker: Archived discussion from old wiki</p>
<hr />
<div>== Discussion from Old Wiki ==<br />
<br />
I think all the big bots use something like this? I mean Shadow does, my (bigger) bots do, who else? Mine in particular handles paint and robot color functions, and in Genesis tracks time, data and properties loading. It overlays it own methods for onScannedRobot, handles the radar and does many many other things I mostly forgot about, and it all does this with the data from a interface called 'Constants' (meaning colors, propertie file name, property names and numbers, etc. --[[User:Chase-san|Chase-san]]<br />
<br />
It's not too surprising that the same people that enjoy programming for fun would also tend to build their bots with more modular designs, though some are certainly more "pluggable" than others. ([[Dookious]] is pretty clean code, IMO, but it would be easier to implement a new [[Wave]]-based gun than a new [[PatternMatching]] gun.) In addition to all the usual reasons for doing so (ie, in a profession), with Robocode it has the additional benefit of keeping me more motivated to work on my bots. [[PrairieWolf]] is a classic (one of the [[Ancients]]) that uses some kind of pluggable design for its [[MultiMode]] strategies. -- [[User:Voidious|Voidious]]<br />
<br />
Yeah, it does not surprise me that modularity would be a popular topic. Here's a bit more about how PluggableRobot works. Basically, PluggableRobot allows you to register Listeners, Components and Painters.<br />
* I define a listener interface for each of the Robocode events, and any objects which implement the interfaces and register themselves with the bot will be notified of those events. The really nice thing is that PluggableRobot gives much better control over the order in which notifications are given; listeners are notified of events in the order that they are registered, and each listener gets the events in the order that the corresponding listener interfaces are declared. So a class with a declaration like <pre>public class MyClass implements EventListener.ScannedRobot, EventListener.Death</pre> will get notified of the ScannedRobotEvent *before* the DeathEvent. Pretty handy. All of this happens inside a custom event test as discussed on the [[EventManagement]] page. I don't actually make the robot do anything at this stage; this is just for data collection and processing.<br />
* Components are where I actually make the robot do stuff. Each component has a go() method that gets executed in the main loop of the robot. Like the event listeners, they get called in the order that they were registered.<br />
* Similarly, painters have a paint() method that gets called when it's time to paint debug graphics. In the onPaint() method on the robot I inject the Graphics2D object into a custom object I've created called the Hud, which takes care of icky stuff that Graphics2D expects, like downcasting (Is that a word?) from double to int, translating angles to degrees, etc.<br />
* Pluggable robot also defines initializeBattle() and initializeRound() methods.<br />
-- [[User:RobertWalker|RobertWalker]]</div>RobertWalkerhttp://robowiki.net/w/index.php?title=PluggableRobot&diff=7504PluggableRobot2009-05-24T21:31:19Z<p>RobertWalker: PluggableRobot version 2.0 alpha has been released</p>
<hr />
<div>{{Infobox Robot<br />
| name = PluggableRobot<br />
| author = [[RobertWalker]]<br />
| extends = [[AdvancedRobot]]<br />
| released = September 21, 2007<br />
| current_version = 2.0 alpha<br />
| license = [[RWLPCL]]<br />
| source_link = http://robowiki.net/w/index.php?title=PluggableRobot/Source<br />
| isOpenSource = true<br />
}}<br />
<br />
== Info ==<br />
; What's special about it?<br />
: It's not a standalone robot, really, but a base robot which you can extend. It provides a pluggable architecture and sophisticated event management. I developed it in parallel with my robot that is based on it, [[RabidWombat]].<br />
<br />
; How competitive is it?<br />
: That's up to you! You extend it to make it whatever you want it to be.<br />
<br />
; How does it [[Movement|move]]? How does it fire? How does the [[Melee|melee]] strategy differ from [[OneOnOne|one-on-one]] strategy? What does it save between rounds and matches?<br />
: It's just an architecture upon which a robot can be built. Without extension, it's pretty much indistinguishable from [[SittingDuck]].<br />
<br />
; Where did you get the name?<br />
: It's a robot design for a pluggable architecture. [[PluggableRobot]] made sense.<br />
<br />
; Can I use your code?<br />
: Sure, [[PluggableRobot/Source|help yourself to the source code]]. I would like to be able to make this into a JAR that can just be dropped into another project, but Robocode doesn't seem to let you do this in development mode. :(<br />
<br />
; What's next for your robot?<br />
: Maybe some some persistence code.<br />
<br />
; Does it have any [[White Whale|white whales]]?<br />
: Since it doesn't fight on its own, no.<br />
<br />
== Usage ==<br />
Extending PluggableRobot allows you to create reusable components to control the robot's behavior. There are three types of pluggable objects: listeners, components and painters. An object can be one or all three of these types.<br />
* '''Listeners:''' Every Robocode event has a corresponding listener interface in PluggableRobot. Any object that wishes to be notified of an event needs only implement the corresponding interface and register itself with the bot by calling PluggableRobot.registerListener(). PluggableRobot gives much better control over the order in which notifications are given; listeners are notified of events in the order that they are registered, and each listener gets the events in the order that the corresponding listener interfaces are declared. Listeners should not perform any blocking actions in their event handling methods; that's the job of components.<br />
* '''Components:''' Components are where the robot actually does stuff. Any object that wishes to have a chance to act in the execution loop should extend the Component class, implement the go() method, and register itself with the robot by calling PluggableRobot.registerComponent(). PluggableRobot will call go() on each component in the order they were registered, after all the events have been processed. This separation between listeners and components ensures that when it's time for the robot to act, it has all the intel available.<br />
* '''Painters:''' Objects which implement Hud.Painter and register themselves via the PluggableRobot.registerPainter() method will have their paint() methods invoked when it's time to paint debug graphics. Painters will get a reference to a Canvas object, an object similar to Graphics2D, but with some convenience methods and which accepts doubles for many arguments where Graphics2D requires ints.<br />
<br />
== Credits ==<br />
It wouldn't be totally accurate to say that PluggableRobot is an original creation. Though it's not directly based on any other bots, I've culled some ideas from the wiki. Most of the discussions useful to PluggableRobot have not yet been migrated from the old wiki, though.<br />
<br />
[[Category:Bots|PluggableRobot]]<br />
[[Category:Open Source Bots|PluggableRobot]]<br />
<br />
__NOTOC__ __NOEDITSECTION__</div>RobertWalkerhttp://robowiki.net/w/index.php?title=PluggableRobot/Source&diff=7502PluggableRobot/Source2009-05-24T21:23:42Z<p>RobertWalker: Version 2.0 alpha</p>
<hr />
<div>Below is the source for [[PluggableRobot]]. Pillage to your heart's content. PluggableRobot is released under the [[RWLPCL|RoboWiki Limited Public Code License]].<br />
== Canvas.java ==<br />
<pre><nowiki><br />
/*<br />
* PluggableRobot, by Robert J. Walker<br />
* Home page: http://robowiki.net/w/index.php?title=PluggableRobot<br />
* This software is made available under the RoboWiki Limited Public Code<br />
* License (RWLPCL). The full text of the license may be found at:<br />
* http://robowiki.net/w/index.php?title=RWLPCL<br />
*/<br />
package rjw.pluggablerobot;<br />
<br />
import java.awt.*;<br />
import java.awt.geom.Point2D;<br />
<br />
import robocode.AdvancedRobot;<br />
<br />
/**<br />
* A convenience wrapper around Graphics2D which provides the following<br />
* features:<br />
* <br />
* - Accepts doubles for many arguments which are ints in Graphics2D<br />
* - getCenter(), getHeight() and getWidth()<br />
* - drawCircle(), fillCircle()<br />
* <br />
* @author Robert J. Walker<br />
*/<br />
public class Canvas {<br />
private Graphics2D _g;<br />
private double _width;<br />
private double _height;<br />
private Point2D.Double _center;<br />
<br />
Canvas(AdvancedRobot bot) {<br />
_g = bot.getGraphics();<br />
_width = bot.getBattleFieldWidth();<br />
_height = bot.getBattleFieldHeight();<br />
_center = new Point2D.Double(_width / 2, _height / 2);<br />
}<br />
<br />
/**<br />
* @see java awt.Graphics2D.clearRect(int, int, int, int)<br />
*/<br />
public void clearRect(double x, double y, double width, double height) {<br />
_g.clearRect(i(x), i(y), i(width), i(height));<br />
}<br />
<br />
/**<br />
* @see java awt.Graphics2D.clip(java.awt.Shape)<br />
*/<br />
public void clip(Shape shape) {<br />
_g.clip(shape);<br />
}<br />
<br />
/**<br />
* @see java awt.Graphics2D.clipRect(int, int, int, int)<br />
*/<br />
public void clipRect(double x, double y, double width, double height) {<br />
_g.clipRect(i(x), i(y), i(width), i(height));<br />
}<br />
<br />
/**<br />
* @see java awt.Graphics2D.copyArea(int, int, int, int, int, int)<br />
*/<br />
public void copyArea(double x, double y, double width, double height,<br />
double dx, double dy) {<br />
_g.copyArea(i(x), i(y), i(width), i(height), i(dx), i(dy));<br />
}<br />
<br />
/**<br />
* @see java awt.Graphics2D.draw(java.awt.Shape)<br />
*/<br />
public void draw(Shape shape) {<br />
_g.draw(shape);<br />
}<br />
<br />
/**<br />
* @see java awt.Graphics2D.drawArc(int, int, int, int, int, int)<br />
*/<br />
public void drawArc(double x, double y, double width, double height,<br />
double startAngle, double arcAngle) {<br />
_g.drawArc(i(x), i(y), i(width), i(height), i(startAngle), i(arcAngle));<br />
}<br />
<br />
/**<br />
* Convenience method for drawing a circle, given the center coordinates and<br />
* radius.<br />
*/<br />
public void drawCircle(double x, double y, double r) {<br />
int d = i(r * 2);<br />
_g.drawOval(i(x - r), i(y - r), d, d);<br />
}<br />
<br />
/**<br />
* @see java awt.Graphics2D.drawLine(int, int, int, int)<br />
*/<br />
public void drawLine(double x1, double y1, double x2, double y2) {<br />
_g.drawLine(i(x1), i(y1), i(x2), i(y2));<br />
}<br />
<br />
/**<br />
* @see java awt.Graphics2D.drawOval(int, int, int, int)<br />
*/<br />
public void drawOval(double x, double y, double width, double height) {<br />
_g.drawOval(i(x), i(y), i(width), i(height));<br />
}<br />
<br />
/**<br />
* @see java awt.Graphics2D.drawRect(int, int, int, int)<br />
*/<br />
public void drawRect(double x, double y, double width, double height) { <br />
_g.drawRect(i(x), i(y), i(width), i(height));<br />
}<br />
<br />
/**<br />
* @see java awt.Graphics2D.drawRoundRect(int, int, int, int, int, int)<br />
*/<br />
public void drawRoundRect(double x, double y, double width, double height,<br />
double arcWidth, double arcHeight) { <br />
_g.drawRoundRect(i(x), i(y), i(width), i(height), i(arcWidth),<br />
i(arcHeight));<br />
}<br />
<br />
/**<br />
* @see java awt.Graphics2D.drawString(String, float, float)<br />
*/<br />
public void drawString(String str, double x, double y) {<br />
_g.drawString(str, (float) x, (float) y);<br />
}<br />
<br />
/**<br />
* @see java awt.Graphics2D.fill(java.awt.Shape)<br />
*/<br />
public void fill(Shape shape) {<br />
_g.fill(shape);<br />
}<br />
<br />
/**<br />
* @see java awt.Graphics2D.fillArc(int, int, int, int, int, int)<br />
*/<br />
public void fillArc(double x, double y, double width, double height,<br />
double startAngle, double arcAngle) {<br />
_g.fillArc(i(x), i(y), i(width), i(height), i(startAngle), i(arcAngle));<br />
}<br />
<br />
/**<br />
* Convenience method for filling a circle, given the center coordinates and<br />
* radius.<br />
*/<br />
public void fillCircle(double x, double y, double r) {<br />
int d = i(r * 2);<br />
_g.fillOval(i(x - r), i(y - r), d, d);<br />
}<br />
<br />
/**<br />
* @see java awt.Graphics2D.fillOval(int, int, int, int)<br />
*/<br />
public void fillOval(double x, double y, double width, double height) {<br />
_g.fillOval(i(x), i(y), i(width), i(height));<br />
}<br />
<br />
/**<br />
* @see java awt.Graphics2D.fillRect(int, int, int, int)<br />
*/<br />
public void fillRect(double x, double y, double width, double height) { <br />
_g.fillRect(i(x), i(y), i(width), i(height));<br />
}<br />
<br />
/**<br />
* @see java awt.Graphics2D.fillRoundRect(int, int, int, int, int, int)<br />
*/<br />
public void fillRoundRect(double x, double y, double width, double height,<br />
double arcWidth, double arcHeight) { <br />
_g.fillRoundRect(i(x), i(y), i(width), i(height), i(arcWidth),<br />
i(arcHeight));<br />
}<br />
<br />
/**<br />
* @see java awt.Graphics2D.getBackground()<br />
*/<br />
public Color getBackground() {<br />
return _g.getBackground();<br />
}<br />
<br />
/**<br />
* Returns a Point2D located at the center of the canvas.<br />
*/<br />
public Point2D.Double getCenter() {<br />
return _center;<br />
}<br />
<br />
/**<br />
* @see java awt.Graphics2D.getClip()<br />
*/<br />
public Shape getClip() {<br />
return _g.getClip();<br />
}<br />
<br />
/**<br />
* @see java awt.Graphics2D.getClipBounds()<br />
*/<br />
public Rectangle getClipBounds() {<br />
return _g.getClipBounds();<br />
}<br />
<br />
/**<br />
* @see java awt.Graphics2D.getClipBounds(java.awt.Rectangle)<br />
*/<br />
public Rectangle getClipBounds(Rectangle r) {<br />
return _g.getClipBounds(r);<br />
}<br />
<br />
/**<br />
* @see java awt.Graphics2D.getColor()<br />
*/<br />
public Color getColor() {<br />
return _g.getColor();<br />
}<br />
<br />
/**<br />
* @see java awt.Graphics2D.getDeviceConfiguration()<br />
*/<br />
public GraphicsConfiguration getDeviceConfiguration() {<br />
return _g.getDeviceConfiguration();<br />
}<br />
<br />
/**<br />
* Returns a reference to the actual Graphics2D object wrapped by the<br />
* Canvas.<br />
*/<br />
public Graphics2D getGraphics() {<br />
return _g;<br />
}<br />
<br />
/**<br />
* Returns the canvas's height.<br />
*/<br />
public double getHeight() {<br />
return _height;<br />
}<br />
<br />
/**<br />
* @see java awt.Graphics2D.getPaint()<br />
*/<br />
public Paint getPaint() {<br />
return _g.getPaint();<br />
}<br />
<br />
/**<br />
* @see java awt.Graphics2D.getStroke()<br />
*/<br />
public Stroke getStroke() {<br />
return _g.getStroke();<br />
}<br />
<br />
/**<br />
* Returns the canvas's width.<br />
*/<br />
public double getWidth() {<br />
return _width;<br />
}<br />
<br />
/**<br />
* @see java awt.Graphics2D.hit(java.awt.Rectangle, java.awt.Shape, boolean)<br />
*/<br />
public boolean hit(Rectangle rect, Shape s, boolean onStroke) {<br />
return _g.hit(rect, s, onStroke);<br />
}<br />
<br />
/**<br />
* @see java awt.Graphics2D.hitClip(int, int, int, int)<br />
*/<br />
public boolean hitClip(double x, double y, double width, double height) {<br />
return _g.hitClip(i(x), i(y), i(width), i(height));<br />
}<br />
<br />
/**<br />
* @see java awt.Graphics2D.setBackground(java.awt.Color)<br />
*/<br />
public void setBackground(Color color) {<br />
_g.setBackground(color);<br />
}<br />
<br />
/**<br />
* @see java awt.Graphics2D.setClip(int, int, int, int)<br />
*/<br />
public void setClip(double x, double y, double width, double height) {<br />
_g.setClip(i(x), i(y), i(width), i(height));<br />
}<br />
<br />
/**<br />
* @see java awt.Graphics2D.setClip(java.awt.Shape)<br />
*/<br />
public void setClip(Shape clip) {<br />
_g.setClip(clip);<br />
}<br />
<br />
/**<br />
* @see java awt.Graphics2D.setColor(java.awt.Color)<br />
*/<br />
public void setColor(Color c) {<br />
_g.setColor(c);<br />
}<br />
<br />
/**<br />
* @see java awt.Graphics2D.setPaint(java.awt.Paint)<br />
*/<br />
public void setPaint(Paint paint) {<br />
_g.setPaint(paint);<br />
}<br />
<br />
/**<br />
* @see java awt.Graphics2D.setStroke(java.awt.Stroke)<br />
*/<br />
public void setStroke(Stroke stroke) {<br />
_g.setStroke(stroke);<br />
}<br />
<br />
/**<br />
* Rounds a double to the nearest integer and returns it as an int.<br />
*/<br />
private static int i(double d) {<br />
return (int) Math.round(d);<br />
}<br />
}<br />
</nowiki></pre><br />
<br />
== Component.java ==<br />
<pre><nowiki><br />
/*<br />
* PluggableRobot, by Robert J. Walker<br />
* Home page: http://robowiki.net/w/index.php?title=PluggableRobot<br />
* This software is made available under the RoboWiki Limited Public Code<br />
* License (RWLPCL). The full text of the license may be found at:<br />
* http://robowiki.net/w/index.php?title=RWLPCL<br />
*/<br />
package rjw.pluggablerobot;<br />
<br />
/**<br />
* Components encapsulate the main combat behavior of the robot into pluggable<br />
* modules. Any code that actually sets an action for the robot (moving,<br />
* turning, rotating the turret or radar, etc.) should be done in the go()<br />
* method. Components should NEVER call any blocking methods; PluggableRobot<br />
* will call execute() automatically when all components have had a chance to<br />
* act.<br />
* @author Robert J. Walker<br />
*/<br />
public interface Component {<br />
/**<br />
* Asks this Component to execute any actions that it wants to take this<br />
* turn. PluggableRobot will call this method once per turn for each<br />
* registered Component. Don't put any blocking calls in here;<br />
* PluggableRobot will call execute() for you automatically after calling<br />
* go() on each Component.<br />
*/<br />
public abstract void go();<br />
}<br />
</nowiki></pre><br />
<br />
== EventListener.java ==<br />
<pre><nowiki><br />
/*<br />
* PluggableRobot, by Robert J. Walker<br />
* Home page: http://robowiki.net/w/index.php?title=PluggableRobot<br />
* This software is made available under the RoboWiki Limited Public Code<br />
* License (RWLPCL). The full text of the license may be found at:<br />
* http://robowiki.net/w/index.php?title=RWLPCL<br />
*/<br />
package rjw.pluggablerobot;<br />
<br />
import robocode.*;<br />
<br />
/**<br />
* Event listener interfaces. Objects that wish to be notified of events must<br />
* extend one or more of these subinterfaces and register themselves with<br />
* PluggableRobot at the start of the round via the registerListener() method.<br />
* @author Robert J. Walker<br />
*/<br />
public interface EventListener {<br />
public interface BattleEnded extends EventListener {<br />
/**<br />
* Called by the ListenerDelegate when the battle ends.<br />
*/<br />
public void notifyBattleEnded(BattleEndedEvent event);<br />
}<br />
<br />
public interface BulletHitBullet extends EventListener {<br />
/**<br />
* Called by the ListenerDelegate when a bullet fired by your robot has<br />
* hit another bullet.<br />
*/<br />
public void notifyBulletHitBullet(BulletHitBulletEvent event);<br />
}<br />
<br />
public interface BulletHit extends EventListener {<br />
/**<br />
* Called by the ListenerDelegate when a bullet fired by your robot has<br />
* hit another robot.<br />
*/<br />
public void notifyBulletHit(BulletHitEvent event);<br />
}<br />
<br />
public interface BulletMissed extends EventListener {<br />
/**<br />
* Called by the ListenerDelegate when a bullet fired by your robot has<br />
* hit a wall.<br />
*/<br />
public void notifyBulletMissed(BulletMissedEvent event);<br />
}<br />
<br />
public interface Death extends EventListener {<br />
/**<br />
* Called by the ListenerDelegate when your robot has been destroyed.<br />
*/<br />
public void notifyDeath(DeathEvent event);<br />
}<br />
<br />
public interface HitByBullet extends EventListener {<br />
/**<br />
* Called by the ListenerDelegate when your robot has been hit by an<br />
* enemy bullet.<br />
*/<br />
public void notifyHitByBullet(HitByBulletEvent event);<br />
}<br />
<br />
public interface HitRobot extends EventListener {<br />
/**<br />
* Called by the ListenerDelegate when your robot has collided with<br />
* another robot.<br />
*/<br />
public void notifyHitRobot(HitRobotEvent event);<br />
}<br />
<br />
public interface HitWall extends EventListener {<br />
/**<br />
* Called by the ListenerDelegate when your robot has collided with a<br />
* wall.<br />
*/<br />
public void notifyHitWall(HitWallEvent event);<br />
}<br />
<br />
public interface RobotDeath extends EventListener {<br />
/**<br />
* Called by the ListenerDelegate when an enemy robot has been<br />
* destroyed.<br />
*/<br />
public void notifyRobotDeath(RobotDeathEvent event);<br />
}<br />
<br />
public interface ScannedRobot extends EventListener {<br />
/**<br />
* Called by the ListenerDelegate when your radar has swept over an<br />
* enemy robot.<br />
*/<br />
public void notifyScannedRobot(ScannedRobotEvent event);<br />
}<br />
<br />
public interface SkippedTurn extends EventListener {<br />
/**<br />
* Called by the ListenerDelegate when your robot has skipped a turn.<br />
*/<br />
public void notifySkippedTurn(SkippedTurnEvent event);<br />
}<br />
<br />
public interface Status extends EventListener {<br />
/**<br />
* Called by the ListenerDelegate every turn with a robot status update.<br />
*/<br />
public void notifyStatus(StatusEvent event);<br />
}<br />
<br />
public interface Win extends EventListener {<br />
/**<br />
* Called by the ListenerDelegate when all robots besides yours have<br />
* been destroyed.<br />
*/<br />
public void notifyWin(WinEvent event);<br />
}<br />
<br />
<br />
// Internal event listeners<br />
<br />
/**<br />
* An EventListener used only by the Hud to inform it of KeyPressedEvents<br />
* so that it handle requests to toggle layers.<br />
*/<br />
interface _KeyPressed extends EventListener {<br />
/**<br />
* Notifies the Hud that a key was pressed.<br />
*/<br />
public void notifyKeyPressed(KeyPressedEvent event);<br />
}<br />
<br />
/**<br />
* An EventListener used only by the ListenerDelegate to inform it of<br />
* PaintEvents. The ListenerDelegate registers with itself as being<br />
* interested in this event. This is the connection point for<br />
* PluggableRobot's debug graphics harness.<br />
*/<br />
interface _Paint extends EventListener {<br />
/**<br />
* Notifies the ListenerDelegate that a PaintEvent has been received.<br />
*/<br />
public void notifyPaint(PaintEvent event);<br />
}<br />
}<br />
</nowiki></pre><br />
<br />
== Hud.java ==<br />
<pre><nowiki><br />
/*<br />
* PluggableRobot, by Robert J. Walker<br />
* Home page: http://robowiki.net/w/index.php?title=PluggableRobot<br />
* This software is made available under the RoboWiki Limited Public Code<br />
* License (RWLPCL). The full text of the license may be found at:<br />
* http://robowiki.net/w/index.php?title=RWLPCL<br />
*/<br />
package rjw.pluggablerobot;<br />
<br />
import java.util.ArrayList;<br />
<br />
import rjw.pluggablerobot.EventListener._KeyPressed;<br />
import robocode.AdvancedRobot;<br />
import robocode.KeyPressedEvent;<br />
<br />
/**<br />
* The Hud is responsible for drawing debug graphics. The Hud has multiple<br />
* layers, each of which can be enabled or disabled independently through a key<br />
* binding. Any object which is interested in contributing to the Hud must<br />
* register itself with PluggableRobot, declaring which layer it wishes to paint<br />
* on. Layers are painted in the order in which they were declared, and<br />
* individual painters are invoked in the order that they were registered for<br />
* that layer.<br />
* <br />
* Concept based on previous work by Nfwu and David Alves:<br />
* http://robowiki.net/w/index.php?title=User:Nfwu/Painter<br />
*<br />
* @author Robert J. Walker<br />
*/<br />
public class Hud implements _KeyPressed {<br />
private Canvas _canvas;<br />
private ArrayList<Layer> _layers = new ArrayList<Layer>();<br />
<br />
public Hud(AdvancedRobot bot) {<br />
_canvas = new Canvas(bot);<br />
}<br />
<br />
/**<br />
* Constructs a new Layer with the given name and bound to the indicated<br />
* key. The enabled argument determines whether or not the layer should<br />
* be on or off by default.<br />
*/<br />
public void createLayer(int key, String name, boolean enabled) {<br />
Layer layer = new Layer(key, name, enabled);<br />
_layers.add(layer);<br />
}<br />
<br />
/**<br />
* Registers a painter with the layer bound to the given key.<br />
*/<br />
public void registerPainter(int key, Painter painter) {<br />
for (Layer layer : _layers) {<br />
if (layer.getKey() == key) {<br />
layer.addPainter(painter);<br />
return;<br />
}<br />
}<br />
<br />
throw new IllegalArgumentException("No layer bound to that key!");<br />
}<br />
<br />
/**<br />
* Notifes the Hud that a key was pressed, and toggles the corresponding<br />
* layer, if it exists.<br />
*/<br />
@Override<br />
public void notifyKeyPressed(KeyPressedEvent event) {<br />
Layer layer = getLayer(event.getSourceEvent().getKeyCode());<br />
<br />
if (layer != null) {<br />
layer.toggle();<br />
}<br />
}<br />
<br />
/**<br />
* Called by PluggableRobot when it's time to paint the Hud.<br />
*/<br />
void paint(long tick) {<br />
for (Layer layer : _layers) {<br />
layer.paint(_canvas, tick);<br />
}<br />
}<br />
<br />
/**<br />
* Returns the layer bound to the given key.<br />
*/<br />
private Layer getLayer(int key) {<br />
for (Layer layer : _layers) {<br />
if (layer.getKey() == key) {<br />
return layer;<br />
}<br />
}<br />
<br />
return null;<br />
}<br />
<br />
<br />
/**<br />
* Objects which implement the Painter interface and are registered<br />
* PluggableRobot will get their paint() methods called when it is time for<br />
* them to paint. Note that any one object that implements Painter may only<br />
* paint on one layer of the Hud.<br />
*/<br />
public interface Painter {<br />
/**<br />
* Notifies the Painter that it's time to paint, and provides it with a<br />
* Canvas object to paint with.<br />
*/<br />
public void paint(Canvas canvas, long tick);<br />
}<br />
<br />
/**<br />
* A single Hud layer, responsible for painting itself by calling the<br />
* Painters that which to paint on it. <br />
*/<br />
private static class Layer {<br />
private int _key;<br />
private String _name;<br />
private boolean _enabled;<br />
private ArrayList<Painter> _painters = new ArrayList<Painter>();<br />
<br />
/**<br />
* Constructs a new Layer with the given name and bound to the indicated<br />
* key. The enabled argument determines whether or not the layer should<br />
* be on or off by default.<br />
*/<br />
Layer(int key, String name, boolean enabled) {<br />
_key = key;<br />
_name = name;<br />
_enabled = enabled;<br />
}<br />
<br />
/**<br />
* Returns the key to which this Layer is bound.<br />
*/<br />
int getKey() {<br />
return _key;<br />
}<br />
<br />
/**<br />
* Returns this Layer's name.<br />
*/<br />
String getName() {<br />
return _name;<br />
}<br />
<br />
/**<br />
* Adds a new Painter to this Layer.<br />
*/<br />
void addPainter(Painter painter) {<br />
_painters.add(painter);<br />
}<br />
<br />
/**<br />
* Returns whether or not this Layer is enabled.<br />
*/<br />
boolean isEnabled() {<br />
return _enabled;<br />
}<br />
<br />
/**<br />
* Toggles this Layer between being enabled and disabled.<br />
*/<br />
void toggle() {<br />
_enabled = !_enabled;<br />
}<br />
<br />
/**<br />
* Notifies the Painter that it's time to paint, and provides it with a<br />
* Canvas object to paint with.<br />
*/<br />
void paint(Canvas canvas, long tick) {<br />
if (!_enabled) {<br />
return;<br />
}<br />
<br />
for (Painter painter : _painters) {<br />
painter.paint(canvas, tick);<br />
}<br />
}<br />
}<br />
}<br />
</nowiki></pre><br />
<br />
== ListenerDelegate.java ==<br />
<pre><nowiki><br />
/*<br />
* PluggableRobot, by Robert J. Walker<br />
* Home page: http://robowiki.net/w/index.php?title=PluggableRobot<br />
* This software is made available under the RoboWiki Limited Public Code<br />
* License (RWLPCL). The full text of the license may be found at:<br />
* http://robowiki.net/w/index.php?title=RWLPCL<br />
*/<br />
package rjw.pluggablerobot;<br />
<br />
import java.util.*;<br />
<br />
import robocode.*;<br />
<br />
/**<br />
* Class that manages all the event listeners for a PluggableRobot and delegates<br />
* events to the appropriate EventListeners. Unlike the default Robocode<br />
* behavior, events are doled out first by listener (first registered, first<br />
* notified), then by the order of the listener interfaces declared on the<br />
* listener implementation. This allows each component to get notified of events<br />
* in any order it likes, regardless of event priorities or the order used by<br />
* other components.<br />
* <br />
* PaintEvents are handled differently; they are captured and held until all<br />
* EventListeners have been notified and Components have acted, so that as much<br />
* information as possible is available for debug painting.<br />
* <br />
* @author Robert J. Walker<br />
*/<br />
public class ListenerDelegate implements EventListener._Paint {<br />
private static HashMap<Class, Invoker> _invokers;<br />
<br />
// Build the invoker map, so we can look up invokers by listener class<br />
static {<br />
_invokers = new HashMap<Class, Invoker>();<br />
<br />
// interal paint event listener<br />
_invokers.put(_Paint.class, new Invoker() {<br />
protected boolean consumesEvent(Event event) {<br />
return event instanceof PaintEvent;<br />
}<br />
<br />
protected void invoke(EventListener listener, Event event) {<br />
((_Paint) listener).notifyPaint((PaintEvent) event);<br />
}<br />
});<br />
<br />
// interal key pressed event listener<br />
_invokers.put(_KeyPressed.class, new Invoker() {<br />
protected boolean consumesEvent(Event event) {<br />
return event instanceof KeyPressedEvent;<br />
}<br />
<br />
protected void invoke(EventListener listener, Event event) {<br />
((_KeyPressed) listener).notifyKeyPressed(<br />
(KeyPressedEvent) event<br />
);<br />
}<br />
});<br />
<br />
// battle ended<br />
_invokers.put(EventListener.BattleEnded.class, new Invoker() {<br />
protected boolean consumesEvent(Event event) {<br />
return event instanceof BattleEndedEvent;<br />
}<br />
<br />
protected void invoke(EventListener listener, Event event) {<br />
((EventListener.BattleEnded) listener).notifyBattleEnded(<br />
(BattleEndedEvent) event<br />
);<br />
}<br />
});<br />
<br />
// bullet hit<br />
_invokers.put(EventListener.BulletHit.class, new Invoker() {<br />
protected boolean consumesEvent(Event event) {<br />
return event instanceof BulletHitEvent;<br />
}<br />
<br />
protected void invoke(EventListener listener, Event event) {<br />
((EventListener.BulletHit) listener).notifyBulletHit(<br />
(BulletHitEvent) event<br />
);<br />
}<br />
});<br />
<br />
// bullet hit bullet<br />
_invokers.put(EventListener.BulletHitBullet.class, new Invoker() {<br />
protected boolean consumesEvent(Event event) {<br />
return event instanceof BulletHitBulletEvent;<br />
}<br />
<br />
protected void invoke(EventListener listener, Event event) {<br />
((EventListener.BulletHitBullet) listener)<br />
.notifyBulletHitBullet((BulletHitBulletEvent) event);<br />
}<br />
});<br />
<br />
// bullet missed<br />
_invokers.put(EventListener.BulletMissed.class, new Invoker() {<br />
protected boolean consumesEvent(Event event) {<br />
return event instanceof BulletMissedEvent;<br />
}<br />
<br />
protected void invoke(EventListener listener, Event event) {<br />
((EventListener.BulletMissed) listener).notifyBulletMissed(<br />
(BulletMissedEvent) event<br />
);<br />
}<br />
});<br />
<br />
// death<br />
_invokers.put(EventListener.Death.class, new Invoker() {<br />
protected boolean consumesEvent(Event event) {<br />
return event instanceof DeathEvent;<br />
}<br />
<br />
protected void invoke(EventListener listener, Event event) {<br />
((EventListener.Death) listener).notifyDeath(<br />
(DeathEvent) event<br />
);<br />
}<br />
});<br />
<br />
// hit by bullet<br />
_invokers.put(EventListener.HitByBullet.class, new Invoker() {<br />
protected boolean consumesEvent(Event event) {<br />
return event instanceof HitByBulletEvent;<br />
}<br />
<br />
protected void invoke(EventListener listener, Event event) {<br />
((EventListener.HitByBullet) listener).notifyHitByBullet(<br />
(HitByBulletEvent) event<br />
);<br />
}<br />
});<br />
<br />
// hit robot<br />
_invokers.put(EventListener.HitRobot.class, new Invoker() {<br />
protected boolean consumesEvent(Event event) {<br />
return event instanceof HitRobotEvent;<br />
}<br />
<br />
protected void invoke(EventListener listener, Event event) {<br />
((EventListener.HitRobot) listener).notifyHitRobot(<br />
(HitRobotEvent) event<br />
);<br />
}<br />
});<br />
<br />
// hit wall<br />
_invokers.put(EventListener.HitWall.class, new Invoker() {<br />
protected boolean consumesEvent(Event event) {<br />
return event instanceof HitWallEvent;<br />
}<br />
<br />
protected void invoke(EventListener listener, Event event) {<br />
((EventListener.HitWall) listener).notifyHitWall(<br />
(HitWallEvent) event<br />
);<br />
}<br />
});<br />
<br />
// robot death<br />
_invokers.put(EventListener.RobotDeath.class, new Invoker() {<br />
protected boolean consumesEvent(Event event) {<br />
return event instanceof RobotDeathEvent;<br />
}<br />
<br />
protected void invoke(EventListener listener, Event event) {<br />
((EventListener.RobotDeath) listener).notifyRobotDeath(<br />
(RobotDeathEvent) event<br />
);<br />
}<br />
});<br />
<br />
// scanned robot<br />
_invokers.put(EventListener.ScannedRobot.class, new Invoker() {<br />
protected boolean consumesEvent(Event event) {<br />
return event instanceof ScannedRobotEvent;<br />
}<br />
<br />
protected void invoke(EventListener listener, Event event) {<br />
((EventListener.ScannedRobot) listener).notifyScannedRobot(<br />
(ScannedRobotEvent) event<br />
);<br />
}<br />
});<br />
<br />
// skipped turn<br />
_invokers.put(EventListener.SkippedTurn.class, new Invoker() {<br />
protected boolean consumesEvent(Event event) {<br />
return event instanceof SkippedTurnEvent;<br />
}<br />
<br />
protected void invoke(EventListener listener, Event event) {<br />
((EventListener.SkippedTurn) listener).notifySkippedTurn(<br />
(SkippedTurnEvent) event<br />
);<br />
}<br />
});<br />
<br />
// status<br />
_invokers.put(EventListener.Status.class, new Invoker() {<br />
protected boolean consumesEvent(Event event) {<br />
return event instanceof StatusEvent;<br />
}<br />
<br />
protected void invoke(EventListener listener, Event event) {<br />
((EventListener.Status) listener).notifyStatus(<br />
(StatusEvent) event<br />
);<br />
}<br />
});<br />
<br />
// win<br />
_invokers.put(EventListener.Win.class, new Invoker() {<br />
protected boolean consumesEvent(Event event) {<br />
return event instanceof WinEvent;<br />
}<br />
<br />
protected void invoke(EventListener listener, Event event) {<br />
((EventListener.Win) listener).notifyWin((WinEvent) event);<br />
}<br />
});<br />
}<br />
<br />
<br />
private ArrayList<EventListener> _listeners =<br />
new ArrayList<EventListener>();<br />
private PaintEvent _lastPaintEvent = null;<br />
<br />
public ListenerDelegate() {<br />
register(this); // register itself for the PaintEvent<br />
}<br />
<br />
/**<br />
* Register a new EventListener.<br />
*/<br />
public void register(EventListener listener) {<br />
_listeners.add(listener);<br />
}<br />
<br />
/**<br />
* Hand out event notifications to the EventListeners. <br />
*/<br />
public void processEvents(List<Event> events) {<br />
// Notify listeners in the order they were registered<br />
for (EventListener listener : _listeners) {<br />
Class[] interfaces = listener.getClass().getInterfaces();<br />
<br />
// Iterate the interfaces on each listener<br />
for (Class iface : interfaces) {<br />
// Skip if interface does not descend from EventListener<br />
if (!EventListener.class.isAssignableFrom(iface)) {<br />
continue;<br />
}<br />
<br />
// Get the invoker for this interface<br />
Invoker invoker = _invokers.get(iface);<br />
<br />
// Find the events this invoker consumes<br />
for (Event event : events) {<br />
// Skip if listener isn't interested in this kind of event<br />
if (!invoker.consumesEvent(event)) {<br />
continue;<br />
}<br />
<br />
// Notify the listener<br />
invoker.invoke(listener, event);<br />
}<br />
}<br />
}<br />
}<br />
<br />
/**<br />
* Called by a special internal EventListener to handle PaintEvents.<br />
*/<br />
@Override<br />
public void notifyPaint(PaintEvent event) {<br />
_lastPaintEvent = event;<br />
}<br />
<br />
/**<br />
* Returns the most recently received PaintEvent, or null if no PaintEvent<br />
* has been received.<br />
*/<br />
public PaintEvent getLastPaintEvent() {<br />
return _lastPaintEvent;<br />
}<br />
<br />
<br />
/**<br />
* An object that knows about a Robocode Event class and how to invoke its<br />
* corresponding EventListener.<br />
*/<br />
private static abstract class Invoker {<br />
protected abstract boolean consumesEvent(Event event);<br />
<br />
/**<br />
* Invokes the given EventListener, passing in a Robocode Event object.<br />
*/<br />
protected abstract void invoke(EventListener listener, Event event);<br />
}<br />
}<br />
</nowiki></pre><br />
<br />
== Math2.java ==<br />
<pre><nowiki><br />
/*<br />
* PluggableRobot, by Robert J. Walker<br />
* Home page: http://robowiki.net/w/index.php?title=PluggableRobot<br />
* This software is made available under the RoboWiki Limited Public Code<br />
* License (RWLPCL). The full text of the license may be found at:<br />
* http://robowiki.net/w/index.php?title=RWLPCL<br />
*/<br />
package rjw.pluggablerobot;<br />
<br />
import java.awt.geom.Point2D;<br />
import java.util.Random;<br />
<br />
import robocode.util.Utils;<br />
<br />
/**<br />
* Math utility class. Note that trig functions are reversed in order to provide<br />
* correct results for the Robocode coordinate system.<br />
* <br />
* @author Robert J. Walker<br />
*/<br />
public final class Math2 {<br />
public static final double PI_OVER_2 = Math.PI / 2;<br />
<br />
private static final Random random = new Random();<br />
<br />
private Math2() {<br />
}<br />
<br />
/**<br />
* Returns a random int between the min and max arguments, inclusive.<br />
*/<br />
public static int randomInteger(int min, int max) {<br />
return random.nextInt(max - min + 1) + min;<br />
}<br />
<br />
/**<br />
* If value is less than min, returns min. If value is greater than max,<br />
* returns max. Otherwise, returns value.<br />
*/<br />
public static double limit(double min, double value, double max) {<br />
return Math.max(min, Math.min(value, max));<br />
}<br />
<br />
/**<br />
* Adds the X and Y components of the given Point2D.Double objects and<br />
* returns a new Point2D.Double object with the result.<br />
*/<br />
public static Point2D.Double add(Point2D.Double point1,<br />
Point2D.Double point2) {<br />
return new Point2D.Double(point1.x + point2.x, point1.y + point2.y);<br />
}<br />
<br />
/**<br />
* Subtracts the X and Y components of the second given Point2D.Double<br />
* object from those of the first and returns a new Point2D.Double object<br />
* with the result.<br />
*/<br />
public static Point2D.Double subtract(Point2D.Double point1, Point2D.Double point2) {<br />
return new Point2D.Double(point1.x - point2.x, point1.y - point2.y);<br />
}<br />
<br />
/**<br />
* Returns the absolute bearing in radians from the given origin point to<br />
* the given target point.<br />
*/<br />
public static double getAbsoluteTargetBearing(Point2D.Double origin,<br />
Point2D.Double target) {<br />
return Utils.normalAbsoluteAngle(Math.atan2(target.x - origin.x,<br />
target.y - origin.y));<br />
}<br />
<br />
/**<br />
* Returns a Point2D.Double object indicating the relative position of an<br />
* object at the given angle (in radians) and distance from the origin.<br />
*/<br />
public static Point2D.Double getRelativePosition(double angle,<br />
double distance) {<br />
double dx = distance * Math.sin(angle);<br />
double dy = distance * Math.cos(angle);<br />
return new Point2D.Double(dx, dy);<br />
}<br />
<br />
/**<br />
* Returns a Point2D.Double object indicating the position of an object at<br />
* the given angle (in radians) and distance from the given origin point.<br />
*/<br />
public static Point2D.Double getAbsolutePosition(Point2D.Double origin,<br />
double angle, double distance) {<br />
double x = origin.x + distance * Math.sin(angle);<br />
double y = origin.y + distance * Math.cos(angle);<br />
return new Point2D.Double(x, y);<br />
}<br />
<br />
/**<br />
* Converts degrees to radians.<br />
*/<br />
public static double degToRad(double degrees) {<br />
return degrees * Math.PI / 180;<br />
}<br />
<br />
/**<br />
* Converts radians to degrees.<br />
*/<br />
public static double radToDeg(double radians) {<br />
return radians * 180 / Math.PI;<br />
}<br />
}<br />
</nowiki></pre><br />
<br />
== PluggableRobot.java ==<br />
<pre><nowiki><br />
/*<br />
* PluggableRobot, by Robert J. Walker<br />
* Home page: http://robowiki.net/w/index.php?title=PluggableRobot<br />
* This software is made available under the RoboWiki Limited Public Code<br />
* License (RWLPCL). The full text of the license may be found at:<br />
* http://robowiki.net/w/index.php?title=RWLPCL<br />
*/<br />
package rjw.pluggablerobot;<br />
<br />
import java.awt.Graphics2D;<br />
import java.awt.event.KeyEvent;<br />
import java.awt.event.MouseEvent;<br />
import java.awt.event.MouseWheelEvent;<br />
import java.awt.geom.Point2D;<br />
import java.util.ArrayList;<br />
<br />
import rjw.pluggablerobot.Hud.Painter;<br />
import robocode.*;<br />
<br />
/**<br />
* An abstract robot class that provides a pluggable architecture, sophisticated<br />
* event management and advanced debug graphics handling.<br />
* <br />
* @author Robert Walker<br />
*/<br />
public abstract class PluggableRobot extends AdvancedRobot {<br />
private static boolean _battleInitialized = false;<br />
private static Point2D.Double _center;<br />
<br />
private ListenerDelegate _listenerDelegate;<br />
private ArrayList<Component> _components = new ArrayList<Component>();<br />
private Hud _hud;<br />
<br />
public PluggableRobot() {<br />
_listenerDelegate = new ListenerDelegate();<br />
}<br />
<br />
/**<br />
* PluggableRobot's main execution loop. Rather that implementing run() in<br />
* your own robot, you will register listeners, components and painters in<br />
* the initRound() method, and those objects will handle your robot's combat<br />
* logic. This allows you to more easily separate concerns into separate<br />
* objects, and replace parts to change robot behavior. <br />
*/<br />
@Override<br />
public final void run() {<br />
// Initialize battle (at start of first round only)<br />
if (!_battleInitialized) {<br />
_center = new Point2D.Double(getWidth() / 2, getHeight() / 2);<br />
initBattle();<br />
_battleInitialized = true;<br />
}<br />
<br />
// Mechanism for capturing all events and handing them to the<br />
// ListenerDelegate. <br />
addCustomEvent(new Condition("eventManager") {<br />
public boolean test() {<br />
PluggableRobot.this.handleEvents();<br />
return false;<br />
}<br />
});<br />
<br />
// Initialize the Hud<br />
_hud = new Hud(this);<br />
registerListener(_hud);<br />
<br />
// Allow robot to initialize its parts<br />
initRound();<br />
<br />
// Main loop<br />
while (true) {<br />
// Let each component act<br />
for (Component component : _components) {<br />
component.go();<br />
}<br />
<br />
// Handle painting<br />
PaintEvent pe = _listenerDelegate.getLastPaintEvent();<br />
<br />
if (pe != null && pe.getTime() == getTime()) {<br />
_hud.paint(getTime());<br />
}<br />
<br />
execute();<br />
}<br />
}<br />
<br />
/**<br />
* Returns a Point2D object located at the exact center of the battlefield.<br />
*/<br />
public Point2D.Double getCenter() {<br />
return _center;<br />
}<br />
<br />
/**<br />
* Called by PluggableRobot at the start of a battle. Your implementation of<br />
* this method should perform whatever operations you wish to handle at the<br />
* start of a battle, such as setting tank colors and initializing memory<br />
* objects that will persist between rounds.<br />
*/<br />
protected abstract void initBattle();<br />
<br />
/**<br />
* Called by PluggableRobot at the start of each round. Your implementation<br />
* of this method should create Hud layers, register your robot's<br />
* EventListeners, Components and Painters, and perform any other operations<br />
* you wish to handle at the start of a round.<br />
*/<br />
protected abstract void initRound();<br />
<br />
/**<br />
* Registers an EventListener. Registration lasts until the end of the round<br />
* and enables the listener to receive event notifications.<br />
*/<br />
protected final void registerListener(EventListener listener) {<br />
_listenerDelegate.register(listener);<br />
}<br />
<br />
/**<br />
* Registers a Component. Registration lasts until the end of the round and<br />
* enables the Component to be notified when it is time to act.<br />
*/<br />
protected void registerComponent(Component component) {<br />
_components.add(component);<br />
}<br />
<br />
/**<br />
* Constructs a new Hud layer with the given name and bound to the indicated<br />
* key. The enabled argument determines whether or not the layer should<br />
* be on or off by default.<br />
*/<br />
protected void createLayer(int key, String name, boolean enabled) {<br />
_hud.createLayer(key, name, enabled);<br />
}<br />
<br />
/**<br />
* Registers a Painter and binds it to the layer corresponding to the given<br />
* key. Registration lasts until the end of the round and enables the<br />
* Painter to draw on a Hud layer when it's time to paint.<br />
*/<br />
protected void registerPainter(int key, Painter painter) {<br />
_hud.registerPainter(key, painter);<br />
}<br />
<br />
/**<br />
* Called by a custom event registered by PluggableRobot. This method hands<br />
* the event list to the ListenerDelegate, which will in turn notify the<br />
* EventListeners in the desired order.<br />
*/<br />
private void handleEvents() {<br />
_listenerDelegate.processEvents(getAllEvents());<br />
clearAllEvents();<br />
}<br />
<br />
/*<br />
* Since we've got our own event handling mechanism, we don't want to use<br />
* the existing one, so make these methods final.<br />
*/<br />
@Override<br />
public final void onBattleEnded(BattleEndedEvent event) {<br />
}<br />
<br />
@Override<br />
public final void onBulletHit(BulletHitEvent event) {<br />
}<br />
<br />
@Override<br />
public final void onBulletHitBullet(BulletHitBulletEvent event) {<br />
}<br />
<br />
@Override<br />
public final void onBulletMissed(BulletMissedEvent event) {<br />
}<br />
<br />
@Override<br />
public final void onCustomEvent(CustomEvent event) {<br />
}<br />
<br />
@Override<br />
public final void onDeath(DeathEvent event) {<br />
}<br />
<br />
@Override<br />
public final void onHitByBullet(HitByBulletEvent event) {<br />
}<br />
<br />
@Override<br />
public final void onHitRobot(HitRobotEvent event) {<br />
}<br />
<br />
@Override<br />
public final void onHitWall(HitWallEvent event) {<br />
}<br />
<br />
@Override<br />
public final void onKeyPressed(KeyEvent e) {<br />
}<br />
<br />
@Override<br />
public final void onKeyReleased(KeyEvent e) {<br />
}<br />
<br />
@Override<br />
public final void onKeyTyped(KeyEvent e) {<br />
}<br />
<br />
@Override<br />
public final void onMouseClicked(MouseEvent e) {<br />
}<br />
<br />
@Override<br />
public final void onMouseDragged(MouseEvent e) {<br />
}<br />
<br />
@Override<br />
public final void onMouseEntered(MouseEvent e) {<br />
}<br />
<br />
@Override<br />
public final void onMouseExited(MouseEvent e) {<br />
}<br />
<br />
@Override<br />
public final void onMouseMoved(MouseEvent e) {<br />
}<br />
<br />
@Override<br />
public final void onMousePressed(MouseEvent e) {<br />
}<br />
<br />
@Override<br />
public final void onMouseReleased(MouseEvent e) {<br />
}<br />
<br />
@Override<br />
public final void onMouseWheelMoved(MouseWheelEvent e) {<br />
}<br />
<br />
@Override<br />
public final void onPaint(Graphics2D g) {<br />
}<br />
<br />
@Override<br />
public final void onRobotDeath(RobotDeathEvent event) {<br />
}<br />
<br />
@Override<br />
public final void onScannedRobot(ScannedRobotEvent event) {<br />
}<br />
<br />
@Override<br />
public final void onSkippedTurn(SkippedTurnEvent event) {<br />
}<br />
<br />
@Override<br />
public final void onStatus(StatusEvent e) {<br />
}<br />
<br />
@Override<br />
public final void onWin(WinEvent event) {<br />
}<br />
}<br />
</nowiki></pre><br />
[[Category:Source Code|PluggableRobot/Source]]</div>RobertWalkerhttp://robowiki.net/w/index.php?title=Talk:Robocode/Graphical_Debugging&diff=6623Talk:Robocode/Graphical Debugging2009-05-14T16:05:21Z<p>RobertWalker: They're fixed already!</p>
<hr />
<div>Anybody else running into these two issues?<br />
<br />
* [http://sourceforge.net/tracker/?func=detail&aid=2791007&group_id=37202&atid=419486 FontMetrics StackOverflowError]<br />
* [http://sourceforge.net/tracker/?func=detail&aid=2791010&group_id=37202&atid=419486 Graphics2D.setFont() has no effect]<br />
<br />
[[User:RobertWalker|RobertWalker]] 04:01, 13 May 2009 (UTC)<br />
<br />
No, but I'm running into a different one. I just haven't taken the time to troubleshoot it and file a report yet.<br />
<pre><br />
java.nio.BufferOverflowException<br />
at java.nio.Buffer.nextPutIndex(Buffer.java:501)<br />
at java.nio.HeapByteBuffer.putInt(HeapByteBuffer.java:347)<br />
at net.sf.robocode.robotpaint.Graphics2DSerialized.put(Graphics2DSerialized.java:1760)<br />
at net.sf.robocode.robotpaint.Graphics2DSerialized.setColor(Graphics2DSerialized.java:204)<br />
at voidious.utils.RoboGraphic$Dot.render(RoboGraphic.java:45)<br />
at voidious.move.<CENSORED>.onPaint(<CENSORED>.java:390)<br />
at voidious.<CENSORED>.onPaint(<CENSORED>.java:103)<br />
at robocode.PaintEvent.dispatch(PaintEvent.java:61)<br />
at robocode.Event$HiddenEventHelper.dispatch(Event.java:249)<br />
at net.sf.robocode.security.HiddenAccess.dispatch(HiddenAccess.java:195)<br />
at net.sf.robocode.host.events.EventManager.dispatch(EventManager.java:486)<br />
at net.sf.robocode.host.events.EventManager.processEvents(EventManager.java:459)<br />
at net.sf.robocode.host.proxies.BasicRobotProxy.executeImpl(BasicRobotProxy.java:403)<br />
at net.sf.robocode.host.proxies.BasicRobotProxy.execute(BasicRobotProxy.java:119)<br />
at robocode.AdvancedRobot.execute(AdvancedRobot.java:565)<br />
at voidious.<CENSORED>.run(<CENSORED>.java:48)<br />
at net.sf.robocode.host.proxies.HostingRobotProxy.run(HostingRobotProxy.java:250)<br />
at java.lang.Thread.run(Thread.java:619)<br />
SYSTEM: Exception occurred on robocode.PaintEvent<br />
</pre><br />
I get this when I enable paint, but then if I restart the match, everything works and paints fine.<br />
--[[User:Voidious|Voidious]] 05:17, 13 May 2009 (UTC)<br />
<br />
I bet this is your new robot, isn't it? Or you need not to <CENSORED> =D I myself sometimes get BufferOverflowException, but I got it when DrawingBot overflow its renderables ArrayList. &raquo; <span style="font-size:0.9em;color:darkgreen;">[[User:Nat|Nat]] | [[User_talk:Nat|Talk]]</span> &raquo; 05:41, 13 May 2009 (UTC)<br />
<br />
: Actually I just like to use a lot of swear words in my development version class names. =) Just kidding. --[[User:Voidious|Voidious]] 14:22, 13 May 2009 (UTC)<br />
<br />
:: Then you will need to either use java obfuscater or rename them, along with its reference, to hide the swear words =D Come on, why it is so secret? &raquo; <span style="font-size:0.9em;color:darkgreen;">[[User:Nat|Nat]] | [[User_talk:Nat|Talk]]</span> &raquo; 14:32, 13 May 2009 (UTC)<br />
<br />
Wow, the two bugs I reported have already been fixed! I guess I'll see the fixes in the next version of Robocode. [[User:RobertWalker|RobertWalker]] 16:05, 14 May 2009 (UTC)</div>RobertWalkerhttp://robowiki.net/w/index.php?title=Talk:Robocode/Graphical_Debugging&diff=6520Talk:Robocode/Graphical Debugging2009-05-13T04:01:32Z<p>RobertWalker: Two graphics bugs</p>
<hr />
<div>Anybody else running into these two issues?<br />
<br />
* [http://sourceforge.net/tracker/?func=detail&aid=2791007&group_id=37202&atid=419486 FontMetrics StackOverflowError]<br />
* [http://sourceforge.net/tracker/?func=detail&aid=2791010&group_id=37202&atid=419486 Graphics2D.setFont() has no effect]<br />
<br />
[[User:RobertWalker|RobertWalker]] 04:01, 13 May 2009 (UTC)</div>RobertWalkerhttp://robowiki.net/w/index.php?title=Talk:PluggableRobot&diff=6513Talk:PluggableRobot2009-05-13T02:32:50Z<p>RobertWalker: /* Working on version 2.0 */ Thanks for the compliment!</p>
<hr />
<div>== Modularity is Popular ==<br />
<br />
I think all the big bots use something like this? I mean Shadow does, my (bigger) bots do, who else? Mine in particular handles paint and robot color functions, and in Genesis tracks time, data and properties loading. It overlays it own methods for onScannedRobot, handles the radar and does many many other things I mostly forgot about, and it all does this with the data from a interface called 'Constants' (meaning colors, propertie file name, property names and numbers, etc. --[[Chase-san]]<br />
<br />
It's not too surprising that the same people that enjoy programming for fun would also tend to build their bots with more modular designs, though some are certainly more "pluggable" than others. ([[Dookious]] is pretty clean code, IMO, but it would be easier to implement a new [[Wave]]-based gun than a new [[PatternMatching]] gun.) In addition to all the usual reasons for doing so (ie, in a profession), with Robocode it has the additional benefit of keeping me more motivated to work on my bots. [[PrairieWolf]] is a classic (one of the [[Ancients]]) that uses some kind of pluggable design for its [[MultiMode]] strategies. -- [[Voidious]]<br />
<br />
Yeah, it does not surprise me that modularity would be a popular topic. Here's a bit more about how PluggableRobot works. Basically, PluggableRobot allows you to register Listeners, Components and Painters.<br />
* I define a listener interface for each of the Robocode events, and any objects which implement the interfaces and register themselves with the bot will be notified of those events. The really nice thing is that PluggableRobot gives much better control over the order in which notifications are given; listeners are notified of events in the order that they are registered, and each listener gets the events in the order that the corresponding listener interfaces are declared. So a class with a declaration like <pre>public class MyClass implements EventListener.ScannedRobot, EventListener.Death</pre> will get notified of the ScannedRobotEvent *before* the DeathEvent. Pretty handy. All of this happens inside a custom event test as discussed on the [[EventManagement]] page. I don't actually make the robot do anything at this stage; this is just for data collection and processing.<br />
* Components are where I actually make the robot do stuff. Each component has a go() method that gets executed in the main loop of the robot. Like the event listeners, they get called in the order that they were registered.<br />
* Similarly, painters have a paint() method that gets called when it's time to paint debug graphics. In the onPaint() method on the robot I inject the Graphics2D object into a custom object I've created called the Hud, which takes care of icky stuff that Graphics2D expects, like downcasting (Is that a word?) from double to int, translating angles to degrees, etc.<br />
* Pluggable robot also defines initializeBattle() and initializeRound() methods.<br />
-- [[RobertWalker]]<br />
<br />
== Working on version 2.0 ==<br />
<br />
So I've been absent a long time, but I've been changing PluggableRobot some. Mainly because some changes to Robocode made it so PluggableRobot doesn't paint debug graphics anymore, and partly because I thought of some additional things I could do with it. When I'm finished, I'll update the source code on the wiki. [[User:RobertWalker|RobertWalker]] 15:36, 4 May 2009 (UTC)<br />
<br />
: I'm very pleased to know how many Robocoders that isn't forgot robocode already. Hoping the robocode community will be as active as the past. May I asked you to merge the DrawingBot and [[User:Nfwu/Painter]] to the PluggableRobot? It seem far more effective that your Hud. And can make the ListenerDelegate class warning-free with generic under java5? &raquo; <span style="font-size:0.9em;color:darkgreen;">[[User:Nat|Nat]] | [[User_talk:Nat|Talk]]</span> &raquo; 15:43, 4 May 2009 (UTC)<br />
<br />
:: Yeah, I was actually thinking about changing both of those things. I'm a little confused as to why exactly the ListenerDelegate is giving me the warnings; maybe you could enlighten me? Generics are awesome, but sometimes they give me migraines. I've tried various things to try to resolve it, but the warning either remains unchanged or I get a different one. As for the Hud class, I was planning on completely reworking that, but I didn't have any thoughts yet as to exactly how. I'll be sure to take a look at [[User:Nfwu/Painter]] and DrawingBot for ideas. Any other ideas for improvements while I'm at it? [[User:RobertWalker|RobertWalker]] 15:23, 5 May 2009 (UTC)<br />
<br />
::: I try to generic-ize you ListenerDelegate before, but I can't make it warningless. I have problem with some thing so if I generic-ize the Class<EventListener> and vice versa, I'll have an error in the processEvent() method so I revert to the non-generic version =( &raquo; <span style="font-size:0.9em;color:darkgreen;">[[User:Nat|Nat]] | [[User_talk:Nat|Talk]]</span> &raquo; 15:43, 5 May 2009 (UTC)<br />
<br />
:::: Well, the more I monkeyed around with it, the more I felt that generics were just making things unnecessarily complicated in this case. So I removed generics from the Invoker class, and changed it to have a consumesEvent(Event) method instead of an eventClass() method. This has cleared up all the warnings. The only bummer is that I lose some compile-time type checking, but the ListenerDelegate is built to ensure that the events get handed to the correct listeners in the first place, so I'm not terribly worried about it. Now to give it better painting support! [[User:RobertWalker|RobertWalker]] 17:38, 8 May 2009 (UTC)<br />
<br />
::::: Wow! Thanks! I usually do @SuppressWarnings("unchecked") though. &raquo; <span style="font-size:0.9em;color:darkgreen;">[[User:Nat|Nat]] | [[User_talk:Nat|Talk]]</span> &raquo; 17:54, 8 May 2009 (UTC)<br />
<br />
:::::: Yeah, I was considering that, but when I can, I prefer to solve warnings rather than ignore them. In any case, the code is easier to follow without the loads of generics stuff cluttering it up. Usually, generics make things simpler, but in this case.... Anyway, I'll post new source when I finish writing the other changes I'm working on. [[User:RobertWalker|RobertWalker]] 02:33, 9 May 2009 (UTC)<br />
<br />
I'm putting together the new debug graphics code. Like before, you register objects that are interested in drawing graphics with PluggableRobot, and they'll get invoked when it's time to paint. However, I'm also incorporating layering behavior similar to [[User:Nfwu/Painter]]. All debug code will be modularized for efficiency. For example, PluggableRobot will avoid wasting time on logic dealing with debug graphics if painting is disabled. It will also be easy to completely disable debugging code if you like before releasing your robot. (Although, if you release the source with it, it's also easy to turn it back on.)<br />
<br />
Some other things I'm planning on for the new PluggableRobot revision:<br />
<br />
* Some basic, optional components that could be used directly, extended, or used as example code for your own components. They would be things that a lot of robots would need anyway, like a data collection object or a 1-on-1 radar module.<br />
<br />
* A tweaking framework that would allow you to declare properties for your robot, then run a separate application that would test a range of different values for those properties and report on the results in combat. For example, let's say your robot has a property that controls the preferred distance your robot wishes to maintain from the enemy, and you'd like to figure out what the best value for this property would be. You'd configure the tweaking framework to test a range of values for this property, and then it would run a bunch of battles, storing the results in an database. When it was done, you could then run a viewer that would display the results with fancy graphs and such.<br />
<br />
I welcome your feedback. [[User:RobertWalker|RobertWalker]] 15:30, 11 May 2009 (UTC)<br />
<br />
Awesome! Actually I don't think it is easy to re-enabled it if you release the source code. =D<br />
<br />
* I'd suggest you do release a plain version without it and release its extension which doing those thing. Anyway, I think that thing will be used by only your own =P<br />
* I don't really get the point what you are going to do with that thing, really. Please explain more.<br />
<br />
&raquo; <span style="font-size:0.9em;color:darkgreen;">[[User:Nat|Nat]] | [[User_talk:Nat|Talk]]</span> &raquo; 15:48, 11 May 2009 (UTC)<br />
<br />
Okay, so when you're coding your bot, you will likely encounter places where you will create a constant. Let's say you need to set how many bins to use in your guess factor calculations. So you might write something like this:<br />
<br />
<pre>private static final int BINS = 25;</pre><br />
<br />
But how do you know that 25 is a good number of bins? How do you figure out what the optimal number of bins is for your robot? This is where the tweaking framework comes in. I haven't fully coded it yet, but it would look something like this. First, you'd replace the hard-coded 25 with something like this:<br />
<br />
<pre>private static final int BINS = Props.getInt("guessfactor.bins");</pre><br />
<br />
The Props class would statically load a properties file out of your data folder, which would contain a line like this:<br />
<br />
<pre>guessfactor.bins=25</pre><br />
<br />
So now it's time to run the tweaker program. It would give you a list of the robots in your library, and you'd select the one you want to tweak from the list. It would then read the properties file and auto-detect the possible types of each (boolean, int, double or String). So you'd select "guessfactor.bins" out of the list and select int as its type. You'd then provide a range of values to test. You want to have an odd number of bins (so that a bin always falls directly at 0.0), so you configure it to test values between, say, 7 and 49, incrementing by 2. You'd then select what robots you want it to fight against and how many rounds to fight each bot.<br />
<br />
Once you hit "Run", the program would back up your properties file, and write a new one with guessfactor.bins=7. It would then run battles between your bot and the others you selected, similar to RoboRumble, and store the results in memory. It would then increment guessfactor.bins to 9 and run the battles again, and continue in this way until it gets to 49.<br />
<br />
Once it has finished, it will write a report of the results to a file, and restore the backed up properties file. You can open this file in a viewer that will show you a fancy chart of your bot's performance over the different values and show you which one did best.<br />
<br />
What do you think? [[User:RobertWalker|RobertWalker]] 18:43, 11 May 2009 (UTC)<br />
<br />
: I think it sounds great. I (like many others, I'm sure) have wished I had something like this many times before. The only other instance I know of someone really trying to do this was with [[AgentSmith]] (not migrated yet), but I don't think he had much success nor ever released his code. You might be able to pull some stuff from [[RoboResearch]] for automating the battles, by the way. Good luck! --[[User:Voidious|Voidious]] 18:57, 11 May 2009 (UTC)<br />
<br />
: Great! I now understand. Hope I'll get it in .jar, not a brunch of .class files like [[RoboResearch]] :-) &raquo; <span style="font-size:0.9em;color:darkgreen;">[[User:Nat|Nat]] | [[User_talk:Nat|Talk]]</span> &raquo; 09:58, 12 May 2009 (UTC)<br />
<br />
Hi. I'm using your PluggableRobot to make a new bot (my old one was ds.OoV4 and was horribly coded) and, as a not so familiar with java developer, I've had some trouble getting the debug graphics to work.<br />
So here is my solution in case someone is in the same situation. I added this in OnBeforeEventsProcessed() : <br />
<pre>Vector<Event> events = getAllEvents();<br />
for(Event event : events)<br />
{<br />
if(!event.getClass().isAssignableFrom(PaintEvent.class))<br />
onPaint( getGraphics() );<br />
}</pre><br />
I guess adding an interface for the OnPaint event in the ListenerDelegate and registering the main class as a listener would work too btw.<br />
Anyway keep up the good work you've got a fan ;) --[[User:f4|f4]] 22:22, 11 May 2009 (UTC)<br />
<br />
:: Thank you for your kind words. The debug graphics weren't working because of a change to Robocode. I'm working on improvements to PluggableRobot and I currently have graphics drawing again, though there are still some problems that I'm shaking out. Once I've got things settled down, I'll post the updated source. [[User:RobertWalker|RobertWalker]] 02:32, 13 May 2009 (UTC)</div>RobertWalkerhttp://robowiki.net/w/index.php?title=Talk:PluggableRobot&diff=6459Talk:PluggableRobot2009-05-11T18:43:03Z<p>RobertWalker: /* Working on version 2.0 */ Explaining the tweaking framework</p>
<hr />
<div>== Modularity is Popular ==<br />
<br />
I think all the big bots use something like this? I mean Shadow does, my (bigger) bots do, who else? Mine in particular handles paint and robot color functions, and in Genesis tracks time, data and properties loading. It overlays it own methods for onScannedRobot, handles the radar and does many many other things I mostly forgot about, and it all does this with the data from a interface called 'Constants' (meaning colors, propertie file name, property names and numbers, etc. --[[Chase-san]]<br />
<br />
It's not too surprising that the same people that enjoy programming for fun would also tend to build their bots with more modular designs, though some are certainly more "pluggable" than others. ([[Dookious]] is pretty clean code, IMO, but it would be easier to implement a new [[Wave]]-based gun than a new [[PatternMatching]] gun.) In addition to all the usual reasons for doing so (ie, in a profession), with Robocode it has the additional benefit of keeping me more motivated to work on my bots. [[PrairieWolf]] is a classic (one of the [[Ancients]]) that uses some kind of pluggable design for its [[MultiMode]] strategies. -- [[Voidious]]<br />
<br />
Yeah, it does not surprise me that modularity would be a popular topic. Here's a bit more about how PluggableRobot works. Basically, PluggableRobot allows you to register Listeners, Components and Painters.<br />
* I define a listener interface for each of the Robocode events, and any objects which implement the interfaces and register themselves with the bot will be notified of those events. The really nice thing is that PluggableRobot gives much better control over the order in which notifications are given; listeners are notified of events in the order that they are registered, and each listener gets the events in the order that the corresponding listener interfaces are declared. So a class with a declaration like <pre>public class MyClass implements EventListener.ScannedRobot, EventListener.Death</pre> will get notified of the ScannedRobotEvent *before* the DeathEvent. Pretty handy. All of this happens inside a custom event test as discussed on the [[EventManagement]] page. I don't actually make the robot do anything at this stage; this is just for data collection and processing.<br />
* Components are where I actually make the robot do stuff. Each component has a go() method that gets executed in the main loop of the robot. Like the event listeners, they get called in the order that they were registered.<br />
* Similarly, painters have a paint() method that gets called when it's time to paint debug graphics. In the onPaint() method on the robot I inject the Graphics2D object into a custom object I've created called the Hud, which takes care of icky stuff that Graphics2D expects, like downcasting (Is that a word?) from double to int, translating angles to degrees, etc.<br />
* Pluggable robot also defines initializeBattle() and initializeRound() methods.<br />
-- [[RobertWalker]]<br />
<br />
== Working on version 2.0 ==<br />
<br />
So I've been absent a long time, but I've been changing PluggableRobot some. Mainly because some changes to Robocode made it so PluggableRobot doesn't paint debug graphics anymore, and partly because I thought of some additional things I could do with it. When I'm finished, I'll update the source code on the wiki. [[User:RobertWalker|RobertWalker]] 15:36, 4 May 2009 (UTC)<br />
<br />
: I'm very pleased to know how many Robocoders that isn't forgot robocode already. Hoping the robocode community will be as active as the past. May I asked you to merge the DrawingBot and [[User:Nfwu/Painter]] to the PluggableRobot? It seem far more effective that your Hud. And can make the ListenerDelegate class warning-free with generic under java5? &raquo; <span style="font-size:0.9em;color:darkgreen;">[[User:Nat|Nat]] | [[User_talk:Nat|Talk]]</span> &raquo; 15:43, 4 May 2009 (UTC)<br />
<br />
:: Yeah, I was actually thinking about changing both of those things. I'm a little confused as to why exactly the ListenerDelegate is giving me the warnings; maybe you could enlighten me? Generics are awesome, but sometimes they give me migraines. I've tried various things to try to resolve it, but the warning either remains unchanged or I get a different one. As for the Hud class, I was planning on completely reworking that, but I didn't have any thoughts yet as to exactly how. I'll be sure to take a look at [[User:Nfwu/Painter]] and DrawingBot for ideas. Any other ideas for improvements while I'm at it? [[User:RobertWalker|RobertWalker]] 15:23, 5 May 2009 (UTC)<br />
<br />
::: I try to generic-ize you ListenerDelegate before, but I can't make it warningless. I have problem with some thing so if I generic-ize the Class<EventListener> and vice versa, I'll have an error in the processEvent() method so I revert to the non-generic version =( &raquo; <span style="font-size:0.9em;color:darkgreen;">[[User:Nat|Nat]] | [[User_talk:Nat|Talk]]</span> &raquo; 15:43, 5 May 2009 (UTC)<br />
<br />
:::: Well, the more I monkeyed around with it, the more I felt that generics were just making things unnecessarily complicated in this case. So I removed generics from the Invoker class, and changed it to have a consumesEvent(Event) method instead of an eventClass() method. This has cleared up all the warnings. The only bummer is that I lose some compile-time type checking, but the ListenerDelegate is built to ensure that the events get handed to the correct listeners in the first place, so I'm not terribly worried about it. Now to give it better painting support! [[User:RobertWalker|RobertWalker]] 17:38, 8 May 2009 (UTC)<br />
<br />
::::: Wow! Thanks! I usually do @SuppressWarnings("unchecked") though. &raquo; <span style="font-size:0.9em;color:darkgreen;">[[User:Nat|Nat]] | [[User_talk:Nat|Talk]]</span> &raquo; 17:54, 8 May 2009 (UTC)<br />
<br />
:::::: Yeah, I was considering that, but when I can, I prefer to solve warnings rather than ignore them. In any case, the code is easier to follow without the loads of generics stuff cluttering it up. Usually, generics make things simpler, but in this case.... Anyway, I'll post new source when I finish writing the other changes I'm working on. [[User:RobertWalker|RobertWalker]] 02:33, 9 May 2009 (UTC)<br />
<br />
I'm putting together the new debug graphics code. Like before, you register objects that are interested in drawing graphics with PluggableRobot, and they'll get invoked when it's time to paint. However, I'm also incorporating layering behavior similar to [[User:Nfwu/Painter]]. All debug code will be modularized for efficiency. For example, PluggableRobot will avoid wasting time on logic dealing with debug graphics if painting is disabled. It will also be easy to completely disable debugging code if you like before releasing your robot. (Although, if you release the source with it, it's also easy to turn it back on.)<br />
<br />
Some other things I'm planning on for the new PluggableRobot revision:<br />
<br />
* Some basic, optional components that could be used directly, extended, or used as example code for your own components. They would be things that a lot of robots would need anyway, like a data collection object or a 1-on-1 radar module.<br />
<br />
* A tweaking framework that would allow you to declare properties for your robot, then run a separate application that would test a range of different values for those properties and report on the results in combat. For example, let's say your robot has a property that controls the preferred distance your robot wishes to maintain from the enemy, and you'd like to figure out what the best value for this property would be. You'd configure the tweaking framework to test a range of values for this property, and then it would run a bunch of battles, storing the results in an database. When it was done, you could then run a viewer that would display the results with fancy graphs and such.<br />
<br />
I welcome your feedback. [[User:RobertWalker|RobertWalker]] 15:30, 11 May 2009 (UTC)<br />
<br />
Awesome! Actually I don't think it is easy to re-enabled it if you release the source code. =D<br />
<br />
* I'd suggest you do release a plain version without it and release its extension which doing those thing. Anyway, I think that thing will be used by only your own =P<br />
* I don't really get the point what you are going to do with that thing, really. Please explain more.<br />
<br />
&raquo; <span style="font-size:0.9em;color:darkgreen;">[[User:Nat|Nat]] | [[User_talk:Nat|Talk]]</span> &raquo; 15:48, 11 May 2009 (UTC)<br />
<br />
Okay, so when you're coding your bot, you will likely encounter places where you will create a constant. Let's say you need to set how many bins to use in your guess factor calculations. So you might write something like this:<br />
<br />
<pre>private static final int BINS = 25;</pre><br />
<br />
But how do you know that 25 is a good number of bins? How do you figure out what the optimal number of bins is for your robot? This is where the tweaking framework comes in. I haven't fully coded it yet, but it would look something like this. First, you'd replace the hard-coded 25 with something like this:<br />
<br />
<pre>private static final int BINS = Props.getInt("guessfactor.bins");</pre><br />
<br />
The Props class would statically load a properties file out of your data folder, which would contain a line like this:<br />
<br />
<pre>guessfactor.bins=25</pre><br />
<br />
So now it's time to run the tweaker program. It would give you a list of the robots in your library, and you'd select the one you want to tweak from the list. It would then read the properties file and auto-detect the possible types of each (boolean, int, double or String). So you'd select "guessfactor.bins" out of the list and select int as its type. You'd then provide a range of values to test. You want to have an odd number of bins (so that a bin always falls directly at 0.0), so you configure it to test values between, say, 7 and 49, incrementing by 2. You'd then select what robots you want it to fight against and how many rounds to fight each bot.<br />
<br />
Once you hit "Run", the program would back up your properties file, and write a new one with guessfactor.bins=7. It would then run battles between your bot and the others you selected, similar to RoboRumble, and store the results in memory. It would then increment guessfactor.bins to 9 and run the battles again, and continue in this way until it gets to 49.<br />
<br />
Once it has finished, it will write a report of the results to a file, and restore the backed up properties file. You can open this file in a viewer that will show you a fancy chart of your bot's performance over the different values and show you which one did best.<br />
<br />
What do you think? [[User:RobertWalker|RobertWalker]] 18:43, 11 May 2009 (UTC)</div>RobertWalkerhttp://robowiki.net/w/index.php?title=Talk:PluggableRobot&diff=6443Talk:PluggableRobot2009-05-11T15:30:33Z<p>RobertWalker: Progress and plans for PluggableRobot</p>
<hr />
<div>== Modularity is Popular ==<br />
<br />
I think all the big bots use something like this? I mean Shadow does, my (bigger) bots do, who else? Mine in particular handles paint and robot color functions, and in Genesis tracks time, data and properties loading. It overlays it own methods for onScannedRobot, handles the radar and does many many other things I mostly forgot about, and it all does this with the data from a interface called 'Constants' (meaning colors, propertie file name, property names and numbers, etc. --[[Chase-san]]<br />
<br />
It's not too surprising that the same people that enjoy programming for fun would also tend to build their bots with more modular designs, though some are certainly more "pluggable" than others. ([[Dookious]] is pretty clean code, IMO, but it would be easier to implement a new [[Wave]]-based gun than a new [[PatternMatching]] gun.) In addition to all the usual reasons for doing so (ie, in a profession), with Robocode it has the additional benefit of keeping me more motivated to work on my bots. [[PrairieWolf]] is a classic (one of the [[Ancients]]) that uses some kind of pluggable design for its [[MultiMode]] strategies. -- [[Voidious]]<br />
<br />
Yeah, it does not surprise me that modularity would be a popular topic. Here's a bit more about how PluggableRobot works. Basically, PluggableRobot allows you to register Listeners, Components and Painters.<br />
* I define a listener interface for each of the Robocode events, and any objects which implement the interfaces and register themselves with the bot will be notified of those events. The really nice thing is that PluggableRobot gives much better control over the order in which notifications are given; listeners are notified of events in the order that they are registered, and each listener gets the events in the order that the corresponding listener interfaces are declared. So a class with a declaration like <pre>public class MyClass implements EventListener.ScannedRobot, EventListener.Death</pre> will get notified of the ScannedRobotEvent *before* the DeathEvent. Pretty handy. All of this happens inside a custom event test as discussed on the [[EventManagement]] page. I don't actually make the robot do anything at this stage; this is just for data collection and processing.<br />
* Components are where I actually make the robot do stuff. Each component has a go() method that gets executed in the main loop of the robot. Like the event listeners, they get called in the order that they were registered.<br />
* Similarly, painters have a paint() method that gets called when it's time to paint debug graphics. In the onPaint() method on the robot I inject the Graphics2D object into a custom object I've created called the Hud, which takes care of icky stuff that Graphics2D expects, like downcasting (Is that a word?) from double to int, translating angles to degrees, etc.<br />
* Pluggable robot also defines initializeBattle() and initializeRound() methods.<br />
-- [[RobertWalker]]<br />
<br />
== Working on version 2.0 ==<br />
<br />
So I've been absent a long time, but I've been changing PluggableRobot some. Mainly because some changes to Robocode made it so PluggableRobot doesn't paint debug graphics anymore, and partly because I thought of some additional things I could do with it. When I'm finished, I'll update the source code on the wiki. [[User:RobertWalker|RobertWalker]] 15:36, 4 May 2009 (UTC)<br />
<br />
: I'm very pleased to know how many Robocoders that isn't forgot robocode already. Hoping the robocode community will be as active as the past. May I asked you to merge the DrawingBot and [[User:Nfwu/Painter]] to the PluggableRobot? It seem far more effective that your Hud. And can make the ListenerDelegate class warning-free with generic under java5? &raquo; <span style="font-size:0.9em;color:darkgreen;">[[User:Nat|Nat]] | [[User_talk:Nat|Talk]]</span> &raquo; 15:43, 4 May 2009 (UTC)<br />
<br />
:: Yeah, I was actually thinking about changing both of those things. I'm a little confused as to why exactly the ListenerDelegate is giving me the warnings; maybe you could enlighten me? Generics are awesome, but sometimes they give me migraines. I've tried various things to try to resolve it, but the warning either remains unchanged or I get a different one. As for the Hud class, I was planning on completely reworking that, but I didn't have any thoughts yet as to exactly how. I'll be sure to take a look at [[User:Nfwu/Painter]] and DrawingBot for ideas. Any other ideas for improvements while I'm at it? [[User:RobertWalker|RobertWalker]] 15:23, 5 May 2009 (UTC)<br />
<br />
::: I try to generic-ize you ListenerDelegate before, but I can't make it warningless. I have problem with some thing so if I generic-ize the Class<EventListener> and vice versa, I'll have an error in the processEvent() method so I revert to the non-generic version =( &raquo; <span style="font-size:0.9em;color:darkgreen;">[[User:Nat|Nat]] | [[User_talk:Nat|Talk]]</span> &raquo; 15:43, 5 May 2009 (UTC)<br />
<br />
:::: Well, the more I monkeyed around with it, the more I felt that generics were just making things unnecessarily complicated in this case. So I removed generics from the Invoker class, and changed it to have a consumesEvent(Event) method instead of an eventClass() method. This has cleared up all the warnings. The only bummer is that I lose some compile-time type checking, but the ListenerDelegate is built to ensure that the events get handed to the correct listeners in the first place, so I'm not terribly worried about it. Now to give it better painting support! [[User:RobertWalker|RobertWalker]] 17:38, 8 May 2009 (UTC)<br />
<br />
::::: Wow! Thanks! I usually do @SuppressWarnings("unchecked") though. &raquo; <span style="font-size:0.9em;color:darkgreen;">[[User:Nat|Nat]] | [[User_talk:Nat|Talk]]</span> &raquo; 17:54, 8 May 2009 (UTC)<br />
<br />
:::::: Yeah, I was considering that, but when I can, I prefer to solve warnings rather than ignore them. In any case, the code is easier to follow without the loads of generics stuff cluttering it up. Usually, generics make things simpler, but in this case.... Anyway, I'll post new source when I finish writing the other changes I'm working on. [[User:RobertWalker|RobertWalker]] 02:33, 9 May 2009 (UTC)<br />
<br />
I'm putting together the new debug graphics code. Like before, you register objects that are interested in drawing graphics with PluggableRobot, and they'll get invoked when it's time to paint. However, I'm also incorporating layering behavior similar to [[User:Nfwu/Painter]]. All debug code will be modularized for efficiency. For example, PluggableRobot will avoid wasting time on logic dealing with debug graphics if painting is disabled. It will also be easy to completely disable debugging code if you like before releasing your robot. (Although, if you release the source with it, it's also easy to turn it back on.)<br />
<br />
Some other things I'm planning on for the new PluggableRobot revision:<br />
<br />
* Some basic, optional components that could be used directly, extended, or used as example code for your own components. They would be things that a lot of robots would need anyway, like a data collection object or a 1-on-1 radar module.<br />
<br />
* A tweaking framework that would allow you to declare properties for your robot, then run a separate application that would test a range of different values for those properties and report on the results in combat. For example, let's say your robot has a property that controls the preferred distance your robot wishes to maintain from the enemy, and you'd like to figure out what the best value for this property would be. You'd configure the tweaking framework to test a range of values for this property, and then it would run a bunch of battles, storing the results in an database. When it was done, you could then run a viewer that would display the results with fancy graphs and such.<br />
<br />
I welcome your feedback. [[User:RobertWalker|RobertWalker]] 15:30, 11 May 2009 (UTC)</div>RobertWalkerhttp://robowiki.net/w/index.php?title=Talk:PluggableRobot&diff=6369Talk:PluggableRobot2009-05-09T02:33:25Z<p>RobertWalker: ListenerDelegate changes</p>
<hr />
<div>I think all the big bots use something like this? I mean Shadow does, my (bigger) bots do, who else? Mine in particular handles paint and robot color functions, and in Genesis tracks time, data and properties loading. It overlays it own methods for onScannedRobot, handles the radar and does many many other things I mostly forgot about, and it all does this with the data from a interface called 'Constants' (meaning colors, propertie file name, property names and numbers, etc. --[[Chase-san]]<br />
<br />
It's not too surprising that the same people that enjoy programming for fun would also tend to build their bots with more modular designs, though some are certainly more "pluggable" than others. ([[Dookious]] is pretty clean code, IMO, but it would be easier to implement a new [[Wave]]-based gun than a new [[PatternMatching]] gun.) In addition to all the usual reasons for doing so (ie, in a profession), with Robocode it has the additional benefit of keeping me more motivated to work on my bots. [[PrairieWolf]] is a classic (one of the [[Ancients]]) that uses some kind of pluggable design for its [[MultiMode]] strategies. -- [[Voidious]]<br />
<br />
Yeah, it does not surprise me that modularity would be a popular topic. Here's a bit more about how PluggableRobot works. Basically, PluggableRobot allows you to register Listeners, Components and Painters.<br />
* I define a listener interface for each of the Robocode events, and any objects which implement the interfaces and register themselves with the bot will be notified of those events. The really nice thing is that PluggableRobot gives much better control over the order in which notifications are given; listeners are notified of events in the order that they are registered, and each listener gets the events in the order that the corresponding listener interfaces are declared. So a class with a declaration like <pre>public class MyClass implements EventListener.ScannedRobot, EventListener.Death</pre> will get notified of the ScannedRobotEvent *before* the DeathEvent. Pretty handy. All of this happens inside a custom event test as discussed on the [[EventManagement]] page. I don't actually make the robot do anything at this stage; this is just for data collection and processing.<br />
* Components are where I actually make the robot do stuff. Each component has a go() method that gets executed in the main loop of the robot. Like the event listeners, they get called in the order that they were registered.<br />
* Similarly, painters have a paint() method that gets called when it's time to paint debug graphics. In the onPaint() method on the robot I inject the Graphics2D object into a custom object I've created called the Hud, which takes care of icky stuff that Graphics2D expects, like downcasting (Is that a word?) from double to int, translating angles to degrees, etc.<br />
* Pluggable robot also defines initializeBattle() and initializeRound() methods.<br />
-- [[RobertWalker]]<br />
<br />
----<br />
<br />
So I've been absent a long time, but I've been changing PluggableRobot some. Mainly because some changes to Robocode made it so PluggableRobot doesn't paint debug graphics anymore, and partly because I thought of some additional things I could do with it. When I'm finished, I'll update the source code on the wiki. [[User:RobertWalker|RobertWalker]] 15:36, 4 May 2009 (UTC)<br />
<br />
: I'm very pleased to know how many Robocoders that isn't forgot robocode already. Hoping the robocode community will be as active as the past. May I asked you to merge the DrawingBot and [[User:Nfwu/Painter]] to the PluggableRobot? It seem far more effective that your Hud. And can make the ListenerDelegate class warning-free with generic under java5? &raquo; <span style="font-size:0.9em;color:darkgreen;">[[User:Nat|Nat]] | [[User_talk:Nat|Talk]]</span> &raquo; 15:43, 4 May 2009 (UTC)<br />
<br />
:: Yeah, I was actually thinking about changing both of those things. I'm a little confused as to why exactly the ListenerDelegate is giving me the warnings; maybe you could enlighten me? Generics are awesome, but sometimes they give me migraines. I've tried various things to try to resolve it, but the warning either remains unchanged or I get a different one. As for the Hud class, I was planning on completely reworking that, but I didn't have any thoughts yet as to exactly how. I'll be sure to take a look at [[User:Nfwu/Painter]] and DrawingBot for ideas. Any other ideas for improvements while I'm at it? [[User:RobertWalker|RobertWalker]] 15:23, 5 May 2009 (UTC)<br />
<br />
::: I try to generic-ize you ListenerDelegate before, but I can't make it warningless. I have problem with some thing so if I generic-ize the Class<EventListener> and vice versa, I'll have an error in the processEvent() method so I revert to the non-generic version =( &raquo; <span style="font-size:0.9em;color:darkgreen;">[[User:Nat|Nat]] | [[User_talk:Nat|Talk]]</span> &raquo; 15:43, 5 May 2009 (UTC)<br />
<br />
:::: Well, the more I monkeyed around with it, the more I felt that generics were just making things unnecessarily complicated in this case. So I removed generics from the Invoker class, and changed it to have a consumesEvent(Event) method instead of an eventClass() method. This has cleared up all the warnings. The only bummer is that I lose some compile-time type checking, but the ListenerDelegate is built to ensure that the events get handed to the correct listeners in the first place, so I'm not terribly worried about it. Now to give it better painting support! [[User:RobertWalker|RobertWalker]] 17:38, 8 May 2009 (UTC)<br />
<br />
::::: Wow! Thanks! I usually do @SuppressWarnings("unchecked") though. &raquo; <span style="font-size:0.9em;color:darkgreen;">[[User:Nat|Nat]] | [[User_talk:Nat|Talk]]</span> &raquo; 17:54, 8 May 2009 (UTC)<br />
<br />
:::::: Yeah, I was considering that, but when I can, I prefer to solve warnings rather than ignore them. In any case, the code is easier to follow without the loads of generics stuff cluttering it up. Usually, generics make things simpler, but in this case.... Anyway, I'll post new source when I finish writing the other changes I'm working on. [[User:RobertWalker|RobertWalker]] 02:33, 9 May 2009 (UTC)</div>RobertWalkerhttp://robowiki.net/w/index.php?title=Talk:PluggableRobot&diff=6358Talk:PluggableRobot2009-05-08T17:38:16Z<p>RobertWalker: Generics made things too complicated.</p>
<hr />
<div>I think all the big bots use something like this? I mean Shadow does, my (bigger) bots do, who else? Mine in particular handles paint and robot color functions, and in Genesis tracks time, data and properties loading. It overlays it own methods for onScannedRobot, handles the radar and does many many other things I mostly forgot about, and it all does this with the data from a interface called 'Constants' (meaning colors, propertie file name, property names and numbers, etc. --[[Chase-san]]<br />
<br />
It's not too surprising that the same people that enjoy programming for fun would also tend to build their bots with more modular designs, though some are certainly more "pluggable" than others. ([[Dookious]] is pretty clean code, IMO, but it would be easier to implement a new [[Wave]]-based gun than a new [[PatternMatching]] gun.) In addition to all the usual reasons for doing so (ie, in a profession), with Robocode it has the additional benefit of keeping me more motivated to work on my bots. [[PrairieWolf]] is a classic (one of the [[Ancients]]) that uses some kind of pluggable design for its [[MultiMode]] strategies. -- [[Voidious]]<br />
<br />
Yeah, it does not surprise me that modularity would be a popular topic. Here's a bit more about how PluggableRobot works. Basically, PluggableRobot allows you to register Listeners, Components and Painters.<br />
* I define a listener interface for each of the Robocode events, and any objects which implement the interfaces and register themselves with the bot will be notified of those events. The really nice thing is that PluggableRobot gives much better control over the order in which notifications are given; listeners are notified of events in the order that they are registered, and each listener gets the events in the order that the corresponding listener interfaces are declared. So a class with a declaration like <pre>public class MyClass implements EventListener.ScannedRobot, EventListener.Death</pre> will get notified of the ScannedRobotEvent *before* the DeathEvent. Pretty handy. All of this happens inside a custom event test as discussed on the [[EventManagement]] page. I don't actually make the robot do anything at this stage; this is just for data collection and processing.<br />
* Components are where I actually make the robot do stuff. Each component has a go() method that gets executed in the main loop of the robot. Like the event listeners, they get called in the order that they were registered.<br />
* Similarly, painters have a paint() method that gets called when it's time to paint debug graphics. In the onPaint() method on the robot I inject the Graphics2D object into a custom object I've created called the Hud, which takes care of icky stuff that Graphics2D expects, like downcasting (Is that a word?) from double to int, translating angles to degrees, etc.<br />
* Pluggable robot also defines initializeBattle() and initializeRound() methods.<br />
-- [[RobertWalker]]<br />
<br />
----<br />
<br />
So I've been absent a long time, but I've been changing PluggableRobot some. Mainly because some changes to Robocode made it so PluggableRobot doesn't paint debug graphics anymore, and partly because I thought of some additional things I could do with it. When I'm finished, I'll update the source code on the wiki. [[User:RobertWalker|RobertWalker]] 15:36, 4 May 2009 (UTC)<br />
<br />
: I'm very pleased to know how many Robocoders that isn't forgot robocode already. Hoping the robocode community will be as active as the past. May I asked you to merge the DrawingBot and [[User:Nfwu/Painter]] to the PluggableRobot? It seem far more effective that your Hud. And can make the ListenerDelegate class warning-free with generic under java5? &raquo; <span style="font-size:0.9em;color:darkgreen;">[[User:Nat|Nat]] | [[User_talk:Nat|Talk]]</span> &raquo; 15:43, 4 May 2009 (UTC)<br />
<br />
:: Yeah, I was actually thinking about changing both of those things. I'm a little confused as to why exactly the ListenerDelegate is giving me the warnings; maybe you could enlighten me? Generics are awesome, but sometimes they give me migraines. I've tried various things to try to resolve it, but the warning either remains unchanged or I get a different one. As for the Hud class, I was planning on completely reworking that, but I didn't have any thoughts yet as to exactly how. I'll be sure to take a look at [[User:Nfwu/Painter]] and DrawingBot for ideas. Any other ideas for improvements while I'm at it? [[User:RobertWalker|RobertWalker]] 15:23, 5 May 2009 (UTC)<br />
<br />
::: I try to generic-ize you ListenerDelegate before, but I can't make it warningless. I have problem with some thing so if I generic-ize the Class<EventListener> and vice versa, I'll have an error in the processEvent() method so I revert to the non-generic version =( &raquo; <span style="font-size:0.9em;color:darkgreen;">[[User:Nat|Nat]] | [[User_talk:Nat|Talk]]</span> &raquo; 15:43, 5 May 2009 (UTC)<br />
<br />
:::: Well, the more I monkeyed around with it, the more I felt that generics were just making things unnecessarily complicated in this case. So I removed generics from the ListenerDelegate.Invoker class, and changed it to have a consumesEvent(Event) method instead of an eventClass() method. This has cleared up all the warnings. The only bummer is that I lose some compile-time type checking, but the ListenerDelegate is built to ensure that the events get handed to the correct listeners in the first place, so I'm not terribly worried about it. Now to give it better painting support! [[User:RobertWalker|RobertWalker]] 17:38, 8 May 2009 (UTC)</div>RobertWalkerhttp://robowiki.net/w/index.php?title=User:RobertWalker&diff=6201User:RobertWalker2009-05-05T15:31:31Z<p>RobertWalker: Event management page link</p>
<hr />
<div>== Background ==<br />
I'm (current year - 1977) years old and work as a software developer in Salt Lake City, Utah. Started robocoding in 2007 after a co-worker suggested having a Robocode tournament at work after a long, painful software release cycle. Apparently, I was more interested than the rest of the company; the bot I built (and am still working on in my copious spare time) seems to have scared everyone else off. I have a [http://robert.walkertribe.com fledgling blog] to which I (very) occasionally post.<br />
<br />
== My bots ==<br />
* '''[[PluggableRobot]]''': A robot framework that provides a pluggable architecture and sophisticated [[Event Management|event management]].<br />
* '''[[RabidWombat]]''': My first robot, built on top of the [[PluggableRobot]] framework. A bit too rough yet to release into the wild.<br />
<br />
== .plan ==<br />
So, um, yeah, it's been far too long since I worked on coding tanks. I'm making some improvements to PluggableRobot, such as reworking the debug graphics code (especially since changes to Robocode made it stop working). After that, I need to dig into why RabidWombat isn't firing where it thinks it's firing.<br />
<br />
[[Category:Bot Authors|RobertWalker]]</div>RobertWalkerhttp://robowiki.net/w/index.php?title=User:RobertWalker&diff=6200User:RobertWalker2009-05-05T15:31:00Z<p>RobertWalker: Updated .plan</p>
<hr />
<div>== Background ==<br />
I'm (current year - 1977) years old and work as a software developer in Salt Lake City, Utah. Started robocoding in 2007 after a co-worker suggested having a Robocode tournament at work after a long, painful software release cycle. Apparently, I was more interested than the rest of the company; the bot I built (and am still working on in my copious spare time) seems to have scared everyone else off. I have a [http://robert.walkertribe.com fledgling blog] to which I (very) occasionally post.<br />
<br />
== My bots ==<br />
* '''[[PluggableRobot]]''': A robot framework that provides a pluggable architecture and sophisticated [[EventManagement|event management]].<br />
* '''[[RabidWombat]]''': My first robot, built on top of the [[PluggableRobot]] framework. A bit too rough yet to release into the wild.<br />
<br />
== .plan ==<br />
So, um, yeah, it's been far too long since I worked on coding tanks. I'm making some improvements to PluggableRobot, such as reworking the debug graphics code (especially since changes to Robocode made it stop working). After that, I need to dig into why RabidWombat isn't firing where it thinks it's firing.<br />
<br />
[[Category:Bot Authors|RobertWalker]]</div>RobertWalkerhttp://robowiki.net/w/index.php?title=Talk:PluggableRobot&diff=6197Talk:PluggableRobot2009-05-05T15:23:57Z<p>RobertWalker: Thanks for the suggestions!</p>
<hr />
<div>I think all the big bots use something like this? I mean Shadow does, my (bigger) bots do, who else? Mine in particular handles paint and robot color functions, and in Genesis tracks time, data and properties loading. It overlays it own methods for onScannedRobot, handles the radar and does many many other things I mostly forgot about, and it all does this with the data from a interface called 'Constants' (meaning colors, propertie file name, property names and numbers, etc. --[[Chase-san]]<br />
<br />
It's not too surprising that the same people that enjoy programming for fun would also tend to build their bots with more modular designs, though some are certainly more "pluggable" than others. ([[Dookious]] is pretty clean code, IMO, but it would be easier to implement a new [[Wave]]-based gun than a new [[PatternMatching]] gun.) In addition to all the usual reasons for doing so (ie, in a profession), with Robocode it has the additional benefit of keeping me more motivated to work on my bots. [[PrairieWolf]] is a classic (one of the [[Ancients]]) that uses some kind of pluggable design for its [[MultiMode]] strategies. -- [[Voidious]]<br />
<br />
Yeah, it does not surprise me that modularity would be a popular topic. Here's a bit more about how PluggableRobot works. Basically, PluggableRobot allows you to register Listeners, Components and Painters.<br />
* I define a listener interface for each of the Robocode events, and any objects which implement the interfaces and register themselves with the bot will be notified of those events. The really nice thing is that PluggableRobot gives much better control over the order in which notifications are given; listeners are notified of events in the order that they are registered, and each listener gets the events in the order that the corresponding listener interfaces are declared. So a class with a declaration like <pre>public class MyClass implements EventListener.ScannedRobot, EventListener.Death</pre> will get notified of the ScannedRobotEvent *before* the DeathEvent. Pretty handy. All of this happens inside a custom event test as discussed on the [[EventManagement]] page. I don't actually make the robot do anything at this stage; this is just for data collection and processing.<br />
* Components are where I actually make the robot do stuff. Each component has a go() method that gets executed in the main loop of the robot. Like the event listeners, they get called in the order that they were registered.<br />
* Similarly, painters have a paint() method that gets called when it's time to paint debug graphics. In the onPaint() method on the robot I inject the Graphics2D object into a custom object I've created called the Hud, which takes care of icky stuff that Graphics2D expects, like downcasting (Is that a word?) from double to int, translating angles to degrees, etc.<br />
* Pluggable robot also defines initializeBattle() and initializeRound() methods.<br />
-- [[RobertWalker]]<br />
<br />
----<br />
<br />
So I've been absent a long time, but I've been changing PluggableRobot some. Mainly because some changes to Robocode made it so PluggableRobot doesn't paint debug graphics anymore, and partly because I thought of some additional things I could do with it. When I'm finished, I'll update the source code on the wiki. [[User:RobertWalker|RobertWalker]] 15:36, 4 May 2009 (UTC)<br />
<br />
: I'm very pleased to know how many Robocoders that isn't forgot robocode already. Hoping the robocode community will be as active as the past. May I asked you to merge the DrawingBot and [[User:Nfwu/Painter]] to the PluggableRobot? It seem far more effective that your Hud. And can make the ListenerDelegate class warning-free with generic under java5? &raquo; <span style="font-size:0.9em;color:darkgreen;">[[User:Nat|Nat]] | [[User_talk:Nat|Talk]]</span> &raquo; 15:43, 4 May 2009 (UTC)<br />
<br />
:: Yeah, I was actually thinking about changing both of those things. I'm a little confused as to why exactly the ListenerDelegate is giving me the warnings; maybe you could enlighten me? Generics are awesome, but sometimes they give me migraines. I've tried various things to try to resolve it, but the warning either remains unchanged or I get a different one. As for the Hud class, I was planning on completely reworking that, but I didn't have any thoughts yet as to exactly how. I'll be sure to take a look at [[User:Nfwu/Painter]] and DrawingBot for ideas. Any other ideas for improvements while I'm at it? [[User:RobertWalker|RobertWalker]] 15:23, 5 May 2009 (UTC)</div>RobertWalkerhttp://robowiki.net/w/index.php?title=Talk:Anti-Gravity_Movement&diff=6133Talk:Anti-Gravity Movement2009-05-04T15:44:21Z<p>RobertWalker: /* HELP! */ Don't run *directly* away from bullets</p>
<hr />
<div>== HELP! ==<br />
<br />
I've worked really hard on a bot that simulates bullets and I've finished that part, and now I need to use Anti-Gravity movement with it. But I don't know how to do it! I've never done any complex movement before...<br />
--[[User:Awesomeness|Awesomeness]] 00:33, 4 May 2009 (UTC)<br />
<br />
This is where I started, several years ago: [http://www.ibm.com/developerworks/library/j-antigrav/index.html Secrets from the Robocode masters: Anti-gravity movement] --[[User:Darkcanuck|Darkcanuck]] 01:20, 4 May 2009 (UTC)<br />
<br />
: I don't get it, it's so complicated... Ugh. --[[User:Awesomeness|Awesomeness]] 01:54, 4 May 2009 (UTC)<br />
<br />
::Well, it's not that I don't know how it works, I just don't know how to change it so that the bullets are antigrav points. I understand it, but I don't know how to implemnent it.<br />
<br />
::: [[DustBunny]] is where I learned [[Anti-Gravity Movement]]. I think that [[Graviton]] is another good example, but I never read it code. &raquo; <span style="font-size:0.9em;color:darkgreen;">[[User:Nat|Nat]] | [[User_talk:Nat|Talk]]</span> &raquo; 12:10, 4 May 2009 (UTC)<br />
<br />
::: Using Google's cache feature, which saves pages, (The old robowiki just gives 404s now.) I've been able to look at Hanji's antigrav engine, and it's very clear. I think I'll even be able to make my own off this. --[[User:Awesomeness|Awesomeness]] 15:04, 4 May 2009 (UTC)<br />
<br />
:::: I was once use Hanji's antigrav engine. I cannot make it working so I start working on DustBunny prototype instead. But I don't blame it, just my experience, and I admit that it is very neat engine. And if you think you will visit the old wiki frequently, you may want to use your host file to point to the old wiki which I, [[User:Voidious|Voidious]] and probably some more used. (see [[Talk:Migration]], I can't remember which section is it in.) &raquo; <span style="font-size:0.9em;color:darkgreen;">[[User:Nat|Nat]] | [[User_talk:Nat|Talk]]</span> &raquo; 15:18, 4 May 2009 (UTC)<br />
<br />
::::: Just a note, in case you haven't already done this: Treating bullets as straight-up anti-grav points may result in your robot trying to run directly away from bullets, which is a good way to get killed. You should make your anti-gravity force vector point in a direction that is perpendicular to the line between the bullet and the bot that fired it, so that your bot will flee *sideways* from the bullet. [[User:RobertWalker|RobertWalker]] 15:44, 4 May 2009 (UTC)<br />
<br />
== From the Old Wiki ==<br />
<br />
NOTE: Anti-Grav movement is not really that original, in the field of robotics this is called potential field movement. Although the implementation mentioned here is an interesting take on the idea. (Added 4/20/05) [[Troutinator]]<br />
<br />
Moving around, avoiding being hit (DodgingBullets) or rammed by enemy robots as well as WallAvoidance can be quite trickier than you'd think at first. Someone suggested using the laws of gravity for this, but reversed. Something along these lines:<br />
* Assign anti gravity objects of varying charge to enemies, enemy bullets (possibly VirtualBullets), walls, whatever.<br />
* Make your bot repell from those objects based on their charge.<br />
-- [[PEZ]]<br />
<br />
AntiGravityMovement makes for a great Melee strategy as it tends to keep your bot away from the center of the field and from large groups of other bots (who tend to annihilate each other quickly.) Standard practice is to use the inverse square of the distance from the target you wish to repel, take that force as a vector and break it into X and Y components, then add up all the forces you currently are tracking and use this to tell your bot which direction to move. DustBunny uses a very simple AntiGravityMovement routine and is a NanoBots class robot so it should be very easy to understand. For more advanced version, people put artificial antigravity points along the walls and usually 1 in the center of the field. This gives you wall avoidance and center of the field avoidance. Fermat, TheArtOfWar, and many of the best bots use this as their primary mode of movement as it tends to be hard for pattern matching aim to get a lock on this movement. There are other tutorials, but I can't remember where they live at the moment.<br />
<br />
-- [[miked0801]]<br />
<br />
The original anti-gravity code can be found in [[Relativity]], version 3_7 still exists on the RobocodeRepository.<br />
<br />
The idea was indeed to use the formula for gravity , mass/distance-squared, and then move away from the attraction. I have also experimented with using the square-root of the distance (reason: if a bot is 600 or 700 or 800 away, I think I care about them equally, and the square-root is less codesize in a MiniBot). So far, I think the original formula is most robust.<br />
<br />
see also [[ShrapnelDodging]] and [[FluidMovement]]<br />
<br />
-- [[tobe]]<br />
<br />
I've made a class that encapsulates this algorithm, see [[Hanji/AGravEngine]] and [[Hanji/GravPoint]] for details.<br />
<br />
--[[Hanji]]<br />
<br />
I'm using a variation on AntiGravityMovement for my new 1v1 bot, and it seems to be working pretty well. I'm a newbie to high level Robocoding (took at stab at it 3 years back, but I've grown a lot as a coder since then), so I am open to comments/suggestions about all this. Basically, I have two other types of ForcePoints: WindPoints and SwivelPoints; more could easily be added in the future, and probably will be. The WindPoint only emits a force in a particular direction, no matter what your bearing to it is. The SwivelPoint emits a force perpendicular to your bearing to it; it randomly chooses which way, unless you're near a wall, in which case it chooses the angle closest to the bearing to center (basic wall avoidance).<br />
<br />
The idea first arose because I was quite displeased with how GravityPoints functioned as wall avoidance. WindPoints from the corners and wall midpoints work much better for me. The SwivelPoint was created to add a tendency of being perpendicular to the opponent, but I have since begun using them for WaveSurfing, as well. Lastly, I allow each point to have a custom "distance factor" in the equation 1/distance^DF, which adds some additional flexibility. If you make the distance factor == zero, then the strength is the same at any distance; for WaveSurfing, I do that and make the strength 1/distance-to-wave-edge.<br />
<br />
In the future, I may make PulsePoints (force pulsates with time) or RandomPoints (random force). I find this type of force sum system very easy to work with, and I haven't really found anything I couldn't do with it yet - bullet dodging, random movement, and wall avoidance I've done, and I'm working on WaveSurfing now.<br />
<br />
-- [[Voidious]]<br />
<br />
I took a shot at [[wavesurfing]] with antigrav a while back but I never got it to work quite right. Despite all of my efforts, my bots always seemed to want to move directly away from bullets (certain death) rather than move perpendicular to them. I always thought that the idea had merit but could not get it to show. I'll be interested to see if you get it to work correctly Voidious. --[[wcsv]]<br />
<br />
I tried something like that too. I had gravity lines, and gravity valleys. I used the lines for wall avoidance and the valleys to get a certain distance to the enemy. But it was not as good as my simple perpendicular movement with wall avoidance... --[[Krabb]]<br />
<br />
I know how anti-gravity is suppose to work in theory, I just can't figure out how to impliment it in a robot. -- [[Chase-san]]<br />
<br />
@Chase-san: maybe you could use anti-gravity with some other movement, like maybe put some anti-gravity force on other bots and walls, and a gravity force on where the movement tells you to go. An example of how anti-gravity is used is [http://www-128.ibm.com/developerworks/library/j-antigrav/index.html here]. --[[Starrynte]]<br />
<br />
Or, grab [[Carruthers]] 1.2, and take a peek at /techdude/coreaddons/wheels/BlackboardMovement.java, that's my implementation of AntiGrav. --[[Nfwu]]</div>RobertWalkerhttp://robowiki.net/w/index.php?title=Talk:PluggableRobot&diff=6129Talk:PluggableRobot2009-05-04T15:36:33Z<p>RobertWalker: Yes, I'm still alive, and editing PluggableRobot</p>
<hr />
<div>I think all the big bots use something like this? I mean Shadow does, my (bigger) bots do, who else? Mine in particular handles paint and robot color functions, and in Genesis tracks time, data and properties loading. It overlays it own methods for onScannedRobot, handles the radar and does many many other things I mostly forgot about, and it all does this with the data from a interface called 'Constants' (meaning colors, propertie file name, property names and numbers, etc. --[[Chase-san]]<br />
<br />
It's not too surprising that the same people that enjoy programming for fun would also tend to build their bots with more modular designs, though some are certainly more "pluggable" than others. ([[Dookious]] is pretty clean code, IMO, but it would be easier to implement a new [[Wave]]-based gun than a new [[PatternMatching]] gun.) In addition to all the usual reasons for doing so (ie, in a profession), with Robocode it has the additional benefit of keeping me more motivated to work on my bots. [[PrairieWolf]] is a classic (one of the [[Ancients]]) that uses some kind of pluggable design for its [[MultiMode]] strategies. -- [[Voidious]]<br />
<br />
Yeah, it does not surprise me that modularity would be a popular topic. Here's a bit more about how PluggableRobot works. Basically, PluggableRobot allows you to register Listeners, Components and Painters.<br />
* I define a listener interface for each of the Robocode events, and any objects which implement the interfaces and register themselves with the bot will be notified of those events. The really nice thing is that PluggableRobot gives much better control over the order in which notifications are given; listeners are notified of events in the order that they are registered, and each listener gets the events in the order that the corresponding listener interfaces are declared. So a class with a declaration like <pre>public class MyClass implements EventListener.ScannedRobot, EventListener.Death</pre> will get notified of the ScannedRobotEvent *before* the DeathEvent. Pretty handy. All of this happens inside a custom event test as discussed on the [[EventManagement]] page. I don't actually make the robot do anything at this stage; this is just for data collection and processing.<br />
* Components are where I actually make the robot do stuff. Each component has a go() method that gets executed in the main loop of the robot. Like the event listeners, they get called in the order that they were registered.<br />
* Similarly, painters have a paint() method that gets called when it's time to paint debug graphics. In the onPaint() method on the robot I inject the Graphics2D object into a custom object I've created called the Hud, which takes care of icky stuff that Graphics2D expects, like downcasting (Is that a word?) from double to int, translating angles to degrees, etc.<br />
* Pluggable robot also defines initializeBattle() and initializeRound() methods.<br />
-- [[RobertWalker]]<br />
<br />
---<br />
<br />
So I've been absent a long time, but I've been changing PluggableRobot some. Mainly because some changes to Robocode made it so PluggableRobot doesn't paint debug graphics anymore, and partly because I thought of some additional things I could do with it. When I'm finished, I'll update the source code on the wiki. [[User:RobertWalker|RobertWalker]] 15:36, 4 May 2009 (UTC)</div>RobertWalkerhttp://robowiki.net/w/index.php?title=PluggableRobot/Source&diff=3171PluggableRobot/Source2008-10-01T03:16:24Z<p>RobertWalker: /* ListenerDelegate.java */ Fixed mistake in documentation</p>
<hr />
<div>Below is the source for [[PluggableRobot]]. Pillage to your heart's content. PluggableRobot is released under the [[RWLPCL|RoboWiki Limited Public Code License]].<br />
<br />
== Component.java ==<br />
<pre><nowiki><br />
/*<br />
* PluggableRobot, by Robert J. Walker<br />
* Home page: http://robowiki.net/cgi-bin/robowiki?PluggableRobot<br />
* This software is made available under the RoboWiki Limited Public Code License (RWLPCL). The full<br />
* text of the license may be found at http://robowiki.net/cgi-bin/robowiki?RWLPCL.<br />
*/<br />
package rjw.pluggablerobot;<br />
<br />
/**<br />
* Components encapsulate the main combat behavior of the robot into pluggable modules. Any code<br />
* that actually sets an action for the robot (moving, turning, rotating the turret or radar, etc.)<br />
* should be done in the go() method. Components should NEVER call any blocking methods;<br />
* PluggableRobot will call execute() automatically when all components have had a chance to act.<br />
* @author Robert J. Walker<br />
*/<br />
public interface Component {<br />
/**<br />
* Asks this Component to execute any actions that it wants to take this turn. PluggableRobot<br />
* will call this method once per turn for each registered Component. Don't put any blocking<br />
* calls in here; PluggableRobot will call execute() for you automatically after calling go() on<br />
* each Component.<br />
*/<br />
public abstract void go();<br />
}<br />
</nowiki></pre><br />
<br />
== EventListener.java ==<br />
<pre><nowiki><br />
/*<br />
* PluggableRobot, by Robert J. Walker<br />
* Home page: http://robowiki.net/cgi-bin/robowiki?PluggableRobot<br />
* This software is made available under the RoboWiki Limited Public Code License (RWLPCL). The full<br />
* text of the license may be found at http://robowiki.net/cgi-bin/robowiki?RWLPCL.<br />
*/<br />
package rjw.pluggablerobot;<br />
<br />
import robocode.*;<br />
<br />
/**<br />
* Event listener interfaces. Objects that wish to be notified of events must extend one of these<br />
* subinterfaces.<br />
* @author Robert J. Walker<br />
*/<br />
public interface EventListener {<br />
public interface BulletHitBullet extends EventListener {<br />
/**<br />
* Called by PluggableRobot when a bullet fired by your robot has hit another bullet.<br />
*/<br />
public void notifyBulletHitBullet(BulletHitBulletEvent event);<br />
}<br />
<br />
public interface BulletHit extends EventListener {<br />
/**<br />
* Called by PluggableRobot when a bullet fired by your robot has hit another robot.<br />
*/<br />
public void notifyBulletHit(BulletHitEvent event);<br />
}<br />
<br />
public interface BulletMissed extends EventListener {<br />
/**<br />
* Called by PluggableRobot when a bullet fired by your robot has hit a wall.<br />
*/<br />
public void notifyBulletMissed(BulletMissedEvent event);<br />
}<br />
<br />
public interface Death extends EventListener {<br />
/**<br />
* Called by PluggableRobot when your robot has been destroyed.<br />
*/<br />
public void notifyDeath(DeathEvent event);<br />
}<br />
<br />
public interface HitByBullet extends EventListener {<br />
/**<br />
* Called by PluggableRobot when your robot has been hit by an enemy bullet.<br />
*/<br />
public void notifyHitByBullet(HitByBulletEvent event);<br />
}<br />
<br />
public interface HitRobot extends EventListener {<br />
/**<br />
* Called by PluggableRobot when your robot has collided with another robot.<br />
*/<br />
public void notifyHitRobot(HitRobotEvent event);<br />
}<br />
<br />
public interface HitWall extends EventListener {<br />
/**<br />
* Called by PluggableRobot when your robot has collided with a wall.<br />
*/<br />
public void notifyHitWall(HitWallEvent event);<br />
}<br />
<br />
public interface RobotDeath extends EventListener {<br />
/**<br />
* Called by PluggableRobot when an enemy robot has been destroyed.<br />
*/<br />
public void notifyRobotDeath(RobotDeathEvent event);<br />
}<br />
<br />
public interface ScannedRobot extends EventListener {<br />
/**<br />
* Called by PluggableRobot when your radar has swept over an enemy robot.<br />
*/<br />
public void notifyScannedRobot(ScannedRobotEvent event);<br />
}<br />
<br />
public interface SkippedTurn extends EventListener {<br />
/**<br />
* Called by PluggableRobot when your robot skipped a turn.<br />
*/<br />
public void notifySkippedTurn(SkippedTurnEvent event);<br />
}<br />
<br />
public interface Win extends EventListener {<br />
/**<br />
* Called by PluggableRobot when all robots besides yours have been destroyed.<br />
*/<br />
public void notifyWin(WinEvent event);<br />
}<br />
}<br />
</nowiki></pre><br />
<br />
== Hud.java ==<br />
<pre><nowiki><br />
/*<br />
* PluggableRobot, by Robert J. Walker<br />
* Home page: http://robowiki.net/cgi-bin/robowiki?PluggableRobot<br />
* This software is made available under the RoboWiki Limited Public Code License (RWLPCL). The full<br />
* text of the license may be found at http://robowiki.net/cgi-bin/robowiki?RWLPCL.<br />
*/<br />
package rjw.pluggablerobot;<br />
<br />
<br />
import java.awt.Graphics2D;<br />
import java.awt.Paint;<br />
<br />
import robocode.Robot;<br />
<br />
/**<br />
* Facilitates drawing graphics on the arena by automatically converting between values used in<br />
* calculations to values used for drawing. The graphics context (Graphics2D) is injected into the<br />
* Hud just before it is handed to Painters, then removed afterward.<br />
* @author Robert J. Walker<br />
*/<br />
public class Hud {<br />
/**<br />
* Objects which implement this interface can be passed to PluggableRobot.registerPainter(), and<br />
* will get their paint() methods called when it's time to draw the HUD.<br />
*/<br />
public interface Painter {<br />
/**<br />
* This method will be called by PluggableRobot when it's time for this object to draw.<br />
*/<br />
public void paint(Hud hud, long tick);<br />
}<br />
<br />
private Graphics2D _g;<br />
<br />
public double _w;<br />
public double _h;<br />
<br />
/**<br />
* Creates a new Hud object.<br />
*/<br />
public Hud(Robot bot) {<br />
_w = bot.getBattleFieldWidth();<br />
_h = bot.getBattleFieldHeight();<br />
}<br />
<br />
/**<br />
* Draws a point at the given coordinates.<br />
*/<br />
public void drawPoint(double x, double y) {<br />
int x0 = i(x);<br />
int y0 = i(y);<br />
_g.drawLine(x0, y0, x0, y0);<br />
}<br />
<br />
/**<br />
* Draws a line between the two indicated points.<br />
*/<br />
public void drawLine(double x1, double y1, double x2, double y2) {<br />
_g.drawLine(i(x1), i(y1), i(x2), i(y2));<br />
}<br />
<br />
/**<br />
* Draws a circle with the given center point and radius.<br />
*/<br />
public void drawCircle(double x, double y, double r) {<br />
int d = i(r * 2);<br />
_g.drawOval(i(x - r), i(y - r), d, d);<br />
}<br />
<br />
public void drawArc(double x, double y, double r, double start, double extend) {<br />
int d = i(r * 2);<br />
_g.drawArc(i(x - r), i(y - r), d, d, i(Math2.radToDeg(start)), i(Math2.radToDeg(extend)));<br />
}<br />
<br />
/**<br />
* Draws a rectangle with the given position and dimensions.<br />
*/<br />
public void drawRect(double x, double y, double w, double h) {<br />
_g.drawRect(i(x), i(y), i(w), i(h));<br />
}<br />
<br />
/**<br />
* Draws a filled rectangle with the given position and dimensions.<br />
*/<br />
public void drawFilledRect(double x, double y, double w, double h) {<br />
_g.fillRect(i(x), i(y), i(w), i(h));<br />
}<br />
<br />
/**<br />
* Draws a left-aligned String at the given position.<br />
*/<br />
public void drawString(String s, double x, double y) {<br />
_g.drawString(s, i(x), i(y));<br />
}<br />
<br />
/**<br />
* Draws a right-aligned String at the given position.<br />
*/<br />
public void drawStringRight(String s, double x, double y) {<br />
_g.drawString(s, i(x) - _g.getFontMetrics().stringWidth(s), i(y));<br />
}<br />
<br />
/**<br />
* Sets the Hud's current drawing paint.<br />
*/<br />
public void setPaint(Paint c) {<br />
_g.setPaint(c);<br />
}<br />
<br />
/**<br />
* Returns the width of the battlefield. This is useful in situations where you don't have<br />
* access to the robot object.<br />
*/<br />
public double getWidth() {<br />
return _w;<br />
}<br />
<br />
/**<br />
* Returns the height of the battlefield. This is useful in situations where you don't have<br />
* access to the robot object.<br />
*/<br />
public double getHeight() {<br />
return _h;<br />
}<br />
<br />
/**<br />
* Allows PluggableRobot to inject the graphics context into the Hud.<br />
*/<br />
public void setContext(Graphics2D g) {<br />
_g = g;<br />
}<br />
<br />
/**<br />
* Rounds the given double value to the nearest int.<br />
*/<br />
private int i(double val) {<br />
return (int) Math.round(val);<br />
}<br />
}<br />
</nowiki></pre><br />
<br />
== ListenerDelegate.java ==<br />
<pre><nowiki><br />
/*<br />
* PluggableRobot, by Robert J. Walker<br />
* Home page: http://robowiki.net/cgi-bin/robowiki?PluggableRobot<br />
* This software is made available under the RoboWiki Limited Public Code License (RWLPCL). The full<br />
* text of the license may be found at http://robowiki.net/cgi-bin/robowiki?RWLPCL.<br />
*/<br />
package rjw.pluggablerobot;<br />
<br />
import java.util.*;<br />
<br />
import robocode.*;<br />
<br />
/**<br />
* Class that manages all the event listeners for a PluggableRobot and delegates events to the<br />
* appropriate EventListeners. Unlike the default Robocode behavior, events are doled out first by<br />
* listener (first registered, first notified), then by the order of the listener interfaces<br />
* declared on the listener implementation. So a class with a declaration like this:<br />
* public class MyClass implements EventListener.ScannedRobot, EventListener.Death<br />
* ...will get notified of the ScannedRobotEvent *before* the DeathEvent!<br />
* @author Robert J. Walker<br />
*/<br />
public class ListenerDelegate {<br />
private ArrayList<EventListener> _listeners = new ArrayList<EventListener>();<br />
private static HashMap<Class<? extends EventListener>, ListenerInvoker> _invokers;<br />
<br />
// Build the invoker map, allowing us to look up invokers by listener class<br />
static {<br />
_invokers = new HashMap<Class<? extends EventListener>, ListenerInvoker>();<br />
_invokers.put(EventListener.Death.class,<br />
new ListenerInvoker<EventListener.Death, DeathEvent>() {<br />
protected Class<DeathEvent> eventClass() { return DeathEvent.class; }<br />
protected void invokeListener(EventListener.Death listener, DeathEvent event) {<br />
listener.notifyDeath(event);<br />
}<br />
}<br />
);<br />
_invokers.put(EventListener.Win.class,<br />
new ListenerInvoker<EventListener.Win, WinEvent>() {<br />
protected Class<WinEvent> eventClass() { return WinEvent.class; }<br />
protected void invokeListener(EventListener.Win listener, WinEvent event) {<br />
listener.notifyWin(event);<br />
}<br />
}<br />
);<br />
_invokers.put(EventListener.SkippedTurn.class,<br />
new ListenerInvoker<EventListener.SkippedTurn, SkippedTurnEvent>() {<br />
protected Class<SkippedTurnEvent> eventClass() { return SkippedTurnEvent.class; }<br />
protected void invokeListener(EventListener.SkippedTurn listener, SkippedTurnEvent event) {<br />
listener.notifySkippedTurn(event);<br />
}<br />
}<br />
);<br />
_invokers.put(EventListener.ScannedRobot.class,<br />
new ListenerInvoker<EventListener.ScannedRobot, ScannedRobotEvent>() {<br />
protected Class<ScannedRobotEvent> eventClass() { return ScannedRobotEvent.class; }<br />
protected void invokeListener(EventListener.ScannedRobot listener, ScannedRobotEvent event) {<br />
listener.notifyScannedRobot(event);<br />
}<br />
}<br />
);<br />
_invokers.put(EventListener.HitByBullet.class,<br />
new ListenerInvoker<EventListener.HitByBullet, HitByBulletEvent>() {<br />
protected Class<HitByBulletEvent> eventClass() { return HitByBulletEvent.class; }<br />
protected void invokeListener(EventListener.HitByBullet listener, HitByBulletEvent event) {<br />
listener.notifyHitByBullet(event);<br />
}<br />
}<br />
);<br />
_invokers.put(EventListener.BulletHit.class,<br />
new ListenerInvoker<EventListener.BulletHit, BulletHitEvent>() {<br />
protected Class<BulletHitEvent> eventClass() { return BulletHitEvent.class; }<br />
protected void invokeListener(EventListener.BulletHit listener, BulletHitEvent event) {<br />
listener.notifyBulletHit(event);<br />
}<br />
}<br />
);<br />
_invokers.put(EventListener.BulletHitBullet.class,<br />
new ListenerInvoker<EventListener.BulletHitBullet, BulletHitBulletEvent>() {<br />
protected Class<BulletHitBulletEvent> eventClass() { return BulletHitBulletEvent.class; }<br />
protected void invokeListener(EventListener.BulletHitBullet listener, BulletHitBulletEvent event) {<br />
listener.notifyBulletHitBullet(event);<br />
}<br />
}<br />
);<br />
_invokers.put(EventListener.BulletMissed.class,<br />
new ListenerInvoker<EventListener.BulletMissed, BulletMissedEvent>() {<br />
protected Class<BulletMissedEvent> eventClass() { return BulletMissedEvent.class; }<br />
protected void invokeListener(EventListener.BulletMissed listener, BulletMissedEvent event) {<br />
listener.notifyBulletMissed(event);<br />
}<br />
}<br />
);<br />
_invokers.put(EventListener.HitRobot.class,<br />
new ListenerInvoker<EventListener.HitRobot, HitRobotEvent>() {<br />
protected Class<HitRobotEvent> eventClass() { return HitRobotEvent.class; }<br />
protected void invokeListener(EventListener.HitRobot listener, HitRobotEvent event) {<br />
listener.notifyHitRobot(event);<br />
}<br />
}<br />
);<br />
_invokers.put(EventListener.HitWall.class,<br />
new ListenerInvoker<EventListener.HitWall, HitWallEvent>() {<br />
protected Class<HitWallEvent> eventClass() { return HitWallEvent.class; }<br />
protected void invokeListener(EventListener.HitWall listener, HitWallEvent event) {<br />
listener.notifyHitWall(event);<br />
}<br />
}<br />
);<br />
_invokers.put(EventListener.RobotDeath.class,<br />
new ListenerInvoker<EventListener.RobotDeath, RobotDeathEvent>() {<br />
protected Class<RobotDeathEvent> eventClass() { return RobotDeathEvent.class; }<br />
protected void invokeListener(EventListener.RobotDeath listener, RobotDeathEvent event) {<br />
listener.notifyRobotDeath(event);<br />
}<br />
}<br />
);<br />
}<br />
<br />
/**<br />
* Register a new EventListener.<br />
*/<br />
public void register(EventListener listener) {<br />
_listeners.add(listener);<br />
}<br />
<br />
/**<br />
* Hand out event notifications to the EventListeners. <br />
*/<br />
public void processEvents(Vector<Event> events) {<br />
// Notify listeners in the order they were registered<br />
for(EventListener listener : _listeners) {<br />
Class[] interfaces = listener.getClass().getInterfaces();<br />
<br />
// Iterate the interfaces on each listener that descend from EventListener<br />
for(Class iface : interfaces) {<br />
if(!EventListener.class.isAssignableFrom(iface)) continue;<br />
<br />
// Get the invoker and the corresponding event class for this interface<br />
ListenerInvoker invoker = _invokers.get(iface);<br />
Class<? extends Event> eventClass = invoker.eventClass();<br />
<br />
// Iterate the events and hand the ones of the proper type to the invoker<br />
for(Event event : events) {<br />
if(!eventClass.isAssignableFrom(event.getClass())) continue;<br />
invoker.invokeListener(listener, event);<br />
}<br />
}<br />
}<br />
}<br />
<br />
<br />
/**<br />
* An object that knows about a Robocode Event class and how to invoke its corresponding<br />
* EventListener.<br />
* @author Robert J. Walker<br />
*/<br />
private static abstract class ListenerInvoker<K extends EventListener, V extends Event> {<br />
/**<br />
* Returns the Robocode Event class handled by this ListenerInvoker.<br />
*/<br />
protected abstract Class<V> eventClass();<br />
<br />
/**<br />
* Invokes the given EventListener, passing in a Robocode Event object.<br />
*/<br />
protected abstract void invokeListener(K listener, V event);<br />
}<br />
}<br />
</nowiki></pre><br />
<br />
== Math2.java ==<br />
<pre><nowiki><br />
/*<br />
* PluggableRobot, by Robert J. Walker<br />
* Home page: http://robowiki.net/cgi-bin/robowiki?PluggableRobot<br />
* This software is made available under the RoboWiki Limited Public Code License (RWLPCL). The full<br />
* text of the license may be found at http://robowiki.net/cgi-bin/robowiki?RWLPCL.<br />
*/<br />
package rjw.pluggablerobot;<br />
<br />
import java.awt.geom.Point2D;<br />
import java.util.Random;<br />
<br />
import robocode.util.Utils;<br />
<br />
/**<br />
* Math utility class.<br />
* @author Robert J. Walker<br />
*/<br />
public final class Math2 {<br />
public static final double PI_OVER_2 = Math.PI / 2;<br />
<br />
private static final Random random = new Random();<br />
<br />
private Math2() {<br />
}<br />
<br />
/**<br />
* Returns a random int between the min and max arguments, inclusive.<br />
*/<br />
public static int randomInteger(int min, int max) {<br />
return random.nextInt(max - min + 1) + min;<br />
}<br />
<br />
/**<br />
* Returns a random double value between 0.0 (inclusive) and 1.0 (exclusive).<br />
*/<br />
public static double randomDouble() {<br />
return random.nextDouble();<br />
}<br />
<br />
/**<br />
* If value is less than min, returns min. If value is greater than max, returns max. Otherwise,<br />
* returns value.<br />
*/<br />
public static double limit(double min, double value, double max) {<br />
return Math.max(min, Math.min(value, max));<br />
}<br />
<br />
/**<br />
* Adds the X and Y components of the given Point2D.Double objects and returns a new<br />
* Point2D.Double object with the result.<br />
*/<br />
public static Point2D.Double add(Point2D.Double point1, Point2D.Double point2) {<br />
return new Point2D.Double(point1.x + point2.x, point1.y + point2.y);<br />
}<br />
<br />
/**<br />
* Subtracts the X and Y components of the second given Point2D.Double object from those of the<br />
* first and returns a new Point2D.Double object with the result.<br />
*/<br />
public static Point2D.Double subtract(Point2D.Double point1, Point2D.Double point2) {<br />
return new Point2D.Double(point1.x - point2.x, point1.y - point2.y);<br />
}<br />
<br />
/**<br />
* Returns the absolute bearing in radians from the given origin point to the given target<br />
* point.<br />
*/<br />
public static double getAbsoluteTargetBearing(Point2D.Double origin, Point2D.Double target) {<br />
return Utils.normalAbsoluteAngle(Math.atan2(target.x - origin.x, target.y - origin.y));<br />
}<br />
<br />
/**<br />
* Returns a Point2D.Double object indicating the relative position of an object at the given<br />
* angle and distance from the origin.<br />
*/<br />
public static Point2D.Double getRelativePosition(double angle, double distance) {<br />
double dx = distance * Math.sin(angle);<br />
double dy = distance * Math.cos(angle);<br />
return new Point2D.Double(dx, dy);<br />
}<br />
<br />
/**<br />
* Returns a Point2D.Double object indicating the position of an object at the given angle and<br />
* distance from the given origin point.<br />
*/<br />
public static Point2D.Double getAbsolutePosition(Point2D.Double origin, double angle, double distance) {<br />
double x = origin.x + distance * Math.sin(angle);<br />
double y = origin.y + distance * Math.cos(angle);<br />
return new Point2D.Double(x, y);<br />
}<br />
<br />
/**<br />
* Converts degrees to radians.<br />
*/<br />
public static double degToRad(double degrees) {<br />
return degrees * Math.PI / 180;<br />
}<br />
<br />
/**<br />
* Converts radians to degrees.<br />
*/<br />
public static double radToDeg(double radians) {<br />
return radians * 180 / Math.PI;<br />
}<br />
}<br />
</nowiki></pre><br />
<br />
== PluggableRobot.java ==<br />
<pre><nowiki><br />
/*<br />
* PluggableRobot, by Robert J. Walker<br />
* Home page: http://robowiki.net/cgi-bin/robowiki?PluggableRobot<br />
* This software is made available under the RoboWiki Limited Public Code License (RWLPCL). The full<br />
* text of the license may be found at http://robowiki.net/cgi-bin/robowiki?RWLPCL.<br />
*/<br />
package rjw.pluggablerobot;<br />
<br />
import java.awt.Graphics2D;<br />
import java.awt.geom.Point2D;<br />
import java.util.ArrayList;<br />
<br />
import robocode.*;<br />
<br />
/**<br />
* A pluggable listener and strategy architecture for a robot.<br />
* http://robowiki.net/cgi-bin/robowiki?PluggableRobot<br />
* @author Robert J. Walker<br />
*/<br />
public abstract class PluggableRobot extends AdvancedRobot {<br />
private static boolean _battleInitialized = false;<br />
private static Hud _hud;<br />
<br />
private ListenerDelegate _listenerDelegate;<br />
private ArrayList<Component> _components;<br />
private ArrayList<Hud.Painter> _painters;<br />
private Point2D.Double _center;<br />
<br />
/**<br />
* Sets up the ListenerDelegate and the Component and Painter lists.<br />
*/<br />
protected PluggableRobot() {<br />
_listenerDelegate = new ListenerDelegate();<br />
_components = new ArrayList<Component>();<br />
_painters = new ArrayList<Hud.Painter>();<br />
}<br />
<br />
/**<br />
* Set up the robot, then continuously collect events and invoke components.<br />
*/<br />
@Override<br />
public final void run() {<br />
// Initialize battle (at start of first round only)<br />
if(!_battleInitialized) {<br />
_hud = new Hud(this);<br />
initializeBattle();<br />
_battleInitialized = true;<br />
}<br />
<br />
// Register custom event test() hook for event manager<br />
addCustomEvent(new Condition("eventManager") {<br />
public boolean test() {<br />
PluggableRobot.this.handleEvents();<br />
return false;<br />
}<br />
});<br />
<br />
// Round is starting<br />
initializeRound();<br />
<br />
// Main loop<br />
while(true) {<br />
for(Component component : _components) {<br />
component.go();<br />
}<br />
<br />
execute();<br />
}<br />
}<br />
<br />
/**<br />
* This method will be called at the beginning of a battle. Robots can override this method to<br />
* initialize their properties. This is a good place to initialize static properties or set your<br />
* tank color.<br />
*/<br />
protected void initializeBattle() {<br />
// Default implementation does nothing<br />
}<br />
<br />
/**<br />
* This method will be called at the beginning of each round. Robots can override this method to<br />
* initialize their properties. This is a good place to set up non-static properties and<br />
* register listeners, painters and components.<br />
*/<br />
protected void initializeRound() {<br />
// Default implementation does nothing<br />
}<br />
<br />
/**<br />
* Called before events get processed each tick. The default implementation does nothing.<br />
*/<br />
public void onBeforeEventsProcessed() {<br />
// Do nothing<br />
}<br />
<br />
/**<br />
* Returns a Point2D.Double object representing the center of the battlefield.<br />
*/<br />
public Point2D.Double getCenter() {<br />
if(_center == null) {<br />
_center = new Point2D.Double(getBattleFieldWidth() / 2, getBattleFieldHeight() / 2); <br />
}<br />
<br />
return _center;<br />
}<br />
<br />
<br />
/**<br />
* Registers the given EventListener, which will cause it to receive notifications of the events<br />
* indicated by the listener interfaces it implements.<br />
*/<br />
protected void registerListener(EventListener listener) {<br />
_listenerDelegate.register(listener);<br />
}<br />
<br />
/**<br />
* Reigsters the given Component, which will give it the opportunity to act each turn.<br />
*/<br />
protected void registerComponent(Component component) {<br />
_components.add(component);<br />
}<br />
<br />
/**<br />
* Reigsters the given Painter, which will give it the opportunity to draw on the HUD each turn.<br />
*/<br />
protected void registerPainter(Hud.Painter painter) {<br />
_painters.add(painter);<br />
}<br />
<br />
/**<br />
* Hand out notifications to the Painters.<br />
*/<br />
@Override<br />
public final void onPaint(Graphics2D g) {<br />
_hud.setContext(g); // Inject the graphics context into the Hud<br />
<br />
for(Hud.Painter painter : _painters) {<br />
painter.paint(_hud, getTime());<br />
}<br />
<br />
_hud.setContext(null); // Clear the injected graphics context<br />
}<br />
<br />
/**<br />
* Process all the events in the queue.<br />
*/<br />
private void handleEvents() {<br />
onBeforeEventsProcessed();<br />
_listenerDelegate.processEvents(getAllEvents());<br />
clearAllEvents();<br />
}<br />
<br />
// Since we have our own event manager, we want to prevent overrides of the Robocode event<br />
// methods, so we'll make them final.<br />
<br />
@Override<br />
public final void onCustomEvent(CustomEvent event) {<br />
}<br />
<br />
@Override<br />
public final void onDeath(DeathEvent event) {<br />
}<br />
<br />
@Override<br />
public final void onSkippedTurn(SkippedTurnEvent event) {<br />
}<br />
<br />
@Override<br />
public final void onBulletHit(BulletHitEvent event) {<br />
}<br />
<br />
@Override<br />
public final void onBulletHitBullet(BulletHitBulletEvent event) {<br />
}<br />
<br />
@Override<br />
public final void onBulletMissed(BulletMissedEvent event) {<br />
}<br />
<br />
@Override<br />
public final void onHitByBullet(HitByBulletEvent event) {<br />
}<br />
<br />
@Override<br />
public final void onHitRobot(HitRobotEvent event) {<br />
}<br />
<br />
@Override<br />
public final void onHitWall(HitWallEvent event) {<br />
}<br />
<br />
@Override<br />
public final void onRobotDeath(RobotDeathEvent event) {<br />
}<br />
<br />
@Override<br />
public final void onScannedRobot(ScannedRobotEvent event) {<br />
}<br />
<br />
@Override<br />
public final void onWin(WinEvent event) {<br />
}<br />
}<br />
</nowiki></pre><br />
[[Category:Source Code|PluggableRobot/Source]]</div>RobertWalkerhttp://robowiki.net/w/index.php?title=PluggableRobot&diff=3170PluggableRobot2008-10-01T03:05:59Z<p>RobertWalker: Updated infobox</p>
<hr />
<div>{{Infobox Robot<br />
| name = PluggableRobot<br />
| author = [[RobertWalker]]<br />
| extends = [[AdvancedRobot]]<br />
| released = September 21, 2007<br />
| current_version = 1.0<br />
| license = [[RWLPCL]]<br />
| source_link = http://testwiki.roborumble.org/w/index.php?title=PluggableRobot/Source<br />
| isOpenSource = true<br />
}}<br />
<br />
== Info ==<br />
; What's special about it?<br />
: It's not a standalone robot, really, but a base robot which you can extend. It provides a pluggable architecture and sophisticated event management. I developed it in parallel with my robot that is based on it, [[RabidWombat]].<br />
<br />
; How competitive is it?<br />
: That's up to you! You extend it to make it whatever you want it to be.<br />
<br />
; How does it [[Movement|move]]? How does it fire? How does the [[Melee|melee]] strategy differ from [[OneOnOne|one-on-one]] strategy? What does it save between rounds and matches?<br />
: It's just an architecture upon which a robot can be built. Without extension, it's pretty much indistinguishable from [[SittingDuck]].<br />
<br />
; Where did you get the name?<br />
: It's a robot design for a pluggable architecture. [[PluggableRobot]] made sense.<br />
<br />
; Can I use your code?<br />
: Sure, [[PluggableRobot/Source|help yourself to the source code]]. I would like to be able to make this into a JAR that can just be dropped into another project, but Robocode doesn't seem to let you do this in development mode. :(<br />
<br />
; What's next for your robot?<br />
: Maybe some some persistence code.<br />
<br />
; Does it have any [[White Whale|white whales]]?<br />
: Since it doesn't fight on its own, no.<br />
<br />
== Usage ==<br />
Extending PluggableRobot allows you to create reusable components to control the robot's behavior. There are three types of pluggable objects: listeners, components and painters. An object can be one or all three of these types.<br />
* '''Listeners:''' Every Robocode event has a corresponding listener interface in PluggableRobot. Any object that wishes to be notified of an event needs only implement the corresponding interface and register itself with the bot by calling PluggableRobot.registerListener(). PluggableRobot gives much better control over the order in which notifications are given; listeners are notified of events in the order that they are registered, and each listener gets the events in the order that the corresponding listener interfaces are declared. (You can easily handle ScannedRobotEvent '''before''' DeathEvent if you like!) Listeners should not perform any blocking actions in their event handling methods; that's the job of components.<br />
* '''Components:''' Components are where the robot actually does stuff. Any object that wishes to have a chance to act in the execution loop should extend the Component class, implement the go() method, and register itself with the robot by calling PluggableRobot.registerComponent(). PluggableRobot will call go() on each component in the order they were registered, after all the events have been processed. This separation between listeners and components ensures that when it's time for the robot to act, it has all the intel available.<br />
* '''Painters:''' Objects which implement Hud.Painter and register themselves via the PluggableRobot.registerPainter() method will have their paint() methods invoked when it's time to paint debug graphics. Painters will get a reference to the Hud object, which takes care of icky stuff that Graphics2D expects, like using doubles instead of ints, translating angles to degrees, etc.<br />
<br />
== Credits ==<br />
It wouldn't be totally accurate to say that PluggableRobot is an original creation. Though it's not directly based on any other bots, I've culled some ideas from the wiki. Probably most significant for Pluggable robot is some of the discussion on the [[EventManagement]] page.<br />
<br />
[[Category:Bots|PluggableRobot]]<br />
[[Category:Open Source Bots|PluggableRobot]]<br />
<br />
__NOTOC__ __NOEDITSECTION__</div>RobertWalkerhttp://robowiki.net/w/index.php?title=RabidWombat&diff=3169RabidWombat2008-10-01T03:01:34Z<p>RobertWalker: Updated infobox</p>
<hr />
<div>{{Infobox Robot<br />
| image = RabidWombat.jpg<br />
| name = RabidWombat<br />
| author = [[RobertWalker]]<br />
| extends = [[PluggableRobot]]<br />
| targeting = [[VirtualGuns|Virtual gun array]]:<br />
:[[HeadOnTargeting|head-on]]<br />
:[[LinearTargeting|linear]]<br />
:[[CircularTargeting|circular]]<br />
:[[GuessFactorGun|guess factor]]<br />
| movement = [[AntiGravityMovement|antigravity]]<br />
| license = closed source<br />
| isOneOnOne = true<br />
| isMelee = false<br />
| isOpenSource = false<br />
}}<br />
== Background Info ==<br />
; What's special about it?<br />
: It's the robot that the [[PluggableRobot]] architecture was built to support. Hopefully one day that might be considered special.<br />
<br />
; Great, I want to try it. Where can I download it?<br />
: You can't yet. I want to improve it some more before I release it.<br />
<br />
; How competitive is it?<br />
: It's not done yet, so it's not that competitive. It beats the [[SampleBots]], of course. I've also been pitting it against [[SpareParts]] with good success.<br />
<br />
== Strategy ==<br />
; How does it [[Movement|move]]?<br />
: It uses a variation of [[AntiGravityMovement|antigravity movement]]. The enemy robot exerts an attractive or repulsive force on RabidWombat, depending on how far away it is, in order to maintain a particular distance from the enemy. (It's pretty much working on [http://en.wikipedia.org/wiki/Hooke%27s_Law Hooke's law].) That distance grows if RabidWombat is losing and shrinks if it's winning, so that it'll run away or close in for the kill as appropriate. Walls exert a repulsive force. Bullet dodging is done with force vectors as well.<br />
<br />
; How does it fire?<br />
: It has a virtual gun array containing (currently) a [[HeadOnTargeting|head-on targeting gun]] (apply directly to the forehead), a [[LinearTargeting|linear targeting gun]], a [[CircularTargeting|circular targeting gun]] and a [[GuessFactorGun|guess factor gun]]. (I suppose the linear targeting gun is probably redundant.) It fires [[Waves|waves]] (for guess factor targeting) and [[VirtualBullets|virtual bullets]] (for tracking the success of the various guns) every turn and fires the real bullets with the best gun. Stats decay over time so that it will adapt more readily to changes in enemy behavior. I might add a [[PatternMatching|pattern matching gun]] to the array, but if I did I'd probably have to change things around a bit. Currently, all my guns pretend to fire every turn, which from what I understand would be pretty slow for a pattern matching gun.<br />
<br />
; How does it [[DodgingBullets|dodge bullets]]?<br />
: For the moment, it assumes that the opponent is using [[HeadOnTargeting|head-on targeting]] and runs away from that spot. I'm still somewhat undecided on the final bullet dodging strategy.<br />
<br />
; What does it save between rounds and matches?<br />
: Currently, it saves gun accuracy, guess factor and energy stats between rounds and nothing between matches. I'm currently working on a testing harness that will allow me to see how tweaks affect a number of performance metrics not reported by the RobocodeResults class.<br />
<br />
== Additional Info ==<br />
; Where did you get the name?<br />
: It sounded cool. Its initials happening to be RW didn't hurt, either.<br />
<br />
; Can I use your code?<br />
: For now, RabidWombat is closed source. I intend to open it up eventually, after I see how well I can get it to perform, or when I get tired of it, whichever comes first.<br />
<br />
; What's next for your robot?<br />
* Fix aiming code (not shooting where it thinks it is)<br />
* Finish tweaking and testing harness<br />
* Improve bullet dodging<br />
* Add a pattern matching gun<br />
* Take wall bumping into account for virtual gun calculations<br />
* Weight virtual gun stats based on hit probability<br />
* Segment statistics<br />
* Tweak, tweak, tweak... <br />
<br />
; Does it have any [[White Whale|white whales]]?<br />
: For now, I've been pitting RabidWombat against [[SpareParts]], with good results. I'm looking for another bot to pit it against.<br />
<br />
== Credits ==<br />
[[PluggableRobot]] was developed in parallel to support RabidWombat, so look there for some credits. Other than that, it wasn't directly based on any other robot, although I've culled many ideas from the wiki. I'm trying to be good about giving attribution in the source, and when I get some time I'll transfer them to the wiki.<br />
<br />
[[Category:Bots|RabidWombat]]<br />
[[Category:1-vs-1 Bots|RabidWombat]]<br />
[[Category:MegaBots|RabidWombat]]<br />
[[Category:Unreleased Robots|RabidWombat]]<br />
<br />
__NOTOC__ __NOEDITSECTION__</div>RobertWalkerhttp://robowiki.net/w/index.php?title=RabidWombat&diff=3168RabidWombat2008-10-01T02:57:47Z<p>RobertWalker: Updated todo section</p>
<hr />
<div>{{Infobox Robot<br />
|image=RabidWombat.jpg<br />
|author=[[RobertWalker]]<br />
|extends=[[PluggableRobot]]<br />
|targeting=[[VirtualGuns|Virtual gun array]]:<br />
:[[HeadOnTargeting|head-on]]<br />
:[[LinearTargeting|linear]]<br />
:[[CircularTargeting|circular]]<br />
:[[GuessFactorGun|guess factor]]<br />
|movement=[[AntiGravityMovement|antigravity movement]] variant<br />
}}<br />
== Background Info ==<br />
; What's special about it?<br />
: It's the robot that the [[PluggableRobot]] architecture was built to support. Hopefully one day that might be considered special.<br />
<br />
; Great, I want to try it. Where can I download it?<br />
: You can't yet. I want to improve it some more before I release it.<br />
<br />
; How competitive is it?<br />
: It's not done yet, so it's not that competitive. It beats the [[SampleBots]], of course. I've also been pitting it against [[SpareParts]] with good success.<br />
<br />
== Strategy ==<br />
; How does it [[Movement|move]]?<br />
: It uses a variation of [[AntiGravityMovement|antigravity movement]]. The enemy robot exerts an attractive or repulsive force on RabidWombat, depending on how far away it is, in order to maintain a particular distance from the enemy. (It's pretty much working on [http://en.wikipedia.org/wiki/Hooke%27s_Law Hooke's law].) That distance grows if RabidWombat is losing and shrinks if it's winning, so that it'll run away or close in for the kill as appropriate. Walls exert a repulsive force. Bullet dodging is done with force vectors as well.<br />
<br />
; How does it fire?<br />
: It has a virtual gun array containing (currently) a [[HeadOnTargeting|head-on targeting gun]] (apply directly to the forehead), a [[LinearTargeting|linear targeting gun]], a [[CircularTargeting|circular targeting gun]] and a [[GuessFactorGun|guess factor gun]]. (I suppose the linear targeting gun is probably redundant.) It fires [[Waves|waves]] (for guess factor targeting) and [[VirtualBullets|virtual bullets]] (for tracking the success of the various guns) every turn and fires the real bullets with the best gun. Stats decay over time so that it will adapt more readily to changes in enemy behavior. I might add a [[PatternMatching|pattern matching gun]] to the array, but if I did I'd probably have to change things around a bit. Currently, all my guns pretend to fire every turn, which from what I understand would be pretty slow for a pattern matching gun.<br />
<br />
; How does it [[DodgingBullets|dodge bullets]]?<br />
: For the moment, it assumes that the opponent is using [[HeadOnTargeting|head-on targeting]] and runs away from that spot. I'm still somewhat undecided on the final bullet dodging strategy.<br />
<br />
; What does it save between rounds and matches?<br />
: Currently, it saves gun accuracy, guess factor and energy stats between rounds and nothing between matches. I'm currently working on a testing harness that will allow me to see how tweaks affect a number of performance metrics not reported by the RobocodeResults class.<br />
<br />
== Additional Info ==<br />
; Where did you get the name?<br />
: It sounded cool. Its initials happening to be RW didn't hurt, either.<br />
<br />
; Can I use your code?<br />
: For now, RabidWombat is closed source. I intend to open it up eventually, after I see how well I can get it to perform, or when I get tired of it, whichever comes first.<br />
<br />
; What's next for your robot?<br />
* Fix aiming code (not shooting where it thinks it is)<br />
* Finish tweaking and testing harness<br />
* Improve bullet dodging<br />
* Add a pattern matching gun<br />
* Take wall bumping into account for virtual gun calculations<br />
* Weight virtual gun stats based on hit probability<br />
* Segment statistics<br />
* Tweak, tweak, tweak... <br />
<br />
; Does it have any [[White Whale|white whales]]?<br />
: For now, I've been pitting RabidWombat against [[SpareParts]], with good results. I'm looking for another bot to pit it against.<br />
<br />
== Credits ==<br />
[[PluggableRobot]] was developed in parallel to support RabidWombat, so look there for some credits. Other than that, it wasn't directly based on any other robot, although I've culled many ideas from the wiki. I'm trying to be good about giving attribution in the source, and when I get some time I'll transfer them to the wiki.<br />
<br />
[[Category:Bots|RabidWombat]]<br />
[[Category:1-vs-1 Bots|RabidWombat]]<br />
[[Category:MegaBots|RabidWombat]]<br />
[[Category:Unreleased Robots|RabidWombat]]<br />
<br />
__NOTOC__ __NOEDITSECTION__</div>RobertWalkerhttp://robowiki.net/w/index.php?title=PluggableRobot&diff=3167PluggableRobot2008-10-01T02:56:18Z<p>RobertWalker: Fixed layout problem</p>
<hr />
<div>{{Infobox Robot<br />
|author=[[RobertWalker]]<br />
|extends=[[AdvancedRobot]]<br />
|current_version=1.0<br />
|license=[[RWLPCL]]<br />
}}<br />
<br />
; <nowiki>Sub-pages:</nowiki><br />
: [[/Source]]<br />
<br />
== Info ==<br />
; What's special about it?<br />
: It's not a standalone robot, really, but a base robot which you can extend. It provides a pluggable architecture and sophisticated event management. I developed it in parallel with my robot that is based on it, [[RabidWombat]].<br />
<br />
; How competitive is it?<br />
: That's up to you! You extend it to make it whatever you want it to be.<br />
<br />
; How does it [[Movement|move]]? How does it fire? How does the [[Melee|melee]] strategy differ from [[OneOnOne|one-on-one]] strategy? What does it save between rounds and matches?<br />
: It's just an architecture upon which a robot can be built. Without extension, it's pretty much indistinguishable from [[SittingDuck]].<br />
<br />
; Where did you get the name?<br />
: It's a robot design for a pluggable architecture. [[PluggableRobot]] made sense.<br />
<br />
; Can I use your code?<br />
: Sure, [[PluggableRobot/Source|help yourself to the source code]]. I would like to be able to make this into a JAR that can just be dropped into another project, but Robocode doesn't seem to let you do this in development mode. :(<br />
<br />
; What's next for your robot?<br />
: Maybe some some persistence code.<br />
<br />
; Does it have any [[White Whale|white whales]]?<br />
: Since it doesn't fight on its own, no.<br />
<br />
== Usage ==<br />
Extending PluggableRobot allows you to create reusable components to control the robot's behavior. There are three types of pluggable objects: listeners, components and painters. An object can be one or all three of these types.<br />
* '''Listeners:''' Every Robocode event has a corresponding listener interface in PluggableRobot. Any object that wishes to be notified of an event needs only implement the corresponding interface and register itself with the bot by calling PluggableRobot.registerListener(). PluggableRobot gives much better control over the order in which notifications are given; listeners are notified of events in the order that they are registered, and each listener gets the events in the order that the corresponding listener interfaces are declared. (You can easily handle ScannedRobotEvent '''before''' DeathEvent if you like!) Listeners should not perform any blocking actions in their event handling methods; that's the job of components.<br />
* '''Components:''' Components are where the robot actually does stuff. Any object that wishes to have a chance to act in the execution loop should extend the Component class, implement the go() method, and register itself with the robot by calling PluggableRobot.registerComponent(). PluggableRobot will call go() on each component in the order they were registered, after all the events have been processed. This separation between listeners and components ensures that when it's time for the robot to act, it has all the intel available.<br />
* '''Painters:''' Objects which implement Hud.Painter and register themselves via the PluggableRobot.registerPainter() method will have their paint() methods invoked when it's time to paint debug graphics. Painters will get a reference to the Hud object, which takes care of icky stuff that Graphics2D expects, like using doubles instead of ints, translating angles to degrees, etc.<br />
<br />
== Credits ==<br />
It wouldn't be totally accurate to say that PluggableRobot is an original creation. Though it's not directly based on any other bots, I've culled some ideas from the wiki. Probably most significant for Pluggable robot is some of the discussion on the [[EventManagement]] page.<br />
<br />
[[Category:Bots|PluggableRobot]]<br />
[[Category:Open Source Bots|PluggableRobot]]<br />
<br />
__NOTOC__ __NOEDITSECTION__</div>RobertWalkerhttp://robowiki.net/w/index.php?title=User:RobertWalker&diff=3166User:RobertWalker2008-10-01T02:55:21Z<p>RobertWalker: Still alive</p>
<hr />
<div>== Background ==<br />
I'm 30 years old and work as a software developer in Salt Lake City, Utah. Started robocoding in 2007 after a co-worker suggested having a Robocode tournament at work after a long, painful software release cycle. Apparently, I was more interested than the rest of the company; the bot I built (and am still working on in my copious spare time) seems to have scared everyone else off. I have a [http://robert.walkertribe.com fledgling blog] to which I (very) occasionally post.<br />
<br />
== My bots ==<br />
* '''[[PluggableRobot]]''': A robot framework that provides a pluggable architecture and sophisticated [[EventManagement|event management]].<br />
* '''[[RabidWombat]]''': My first robot, built on top of the [[PluggableRobot]] framework. A bit too rough yet to release into the wild.<br />
<br />
== .plan ==<br />
Yes, I'm still alive, and I do want to get back into coding Java tanks. Between having a baby, moving into a new house, and late nights at work, it's been kinda hectic, but things should be settling down soon and making some improvements to RabidWombat. I discovered a problem in the aiming code; apparently where I thought I was shooting wasn't actually where I was shooting! So my first task will be to fix that.<br />
<br />
[[Category:Bot Authors|RobertWalker]]</div>RobertWalkerhttp://robowiki.net/w/index.php?title=RabidWombat&diff=3165RabidWombat2008-10-01T02:51:24Z<p>RobertWalker: Fixed section header</p>
<hr />
<div>{{Infobox Robot<br />
|image=RabidWombat.jpg<br />
|author=[[RobertWalker]]<br />
|extends=[[PluggableRobot]]<br />
|targeting=[[VirtualGuns|Virtual gun array]]:<br />
:[[HeadOnTargeting|head-on]]<br />
:[[LinearTargeting|linear]]<br />
:[[CircularTargeting|circular]]<br />
:[[GuessFactorGun|guess factor]]<br />
|movement=[[AntiGravityMovement|antigravity movement]] variant<br />
}}<br />
== Background Info ==<br />
; What's special about it?<br />
: It's the robot that the [[PluggableRobot]] architecture was built to support. Hopefully one day that might be considered special.<br />
<br />
; Great, I want to try it. Where can I download it?<br />
: You can't yet. I want to improve it some more before I release it.<br />
<br />
; How competitive is it?<br />
: It's not done yet, so it's not that competitive. It beats the [[SampleBots]], of course. I've also been pitting it against [[SpareParts]] with good success.<br />
<br />
== Strategy ==<br />
; How does it [[Movement|move]]?<br />
: It uses a variation of [[AntiGravityMovement|antigravity movement]]. The enemy robot exerts an attractive or repulsive force on RabidWombat, depending on how far away it is, in order to maintain a particular distance from the enemy. (It's pretty much working on [http://en.wikipedia.org/wiki/Hooke%27s_Law Hooke's law].) That distance grows if RabidWombat is losing and shrinks if it's winning, so that it'll run away or close in for the kill as appropriate. Walls exert a repulsive force. Bullet dodging is done with force vectors as well.<br />
<br />
; How does it fire?<br />
: It has a virtual gun array containing (currently) a [[HeadOnTargeting|head-on targeting gun]] (apply directly to the forehead), a [[LinearTargeting|linear targeting gun]], a [[CircularTargeting|circular targeting gun]] and a [[GuessFactorGun|guess factor gun]]. (I suppose the linear targeting gun is probably redundant.) It fires [[Waves|waves]] (for guess factor targeting) and [[VirtualBullets|virtual bullets]] (for tracking the success of the various guns) every turn and fires the real bullets with the best gun. Stats decay over time so that it will adapt more readily to changes in enemy behavior. I might add a [[PatternMatching|pattern matching gun]] to the array, but if I did I'd probably have to change things around a bit. Currently, all my guns pretend to fire every turn, which from what I understand would be pretty slow for a pattern matching gun.<br />
<br />
; How does it [[DodgingBullets|dodge bullets]]?<br />
: For the moment, it assumes that the opponent is using [[HeadOnTargeting|head-on targeting]] and runs away from that spot. I'm still somewhat undecided on the final bullet dodging strategy.<br />
<br />
; What does it save between rounds and matches?<br />
: Currently, it saves gun accuracy, guess factor and energy stats between rounds and nothing between matches. I'm currently working on a testing harness that will allow me to see how tweaks affect a number of performance metrics not reported by the RobocodeResults class.<br />
<br />
== Additional Info ==<br />
; Where did you get the name?<br />
: It sounded cool. Its initials happening to be RW didn't hurt, either.<br />
<br />
; Can I use your code?<br />
: For now, RabidWombat is closed source. I intend to open it up eventually, after I see how well I can get it to perform, or when I get tired of it, whichever comes first.<br />
<br />
; What's next for your robot?<br />
* Finish tweaking and testing harness<br />
* Improve bullet dodging<br />
* Add a pattern matching gun<br />
* Take wall bumping into account for virtual gun calculations<br />
* Weight virtual gun stats based on hit probability<br />
* Segment statistics<br />
* Tweak, tweak, tweak... <br />
<br />
; Does it have any [[White Whale|white whales]]?<br />
: For now, I've been pitting RabidWombat against [[SpareParts]], with good results. I'm looking for another bot to pit it against.<br />
<br />
== Credits ==<br />
[[PluggableRobot]] was developed in parallel to support RabidWombat, so look there for some credits. Other than that, it wasn't directly based on any other robot, although I've culled many ideas from the wiki. I'm trying to be good about giving attribution in the source, and when I get some time I'll transfer them to the wiki.<br />
<br />
[[Category:Bots|RabidWombat]]<br />
[[Category:1-vs-1 Bots|RabidWombat]]<br />
[[Category:MegaBots|RabidWombat]]<br />
[[Category:Unreleased Robots|RabidWombat]]<br />
<br />
__NOTOC__ __NOEDITSECTION__</div>RobertWalkerhttp://robowiki.net/w/index.php?title=User:Jab&diff=2001User:Jab2008-03-27T17:27:45Z<p>RobertWalker: Module looks pretty keen!</p>
<hr />
<div>Glad to see another Robocoder interested in modular architecture. I was looking over the Module pages and I really like your approach. [[PluggableRobot]] and [[Module]] have somewhat different philosophies, but I think there's room for both.<br />
<br />
The biggest downside with PluggableRobot is that you're still left with something of a blank canvas. You have modularity, but there isn't really anything that guides you in terms of what components to make or how to share data between modules. Module handles that, which is a big win. On the other hand, Module seems to force your modules to be of particular types, whereas with PluggableRobot you can make modules that may not correspond to the types you've laid out. For example, [[RabidWombat]] (which I promise will *eventually* be seen in the wild :-)) has a "taunt" module that listens for events and then writes obnoxious comments in the console. Not terribly mission-critical, I'll grant you, but you get the picture.<br />
<br />
Anyway, looks like some nice work. Keep it up!<br />
<br />
[[User:RobertWalker|RobertWalker]] 17:27, 27 March 2008 (UTC)</div>RobertWalkerhttp://robowiki.net/w/index.php?title=RabidWombat&diff=1659RabidWombat2007-12-26T17:27:41Z<p>RobertWalker: RabidWombat isn't open source (yet)</p>
<hr />
<div>{{Infobox Robot<br />
|image=RabidWombat.jpg<br />
|author=[[RobertWalker]]<br />
|extends=[[PluggableRobot]]<br />
|targeting=[[VirtualGuns|Virtual gun array]]:<br />
:[[HeadOnTargeting|head-on]]<br />
:[[LinearTargeting|linear]]<br />
:[[CircularTargeting|circular]]<br />
:[[GuessFactorGun|guess factor]]<br />
|movement=[[AntiGravityMovement|antigravity movement]] variant<br />
}}== Background Info ==<br />
; What's special about it?<br />
: It's the robot that the [[PluggableRobot]] architecture was built to support. Hopefully one day that might be considered special.<br />
<br />
; Great, I want to try it. Where can I download it?<br />
: You can't yet. I want to improve it some more before I release it.<br />
<br />
; How competitive is it?<br />
: It's not done yet, so it's not that competitive. It beats the [[SampleBots]], of course. I've also been pitting it against [[SpareParts]] with good success.<br />
<br />
== Strategy ==<br />
; How does it [[Movement|move]]?<br />
: It uses a variation of [[AntiGravityMovement|antigravity movement]]. The enemy robot exerts an attractive or repulsive force on RabidWombat, depending on how far away it is, in order to maintain a particular distance from the enemy. (It's pretty much working on [http://en.wikipedia.org/wiki/Hooke%27s_Law Hooke's law].) That distance grows if RabidWombat is losing and shrinks if it's winning, so that it'll run away or close in for the kill as appropriate. Walls exert a repulsive force. Bullet dodging is done with force vectors as well.<br />
<br />
; How does it fire?<br />
: It has a virtual gun array containing (currently) a [[HeadOnTargeting|head-on targeting gun]] (apply directly to the forehead), a [[LinearTargeting|linear targeting gun]], a [[CircularTargeting|circular targeting gun]] and a [[GuessFactorGun|guess factor gun]]. (I suppose the linear targeting gun is probably redundant.) It fires [[Waves|waves]] (for guess factor targeting) and [[VirtualBullets|virtual bullets]] (for tracking the success of the various guns) every turn and fires the real bullets with the best gun. Stats decay over time so that it will adapt more readily to changes in enemy behavior. I might add a [[PatternMatching|pattern matching gun]] to the array, but if I did I'd probably have to change things around a bit. Currently, all my guns pretend to fire every turn, which from what I understand would be pretty slow for a pattern matching gun.<br />
<br />
; How does it [[DodgingBullets|dodge bullets]]?<br />
: For the moment, it assumes that the opponent is using [[HeadOnTargeting|head-on targeting]] and runs away from that spot. I'm still somewhat undecided on the final bullet dodging strategy.<br />
<br />
; What does it save between rounds and matches?<br />
: Currently, it saves gun accuracy, guess factor and energy stats between rounds and nothing between matches. I'm currently working on a testing harness that will allow me to see how tweaks affect a number of performance metrics not reported by the RobocodeResults class.<br />
<br />
== Additional Info ==<br />
; Where did you get the name?<br />
: It sounded cool. Its initials happening to be RW didn't hurt, either.<br />
<br />
; Can I use your code?<br />
: For now, RabidWombat is closed source. I intend to open it up eventually, after I see how well I can get it to perform, or when I get tired of it, whichever comes first.<br />
<br />
; What's next for your robot?<br />
* Finish tweaking and testing harness<br />
* Improve bullet dodging<br />
* Add a pattern matching gun<br />
* Take wall bumping into account for virtual gun calculations<br />
* Weight virtual gun stats based on hit probability<br />
* Segment statistics<br />
* Tweak, tweak, tweak... <br />
<br />
; Does it have any [[White Whale|white whales]]?<br />
: For now, I've been pitting RabidWombat against [[SpareParts]], with good results. I'm looking for another bot to pit it against.<br />
<br />
== Credits ==<br />
[[PluggableRobot]] was developed in parallel to support RabidWombat, so look there for some credits. Other than that, it wasn't directly based on any other robot, although I've culled many ideas from the wiki. I'm trying to be good about giving attribution in the source, and when I get some time I'll transfer them to the wiki.<br />
<br />
[[Category:Bots|RabidWombat]]<br />
[[Category:1-vs-1 Bots|RabidWombat]]<br />
[[Category:MegaBots|RabidWombat]]<br />
[[Category:Unreleased Robots|RabidWombat]]<br />
<br />
__NOTOC__ __NOEDITSECTION__</div>RobertWalkerhttp://robowiki.net/w/index.php?title=Category:Robot_In_Development&diff=1621Category:Robot In Development2007-12-18T15:32:27Z<p>RobertWalker: Modification so that it doesn't show up as a subcategory</p>
<hr />
<div>This category is defunct. The new category is [http://testwiki.roborumble.org/w/index.php?title=Category:Unreleased_Robots Unreleased Robots].</div>RobertWalkerhttp://robowiki.net/w/index.php?title=Category:Unreleased_Robots&diff=1620Category:Unreleased Robots2007-12-18T15:31:23Z<p>RobertWalker: Added description</p>
<hr />
<div>This category is to keep track of robots that have not yet been released. Once you have released your robot, you should remove this tag from its page.<br />
[[Category:Bots]]</div>RobertWalkerhttp://robowiki.net/w/index.php?title=Category:Robot_In_Development&diff=1619Category:Robot In Development2007-12-18T15:29:58Z<p>RobertWalker: Typo</p>
<hr />
<div>#REDIRECT [[Category:Unreleased Robots]]</div>RobertWalkerhttp://robowiki.net/w/index.php?title=Category_talk:Robot_In_Development&diff=1618Category talk:Robot In Development2007-12-18T15:29:16Z<p>RobertWalker: Category renamed</p>
<hr />
<div>== Category name ==<br />
<br />
Shouldn't this category be called "Robot'''s''' in development"? Or, better yet, "Unreleased robots"? (Since "Robots in development" can suggest that they are still being modified after they have been released.) --<code>[[User:AaronR|AaronR]]</code> 17:56, 12 December 2007 (UTC)<br />
* I think you are right: "Unreleased robots" would be a much better category name. [[User:RobertWalker|RobertWalker]] 19:02, 12 December 2007 (UTC)<br />
* Yep, good thought. A lot of bots are unreleased but not developed any further. [[User:GrubbmGait|GrubbmGait]] 00:56, 14 December 2007 (UTC)<br />
* I think the category: "Robots In Development" may be useful to group all robots that can be considered incomplete, all bots with version like 0.X, bots that go further 1.0 can be still under development but it can be considered "improvement" rather than "development". Marco M B<br />
* Personally, I like "Unreleased Robots" as a name. To me, "in development" just means they're actively being worked on - it does not mean that they are unreleased or "non-final". We could also have an "In Development" or "Actively Developed" section, but that would be tough to keep up to date. As for the version number - well, some people have some pretty polished bots that are not yet at version 1.0 =), so I'm not sure that would work. --[[User:Voidious|Voidious]] 14:40, 14 December 2007 (UTC)<br />
* If real life takes over for someone or they (*gasp*) lose interest in Robocode, their robot may be left in the "Robots in development" category until doomsday, when really the robot has stagnated and is no longer being developed. As the author of a currently-unreleased robot, I like the "Unreleased robots" category because a bot is either released or it isn't, and the passage of time by itself won't change that. [[User:RobertWalker|RobertWalker]] 18:01, 14 December 2007 (UTC)<br />
*Okay okay, i'm sorry, I thought it made sense at the time to name it this, but yah, "Unreleased Robots" is better. --[[User:Chase-san|Chase-san]] 15:17, 15 December 2007 (UTC)<br />
* I've gone ahead and renamed the category. (Actually, MediaWiki doesn't let you rename, so I've created the new category and moved links over to it.) [[User:RobertWalker|RobertWalker]] 15:29, 18 December 2007 (UTC)</div>RobertWalker