Index: branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/HeuristicLab.Problems.Robocode-3.3.csproj
===================================================================
--- branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/HeuristicLab.Problems.Robocode-3.3.csproj	(revision 13018)
+++ branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/HeuristicLab.Problems.Robocode-3.3.csproj	(revision 13019)
@@ -108,7 +108,292 @@
     <Compile Include="Plugin.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
+    <None Include="robocode\config\robocode.properties">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="robocode\robots\META-INF\MANIFEST.MF" />
+    <None Include="robocode\robots\robot.database" />
+    <None Include="robocode\robots\sampleex\Alien.class">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="robocode\robots\sampleex\Alien.properties">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="robocode\robots\sampleex\AlienComposition%24AlienEventHandler.class">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="robocode\robots\sampleex\AlienComposition%24AlienMain.class">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="robocode\robots\sampleex\AlienComposition.class">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="robocode\robots\sampleex\GreyEminence.class">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="robocode\robots\sampleex\MasterAndSlave.class">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="robocode\robots\sampleex\MasterAndSlave.properties">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="robocode\robots\sampleex\MasterBase.class">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="robocode\robots\sampleex\ProxyOfGreyEminence.class">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="robocode\robots\sampleex\ProxyOfGreyEminence.properties">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="robocode\robots\sampleex\RegullarMonk.class">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="robocode\robots\sampleex\Slave.class">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="robocode\robots\samplesentry\BorderGuard%24RobotData.class">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="robocode\robots\samplesentry\BorderGuard.class">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="robocode\robots\samplesentry\BorderGuard.properties">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="robocode\robots\sampleteam\MyFirstDroid.class">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="robocode\robots\sampleteam\MyFirstLeader.class">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="robocode\robots\sampleteam\MyFirstTeam.team">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="robocode\robots\sampleteam\Point.class">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="robocode\robots\sampleteam\RobotColors.class">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="robocode\robots\sample\Corners.class">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="robocode\robots\sample\Corners.properties">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="robocode\robots\sample\Crazy.class">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="robocode\robots\sample\Crazy.properties">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="robocode\robots\sample\Fire.class">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="robocode\robots\sample\Fire.properties">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="robocode\robots\sample\Interactive.class">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="robocode\robots\sample\Interactive.properties">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="robocode\robots\sample\Interactive_v2%24Direction.class">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="robocode\robots\sample\Interactive_v2.class">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="robocode\robots\sample\Interactive_v2.properties">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="robocode\robots\sample\MyFirstJuniorRobot.class">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="robocode\robots\sample\MyFirstJuniorRobot.properties">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="robocode\robots\sample\MyFirstRobot.class">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="robocode\robots\sample\MyFirstRobot.properties">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="robocode\robots\sample\PaintingRobot.class">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="robocode\robots\sample\PaintingRobot.properties">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="robocode\robots\sample\RamFire.class">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="robocode\robots\sample\RamFire.properties">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="robocode\robots\sample\SittingDuck.class">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="robocode\robots\sample\SittingDuck.data\count.dat" />
+    <None Include="robocode\robots\sample\SittingDuck.properties">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="robocode\robots\sample\SpinBot.class">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="robocode\robots\sample\SpinBot.properties">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="robocode\robots\sample\Target%241.class">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="robocode\robots\sample\Target.class">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="robocode\robots\sample\Target.properties">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="robocode\robots\sample\Tracker.class">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="robocode\robots\sample\Tracker.properties">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="robocode\robots\sample\TrackFire.class">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="robocode\robots\sample\TrackFire.properties">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="robocode\robots\sample\VelociRobot.class">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="robocode\robots\sample\VelociRobot.properties">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="robocode\robots\sample\Walls.class">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="robocode\robots\sample\Walls.properties">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
   </ItemGroup>
   <ItemGroup>
     <Content Include="BattleRunner.java" />
+    <Content Include="robocode\libs\picocontainer-2.14.2.jar">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="robocode\libs\robocode.battle-1.9.2.4.jar">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="robocode\libs\robocode.core-1.9.2.4.jar">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="robocode\libs\robocode.host-1.9.2.4.jar">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="robocode\libs\robocode.jar">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="robocode\libs\robocode.repository-1.9.2.4.jar">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="robocode\libs\robocode.ui-1.9.2.4.jar">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="robocode\license\epl-v10.html">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="robocode\ReadMe.html">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="robocode\ReadMe.txt">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="robocode\robots\Evaluation\empty.txt">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="robocode\robots\sampleex\Alien.java">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="robocode\robots\sampleex\AlienComposition.java">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="robocode\robots\sampleex\MasterAndSlave.java">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="robocode\robots\sampleex\ProxyOfGreyEminence.java">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="robocode\robots\sampleex\RegullarMonk.java">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="robocode\robots\sampleex\Slave.java">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="robocode\robots\samplesentry\BorderGuard.java">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="robocode\robots\sampleteam\MyFirstDroid.java">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="robocode\robots\sampleteam\MyFirstLeader.java">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="robocode\robots\sampleteam\Point.java">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="robocode\robots\sampleteam\RobotColors.java">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="robocode\robots\sample\Corners.java">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="robocode\robots\sample\Crazy.java">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="robocode\robots\sample\Fire.java">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="robocode\robots\sample\Interactive.java">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="robocode\robots\sample\Interactive_v2.java">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="robocode\robots\sample\MyFirstJuniorRobot.java">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="robocode\robots\sample\MyFirstRobot.java">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="robocode\robots\sample\PaintingRobot.java">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="robocode\robots\sample\RamFire.java">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="robocode\robots\sample\SittingDuck.java">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="robocode\robots\sample\SpinBot.java">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="robocode\robots\sample\Target.java">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="robocode\robots\sample\Tracker.java">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="robocode\robots\sample\TrackFire.java">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="robocode\robots\sample\VelociRobot.java">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="robocode\robots\sample\Walls.java">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
   </ItemGroup>
   <ItemGroup />
Index: branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/ReadMe.html
===================================================================
--- branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/ReadMe.html	(revision 13019)
+++ branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/ReadMe.html	(revision 13019)
@@ -0,0 +1,233 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+  <meta http-equiv="Content-Style-Type" content="text/css" />
+  <meta name="generator" content="pandoc" />
+  <title></title>
+  <style type="text/css">code{white-space: pre;}</style>
+</head>
+<body>
+<h2 id="readme-for-robocode">ReadMe for Robocode</h2>
+<p>Updated 06-Mar-2013 by Flemming N. Larsen</p>
+<p>Robocode Home Page: <a href="http://robocode.sourceforge.net/">http://robocode.sourceforge.net/</a></p>
+<h3 id="table-of-contents">TABLE OF CONTENTS</h3>
+<ol style="list-style-type: decimal">
+<li><a href="#what-is-robocode">What is Robocode?</a></li>
+<li><a href="#history-of-robocode">History of Robocode</a></li>
+<li><a href="#system-requirements">System Requirements</a></li>
+<li><a href="#getting-started">Getting Started</a></li>
+<li><a href="#robocode-api">Robocode API</a></li>
+<li><a href="#robocode-repository">Robocode Repository</a></li>
+<li><a href="#community">Community</a></li>
+<li><a href="#challenges">Challenges</a></li>
+<li><a href="#competition">Competition</a></li>
+<li><a href="#command-line">Command Line</a></li>
+<li><a href="#links">Links</a></li>
+<li><a href="#reporting-defects">Reporting Defects</a></li>
+<li><a href="#feature-requests">Feature Requests</a></li>
+<li><a href="#versions">Versions</a></li>
+<li><a href="#news">News</a></li>
+<li><a href="#how-to-contribute">How to contribute</a></li>
+</ol>
+<h3 id="what-is-robocode">1. WHAT IS ROBOCODE?</h3>
+<p>Robocode is a programming game where the goal is to code a robot battle tank to compete against other robots in a battle arena. So the name Robocode is a short for &quot;Robot code&quot;. The player is the programmer of the robot, who will have no direct influence on the game. Instead, the player must write the AI of the robot telling it how to behave and react on events occurring in the battle arena. Battles are running in real-time and on-screen.</p>
+<p><strong>The motto of Robocode is: Build the best, destroy the rest!</strong></p>
+<p>Besides being a programming game, Robocode is used for learning how to program, primarily in the Java language, but other languages like C# and Scala are becoming popular as well.</p>
+<p>Schools and universities are using Robocode as part of teaching how to program, but also for studying artificial intelligence (AI). The concept of Robocode is easy to understand, and a fun way to learn how to program.</p>
+<p>Robocode offers complete development environment, and comes with its own installer, built-in robot editor and Java compiler. Robocode only pre-requires that a JVM (Java Virtual Machine) to exist already on the system where Robocode is going to be installed. Hence, everything a robot developer needs to get started is provided with the main Robocode distribution file (<code>robocode-xxx-setup.jar</code>). Robocode also supports developing robots using external IDEs like e.g. <a href="http://www.eclipse.org/downloads/">Eclipse</a>, <a href="http://www.jetbrains.com/idea/">IntelliJ IDEA</a>, <a href="http://netbeans.org/">NetBeans</a>, <a href="http://msdn.microsoft.com/en-gb/vstudio/">Visual Studio</a> etc., which supports the developer much better than the robot editor in Robocode.</p>
+<p>The fact that Robocode runs on the Java platform makes it possible to run it on any operating system with Java pre-installed, meaning that it will be able to run on Windows, Linux, Mac OS, but also UNIX and variants of UNIX. Note that Java 6 or newer must be installed on the system before Robocode is able to run. See the <a href="#system-requirements">System Requirements</a> for more information.</p>
+<p>Be aware that many users of Robocode (aka Robocoders) find Robocode to be very fun, but also very addictive. :-)</p>
+<p>Robocode comes free of charge and is being developed as a spare-time project where no money is involved. The developers of Robocode are developing on Robocode because they think it is fun, and because they improve themselves as developers this way.</p>
+<p>Robocode is an Open Source project, which means that all sources are open to everybody. In addition, Robocode is provided under the terms of <a href="http://www.eclipse.org/legal/epl-v10.html">EPL</a> (Eclipse Public License).</p>
+<h3 id="history-of-robocode">2. HISTORY OF ROBOCODE</h3>
+<p>The Robocode game was originally started by <strong>Mathew A. Nelson</strong> as a personal endeavor in late 2000 and became a professional one when he brought it to IBM, in the form of an AlphaWorks download, in July 2001.</p>
+<p>IBM was interested in Robocode, as they saw an opportunity to promote Robocode as a fun way to get started with learning how to program in Java. IBM wrote lots of articles about Robocode, e.g. like <a href="http://www.ibm.com/developerworks/java/library/j-robocode/">Rock 'em, sock 'em Robocode!</a> from AlphaWorks / developerWorks at IBM, a series of articles like <a href="http://www.ibm.com/developerworks/java/library/j-robotips/">Secrets from the Robocode masters</a>, and &quot;Robocode Rumble / RoboLeague&quot;.</p>
+<p>The inspiration for creating Robocode came from <a href="http://www.robotbattle.com/history.php">Robot Battle</a>, a programming game written by Brad Schick in 1992, which should still be alive. Robot Battle was, in turn, inspired by <a href="http://www.robotbattle.com/history.php">RobotWar</a>, an Apple II+ game from the early 1980s.</p>
+<p>The articles from IBM and the Robocode community behind the RoboWiki made Robocode very popular as programming game, and for many years Robocode has been used for education and research at schools and universities all over the world.</p>
+<p>In the beginning of 2005, Mathew convinced IBM to release Robocode as <strong>Open Source</strong> on SourceForge. At this point, the development of Robocode had somewhat stopped. The community around Robocode began to develop their own versions of Robocode with bug fixes and new features, e.g. the <a href="http://old.robowiki.net/robowiki?OpenSourceRobocode/Contributions">OpenSourceRobocode/Contributions</a> and later on the two projects, <a href="http://old.robowiki.net/robowiki?RobocodeNG/Archive">RobocodeNG and Robocode 2006</a>, by <strong>Flemming N. Larsen</strong>.</p>
+<p>Eventually, Flemming took over the Robocode project at SourceForge as administrator and developer in July 2006 to continue the original Robocode game. The RobocodeNG project was dropped, but Robocode 2006 was merged into the official Robocode version 1.1 containing lots of improvements. Since then, lots of new versions of Robocode have been released with more and more features and contributions from the community.</p>
+<p>In May 2007, the <a href="http://robowiki.net/wiki/RoboRumble">RoboRumble</a> client got built into Robocode. RoboRumble is widely used by the Robocode community for creating up-to-date robot ranking lists for the 1-to-1, Melee, Team, and Twin Dual competitions.</p>
+<p>Since May 2010 a <strong>.NET plugin</strong> is provided for Robocode using a .NET / Java bridge, which makes it possible to develop robots for .NET beside developing robots in Java. This part was made by <strong>Pavel Savara</strong>, who is a major Robocode contributor.</p>
+<h3 id="system-requirements">3. SYSTEM REQUIREMENTS</h3>
+<p>In order to run Robocode, Java 6 Standard Edition (SE) or a newer version of Java must be installed on your system. Both the Java Runtime Environment (JRE) and the Java Developer Kit (JDK) can be used. Note that the JRE does not include the standard Java compiler (javac), but the JDK does. However, Robocode comes with a built-in compiler (ECJ). Hence, it is sufficient running Robocode on the JRE.</p>
+<p>Also note that it is important that these environment variables have been set up prior to running Robocode:</p>
+<ul>
+<li><p><code>JAVA_HOME</code> must be setup to point at the home directory for Java (JDK or JRE).<br /> Windows example: <code>JAVA_HOME=C:\Program Files\Java\jdk1.6.0_41</code><br /> UNIX, Linux, Mac OS example: <code>JAVA_HOME=/usr/local/jdk1.6.0_41</code></p></li>
+<li><p><code>PATH</code> must include the path to the <code>bin</code> of the Java home directory (<code>JAVA_HOME</code>) that includes <code>java.exe</code> for starting the Java virtual Machine (JVM).<br /> Windows example: <code>PATH=%PATH%;%JAVA_HOME%</code><br /> UNIX, Linux, Mac OS example: <code>PATH=${PATH}:${JAVA_HOME}/bin</code></p></li>
+</ul>
+<p>You can read more details from here:</p>
+<ul>
+<li><a href="http://robowiki.net/wiki/Robocode/System_Requirements">System Requirements</a></li>
+</ul>
+<p>If you want to program robots in .NET or control Robocode from a .NET application, you need to install the Robocode .NET API plug-in on top of Robocode. The plug-in is installed by double-clicking the <code>robocode.dotnet-xxx-setup.jar</code> the same way as Robocode itself is installed.</p>
+<h3 id="getting-started">4. GETTING STARTED</h3>
+<p>Most documentation about Robocode is provided thru the <a href="http://robowiki.net">RoboWiki</a>, which contains the official documentation about Robocode, but which also hosts the community around Robocode. It is highly recommended to read the articles on the RoboWiki for getting started with Robocode. These articles are provided from here:</p>
+<ul>
+<li><a href="http://robowiki.net/wiki/Robocode/Getting_Started">Getting Started</a></li>
+</ul>
+<p>You should read about the anatomy of a robot, the game physics, scoring etc.</p>
+<p>To learn more about developing robots for .NET, these articles are a good starting point:</p>
+<ul>
+<li><a href="http://robowiki.net/wiki/Robocode/.NET/Create_a_.NET_robot_with_Visual_Studio">Create a .NET robot with Visual Studio</a></li>
+<li><a href="http://robowiki.net/wiki/Robocode/.NET/Debug_a_.NET_robot_in_Visual_Studio">Debug a .NET robot with Visual Studio</a></li>
+</ul>
+<h3 id="robocode-api">5. ROBOCODE API</h3>
+<p>The Robocode API is provided as HTML pages for both the Java and .NET platform.</p>
+<ul>
+<li><a href="http://robocode.sourceforge.net/docs/robocode/">Java Robot API</a></li>
+<li><a href="http://robocode.sourceforge.net/docs/robocode/index.html?robocode/control/package-summary.html">Java Control API</a></li>
+<li><a href="http://robocode.sourceforge.net/docs/robocode.dotnet/Index.html">.NET Robot API</a></li>
+<li><a href="http://robocode.sourceforge.net/docs/robocode.dotnet.control/Index.html">.NET Control API</a></li>
+</ul>
+<p>The Robocode API actually consists of 3 different APIs.</p>
+<ul>
+<li><p><strong>Robot API</strong>: Within the Java package <code>robocode</code> and .NET namespace <code>Robocode</code>.<br /> The Robot API is used for developing robots, and is the only part of the API that robots are allowed to access.</p></li>
+<li><p><strong>Robot Interfaces</strong>: Within the Java package <code>robocode.robotinterfaces</code> and .NET namespace <code>Robocode.RobotInterfaces</code>.<br /> The Robot Interfaces are used for developing new robot types with a different API that the standard Robot API.<br /> <strong>Note:</strong> <em>The game rules and robot behaviors cannot be changed.</em></p></li>
+<li><p><strong>Control API</strong>: Within the Java package <code>robocode.control</code> and .NET namespace <code>Robocode.Control</code>.<br /> The Control API is used for letting another application start up battles with selected robots in Robocode and retrieve the results. It is also possible to get snapshots of robots and bullets (like position, heading, energy level etc.) at a specific time in a battle.</p></li>
+</ul>
+<h3 id="robocode-repository">6. ROBOCODE REPOSITORY</h3>
+<p>If you want to try out new robots than the sample robots that come with Robocode, you should visit the <a href="http://robocoderepository.com/">Robocode Repository</a>.</p>
+<p>Robots are available under the <a href="http://robocoderepository.com/Categories.jsp">Bots</a> section of the repository.</p>
+<p>The Robocode Repository is developed and maintained by David Lynn as a project independently of the Robocode project.</p>
+<h3 id="community">7. COMMUNITY</h3>
+<p>The community around Robocode is using the RoboWiki as communication channel. At the RoboWiki, people share new ideas, code snippets, algorithms, strategies, and lots of other stuff about Robocode. New official documentation from the developers of Robocode will be put at the RoboWiki as well.</p>
+<p>On the RoboWiki, these strategies are provided:</p>
+<ul>
+<li><a href="http://robowiki.net/wiki/Radar">Radar</a></li>
+<li><a href="http://robowiki.net/wiki/Category:Movement">Movement</a></li>
+<li><a href="http://robowiki.net/wiki/Category:Targeting">Targeting</a></li>
+</ul>
+<p>The code snippets are also provided on the RoboWiki:</p>
+<ul>
+<li><a href="http://robowiki.net/wiki/Category:Code_Snippets">Code Snippets</a></li>
+</ul>
+<h3 id="challenges">8. CHALLENGES</h3>
+<p>A good way to improve you self as a robot developer is to try out some real challenges. On the RoboWiki, two famous challenges exist for testing/studying a robots movement, targeting, and gun abilities:</p>
+<ul>
+<li><a href="http://robowiki.net/wiki/Movement_Challenge_original">Movement Challenge</a></li>
+<li><a href="http://robowiki.net/wiki/Targeting_Challenge_original">Targeting Challenge</a></li>
+<li><a href="hhttp://robowiki.net/wiki/RoboRumble_Gun_Challenge">RoboRumble Gun Challenge</a></li>
+</ul>
+<h3 id="competition">9. COMPETITION</h3>
+<p>If you want to challenge your robot(s) and yourself as robot developer, the <a href="http://robowiki.net/wiki/RoboRumble">RoboRumble@Home</a> is the best way to do it. RoboRumble is the ultimate collaborative effort to have a live, up-to-date ranking of Robocode bots. It uses the power of available Robocoders' computers to distribute the effort of running battles and building the rankings.</p>
+<p>RoboRumble is actually 3 different rumbles:</p>
+<ul>
+<li><strong>RoboRumble</strong> (aka 1v1): One robot versus another robot - both picked at random. These two robots a alone on the battle field.</li>
+<li><strong>MeleeRumble</strong>: Ten robots picked at random all battle against each other..</li>
+<li><strong>TeamRumble</strong>: One team versus another team - both picked at random. Each team consists of five or less robots.</li>
+</ul>
+<p>In order to get started with RoboRumble, you should read this page:</p>
+<ul>
+<li><a href="http://robowiki.net/wiki/RoboRumble/Starting_With_RoboRumble">Starting With RoboRumble</a></li>
+</ul>
+<p>Note that the RoboRumble@Home client is built into Robocode and can be started using the batch/shell/command files:</p>
+<table>
+<thead>
+<tr class="header">
+<th align="left"></th>
+<th align="left">Windows</th>
+<th align="left">UNIX / Linux</th>
+<th align="left">Mac OS</th>
+</tr>
+</thead>
+<tbody>
+<tr class="odd">
+<td align="left"><strong>RoboRumble</strong></td>
+<td align="left"><code>roborumble.bat</code></td>
+<td align="left"><code>roborumble.sh</code></td>
+<td align="left"><code>roborumble.command</code></td>
+</tr>
+<tr class="even">
+<td align="left"><strong>MeleeRumble</strong></td>
+<td align="left"><code>meleerumble.bat</code></td>
+<td align="left"><code>meleerumble.sh</code></td>
+<td align="left"><code>meleerumble.command</code></td>
+</tr>
+<tr class="odd">
+<td align="left"><strong>TeamRumble</strong></td>
+<td align="left"><code>teamrumble.bat</code></td>
+<td align="left"><code>teamrumble.sh</code></td>
+<td align="left"><code>teamrumble.command</code></td>
+</tr>
+</tbody>
+</table>
+<p>Two other competitions exists which are:</p>
+<ul>
+<li><a href="http://robowiki.net/wiki/Twin_Duel">Twin Duel</a>: Two teams battle on an 800x800 field. Each team consists of two robots (twins).</li>
+<li><a href="http://robowiki.net/wiki/Hat_League">Hat League</a>: Two teams not knowing each other are paired together at random (like drawing names from a hat). Each team consists of two robots. These two teams must work together and defeat two other teams that have also been picked at random.</li>
+</ul>
+<h3 id="command-line">10. COMMAND LINE</h3>
+<p>It is possible to specify options and predefined properties from the command-line when running Robocode. The usage of these can be listed by writing this from a command prompt or shell:</p>
+<pre><code>robocode -help</code></pre>
+<p>For example, it is possible to:</p>
+<ul>
+<li>disable the graphical user interface (GUI).</li>
+<li>disable security that is specific to Robocode (but does not override the security that comes with the JVM).</li>
+<li>enable/disable the debugging mode, useful when debugging robots.</li>
+<li>play a battle based on an existing Robocode .battle file.</li>
+<li>replay a recorded battle visually.</li>
+<li>save the results of battles in a comma-separated file.</li>
+</ul>
+<p>You can read more details here:</p>
+<ul>
+<li><a href="http://robowiki.net/w/index.php?title=Robocode/Console_Usage">Console Usage</a></li>
+</ul>
+<h3 id="links">11. LINKS</h3>
+<p>Links relevant to Robocode are provided on the home page of Robocode:</p>
+<ul>
+<li><a href="http://robocode.sourceforge.net/">Home Page of Robocode</a></li>
+</ul>
+<p>Other links are provided from the RoboWiki - especially for challenges and competitions:</p>
+<ul>
+<li><a href="http://robowiki.net/">RoboWiki</a></li>
+</ul>
+<p>The is also a Wikipedia page available about Robocode, which provides good links to movement and targeting strategies, competitions, and other sites about Robocode:</p>
+<ul>
+<li><a href="http://en.wikipedia.org/wiki/Robocode">Robocode on Wikipedia</a></li>
+</ul>
+<h3 id="reporting-defects">12. REPORTING DEFECTS</h3>
+<p>If you discover a defect (bug) in Robocode you are encouraged to report the issue as soon as you discover it - the sooner the better.</p>
+<p>A bug report should be reported on the <a href="http://http://sourceforge.net/p/robocode/bugs//p/robocode/bugs/">Bugs</a> page on the SourceForge site for Robocode. Each bug report will be prioritized among other bug reports depending on its impact on the game.</p>
+<p>It will be a great help if you describe how to see or which steps to do in order to reproduce the defect. You are very welcome to provide a screen shot, source code or anything else that will show the bug. It is also a very good idea to write which system and version of Robocode and Java you are using.</p>
+<p>If you are a registered user at SourceForge (register <a href="http://sourceforge.net/account/registration/">here</a>) you will be able to add a &quot;monitor&quot; on your bug report. This way you will be able to receive notifications when someone add comments to your report, but will also be able to better track the current status of the bug, e.g. when the bug is fixed and with which version of Robocode the fix is available.</p>
+<p>If you are a developer yourself, and have a good idea of how the bug could be fixed, you are more than welcome to do so. By fixing the bug, you will become a contributor of Robocode yourself. You can learn more about how to contribute <a href="#how-to-contribute">here</a>. Note that we accept bug fixes under the terms of <a href="http://www.eclipse.org/legal/epl-v10.html">EPL</a>.</p>
+<h3 id="feature-requests">13. FEATURE REQUESTS</h3>
+<p>If you got an idea for a new feature or improvement for Robocode, you are very welcome to share your idea by summiting a feature request.</p>
+<p>A feature request should be put on the <a href="http://sourceforge.net/p/robocode/feature-requests/">Feature Requests</a> on the SourceForge site for Robocode. Each feature request will be prioritized among other feature requests.</p>
+<p>It will be a great help if you describe your idea in detail, and how you think it could be implemented into Robocode. For example, will it be possible to extend an existing feature with your idea?</p>
+<p>If you are a registered user at SourceForge (register <a href="http://sourceforge.net/account/registration/">here</a>) you will be able to add a &quot;monitor&quot; on your request. This way you will be able to receive notifications when someone add comments to your request entry, but will also be able to better track the current status of your entry, e.g. when the feature has been implemented and with which version of Robocode it will be available.</p>
+<p>If you are a developer yourself, and have a good idea of how the feature could be implemented, you are more than welcome to do so if the feature is being accepted. By implementing the feature, you will become a contributor of Robocode yourself. You can learn more about how to contribute <a href="#how-to-contribute">here</a>. Note that we accept implementations under the terms of <a href="http://www.eclipse.org/legal/epl-v10.html">EPL</a>.</p>
+<h3 id="versions">14. VERSIONS</h3>
+<p>Robocode is continuously under development, and you should be aware that three different release types exist for Robocode:</p>
+<ul>
+<li><p><strong>Alpha</strong> version is an unofficial &quot;snapshot&quot; version of Robocode that is under development and not feature complete yet. It is normally provided for the person that has put a bug report or feature request on the tracker for Robocode, which needs to be verified. Alpha versions are not meant to be redistributed at all.</p></li>
+<li><p><strong>Beta</strong> version is an official release that is considered feature complete, and which intended for everybody to try out and test regarding all new features and changes, but which is also considered &quot;unstable&quot;, and might contain some unwanted side-effects due to the changes made to this version compared to the last final version of Robocode. Defects or undesired behaviors should be reported as soon as they are discovered so the issues can be fixed before the final release. Everybody is encouraged to take part in the testing Beta versions of Robocode.</p></li>
+<li><p><strong>Final</strong> version is (as it says) the final version of a specific and official release of Robocode, and where new features and bug fixes have been tested. Note, that the release will not state &quot;final&quot; on the distribution files for Robocode like it is the case for Alpha and Beta versions.</p></li>
+</ul>
+<h3 id="news">15. NEWS</h3>
+<p>News about Robocode is put on the blog spot for Robocode. Here it is possible subscribe to a RSS feed to receive news about Robocode.</p>
+<ul>
+<li><a href="http://robo-code.blogspot.com/">Robocode News</a></li>
+</ul>
+<p>You can also follow Robocode on Twitter and Facebook here:</p>
+<ul>
+<li><a href="http://twitter.com/robocode">Twitter for Robocode</a></li>
+<li><a href="http://www.facebook.com/group.php?gid=129627130234">Robocode on Facebook</a></li>
+</ul>
+<p>The RoboWiki can be followed on Twitter as well:</p>
+<ul>
+<li><a href="http://twitter.com/robowiki">Twitter for RoboRumble</a></li>
+</ul>
+<h3 id="how-to-contribute">16. HOW TO CONTRIBUTE</h3>
+<p>If you want to contribute to Robocode with e.g. a new feature or bug fix, you should read the <a href="http://robowiki.net/wiki/Robocode/Developers_Guide_for_building_Robocode">Developers Guide for building Robocode.</a></p>
+<p>Note that we accept code changes under the terms of <a href="http://www.eclipse.org/legal/epl-v10.html">EPL</a>.</p>
+<p>There exist no or little documentation about the internals of Robocode, and the code base will need to be examined by a contributor in order to get an insight of how Robocode is implemented. Thus, it required a skilled Java developer to figure out how Robocode is put together.</p>
+<p>Robocode is divided into several modules. You can read Pavel Savara's blog to get a good overview of Robocode here:</p>
+<ul>
+<li><a href="http://zamboch.blogspot.com/2009/06/robocode-modules-as-in-version-17.html">Robocode modules</a></li>
+</ul>
+<p>Help for Robocode internals can be provided through the <a href="https://groups.google.com/forum/?fromgroups#!forum/robocode-developers">Robocode Developers Discussion Group</a> where you can register yourself, and start up a new topic. This is the best way of getting information and asking about details for the internals in Robocode.</p>
+<p>If a contribution is a somewhat small change to involves under 10 files, then the preferred way is to provide the contribution as a patch file that can be applied to the existing Robocode sources. Otherwise, you can be granted a Subversion branch for your work, where you can commit your changes. Later, this branch needs to be merged into the trunk be the administrators of Robocode and tested carefully. Additional work might be done by other Robocode developers to finalize the work.</p>
+</body>
+</html>
Index: branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/ReadMe.txt
===================================================================
--- branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/ReadMe.txt	(revision 13019)
+++ branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/ReadMe.txt	(revision 13019)
@@ -0,0 +1,471 @@
+## ReadMe for Robocode
+
+Updated 06-Mar-2013 by Flemming N. Larsen
+
+Robocode Home Page:
+[http://robocode.sourceforge.net/](http://robocode.sourceforge.net/)
+
+### TABLE OF CONTENTS
+
+1.  [What is Robocode?](#what-is-robocode)
+2.  [History of Robocode](#history-of-robocode)
+3.  [System Requirements](#system-requirements)
+4.  [Getting Started](#getting-started)
+5.  [Robocode API](#robocode-api)
+6.  [Robocode Repository](#robocode-repository)
+7.  [Community](#community)
+8.  [Challenges](#challenges)
+9.  [Competition](#competition)
+10. [Command Line](#command-line)
+11. [Links](#links)
+12. [Reporting Defects](#reporting-defects)
+13. [Feature Requests](#feature-requests)
+14. [Versions](#versions)
+15. [News](#news)
+16. [How to contribute](#how-to-contribute)
+
+### 1. WHAT IS ROBOCODE?
+
+Robocode is a programming game where the goal is to code a robot battle
+tank to compete against other robots in a battle arena. So the name
+Robocode is a short for "Robot code". The player is the programmer of
+the robot, who will have no direct influence on the game. Instead, the
+player must write the AI of the robot telling it how to behave and
+react on events occurring in the battle arena. Battles are running in
+real-time and on-screen.
+
+**The motto of Robocode is: Build the best, destroy the rest!**
+
+Besides being a programming game, Robocode is used for learning how to
+program, primarily in the Java language, but other languages like C#
+and Scala are becoming popular as well.
+
+Schools and universities are using Robocode as part of teaching how to
+program, but also for studying artificial intelligence (AI). The
+concept of Robocode is easy to understand, and a fun way to learn how
+to program.
+
+Robocode offers complete development environment, and comes with its
+own installer, built-in robot editor and Java compiler. Robocode only
+pre-requires that a JVM (Java Virtual Machine) to exist already on the
+system where Robocode is going to be installed. Hence, everything a
+robot developer needs to get started is provided with the main Robocode
+distribution file (`robocode-xxx-setup.jar`). Robocode also supports
+developing robots using external IDEs like e.g.
+[Eclipse](http://www.eclipse.org/downloads/),
+[IntelliJ IDEA](http://www.jetbrains.com/idea/),
+[NetBeans](http://netbeans.org/),
+[Visual Studio](http://msdn.microsoft.com/en-gb/vstudio/) etc., which 
+supports the developer much better than the robot editor in Robocode.
+
+The fact that Robocode runs on the Java platform makes it possible to
+run it on any operating system with Java pre-installed, meaning that it
+will be able to run on Windows, Linux, Mac OS, but also UNIX and
+variants of UNIX. Note that Java 6 or newer must be installed on the
+system before Robocode is able to run. See the [System
+Requirements](#system-requirements) for more information.
+
+Be aware that many users of Robocode (aka Robocoders) find Robocode to
+be very fun, but also very addictive. :-)
+
+Robocode comes free of charge and is being developed as a spare-time
+project where no money is involved. The developers of Robocode are
+developing on Robocode because they think it is fun, and because they
+improve themselves as developers this way.
+
+Robocode is an Open Source project, which means that all sources are
+open to everybody. In addition, Robocode is provided under the terms of
+[EPL](http://www.eclipse.org/legal/epl-v10.html) (Eclipse Public
+License).
+
+### 2. HISTORY OF ROBOCODE
+
+The Robocode game was originally started by **Mathew A. Nelson** as a
+personal endeavor in late 2000 and became a professional one when he
+brought it to IBM, in the form of an AlphaWorks download, in July 2001.
+
+IBM was interested in Robocode, as they saw an opportunity to promote
+Robocode as a fun way to get started with learning how to program in
+Java. IBM wrote lots of articles about Robocode, e.g. like
+[Rock 'em, sock 'em Robocode!](http://www.ibm.com/developerworks/java/library/j-robocode/)
+from AlphaWorks / developerWorks at IBM, a series of articles like
+[Secrets from the Robocode masters](http://www.ibm.com/developerworks/java/library/j-robotips/),
+and "Robocode Rumble / RoboLeague".
+
+The inspiration for creating Robocode came from
+[Robot Battle](http://www.robotbattle.com/history.php), a programming
+game written by Brad Schick in 1992, which should still be alive. Robot
+Battle was, in turn, inspired by
+[RobotWar](http://www.robotbattle.com/history.php), an Apple II+ game
+from the early 1980s.
+
+The articles from IBM and the Robocode community behind the RoboWiki made
+Robocode very popular as programming game, and for many years Robocode has been
+used for education and research at schools and universities all over the world.
+
+In the beginning of 2005, Mathew convinced IBM to release Robocode as
+**Open Source** on SourceForge. At this point, the development of Robocode had
+somewhat stopped. The community around Robocode began to develop their own
+versions of Robocode with bug fixes and new features, e.g. the
+[OpenSourceRobocode/Contributions](http://old.robowiki.net/robowiki?OpenSourceRobocode/Contributions)
+and later on the two projects,
+[RobocodeNG and Robocode 2006](http://old.robowiki.net/robowiki?RobocodeNG/Archive), by **Flemming N. Larsen**.
+
+Eventually, Flemming took over the Robocode project at SourceForge as
+administrator and developer in July 2006 to continue the original Robocode game.
+The RobocodeNG project was dropped, but Robocode 2006 was merged into the
+official Robocode version 1.1 containing lots of improvements. Since then,
+lots of new versions of Robocode have been released with more and more features
+and contributions from the community.
+
+In May 2007, the [RoboRumble](http://robowiki.net/wiki/RoboRumble) client got
+built into Robocode. RoboRumble is widely used by the Robocode community for
+creating up-to-date robot ranking lists for the 1-to-1, Melee, Team, and
+Twin Dual competitions.
+
+Since May 2010 a **.NET plugin** is provided for Robocode using a .NET / Java
+bridge, which makes it possible to develop robots for .NET beside developing
+robots in Java. This part was made by **Pavel Savara**, who is a major Robocode
+contributor.
+
+### 3. SYSTEM REQUIREMENTS
+
+In order to run Robocode, Java 6 Standard Edition (SE) or a newer
+version of Java must be installed on your system. Both the Java Runtime
+Environment (JRE) and the Java Developer Kit (JDK) can be used. Note
+that the JRE does not include the standard Java compiler (javac), but
+the JDK does. However, Robocode comes with a built-in compiler (ECJ).
+Hence, it is sufficient running Robocode on the JRE.
+
+Also note that it is important that these environment variables have
+been set up prior to running Robocode:
+
+-   `JAVA_HOME` must be setup to point at the home directory for Java
+    (JDK or JRE).  
+	Windows example: `JAVA_HOME=C:\Program Files\Java\jdk1.6.0_41`  
+	UNIX, Linux, Mac OS example: `JAVA_HOME=/usr/local/jdk1.6.0_41`
+
+-   `PATH` must include the path to the `bin` of the Java home
+    directory (`JAVA_HOME`) that includes `java.exe` for starting the
+	Java virtual Machine (JVM).  
+	Windows example: `PATH=%PATH%;%JAVA_HOME%`  
+	UNIX, Linux, Mac OS example: `PATH=${PATH}:${JAVA_HOME}/bin`
+
+You can read more details from here:
+
+-   [System Requirements](http://robowiki.net/wiki/Robocode/System_Requirements)
+
+If you want to program robots in .NET or control Robocode from a .NET 
+application, you need to install the Robocode .NET API plug-in on top of 
+Robocode. The plug-in is installed by double-clicking the 
+`robocode.dotnet-xxx-setup.jar` the same way as Robocode itself is 
+installed.
+
+### 4. GETTING STARTED
+
+Most documentation about Robocode is provided thru the
+[RoboWiki](http://robowiki.net), which contains the official
+documentation about Robocode, but which also hosts the community around
+Robocode. It is highly recommended to read the articles on the RoboWiki
+for getting started with Robocode. These articles are provided from
+here:
+
+-   [Getting Started](http://robowiki.net/wiki/Robocode/Getting_Started)
+
+You should read about the anatomy of a robot, the game physics, scoring
+etc.
+
+To learn more about developing robots for .NET, these articles are a
+good starting point:
+
+-   [Create a .NET robot with Visual Studio](http://robowiki.net/wiki/Robocode/.NET/Create_a_.NET_robot_with_Visual_Studio)
+-   [Debug a .NET robot with Visual Studio](http://robowiki.net/wiki/Robocode/.NET/Debug_a_.NET_robot_in_Visual_Studio)
+
+### 5. ROBOCODE API
+
+The Robocode API is provided as HTML pages for both the Java and .NET
+platform.
+
+-   [Java Robot API](http://robocode.sourceforge.net/docs/robocode/)
+-   [Java Control API](http://robocode.sourceforge.net/docs/robocode/index.html?robocode/control/package-summary.html)
+-   [.NET Robot API](http://robocode.sourceforge.net/docs/robocode.dotnet/Index.html)
+-   [.NET Control API](http://robocode.sourceforge.net/docs/robocode.dotnet.control/Index.html)
+
+The Robocode API actually consists of 3 different APIs.
+
+-   **Robot API**: Within the Java package `robocode` and .NET namespace
+    `Robocode`.  
+    The Robot API is used for developing robots, and is the only part of
+	the API that robots are allowed to access.
+
+-   **Robot Interfaces**: Within the Java package
+    `robocode.robotinterfaces` and .NET namespace
+	`Robocode.RobotInterfaces`.  
+    The Robot Interfaces are used for developing new robot types with a
+    different API that the standard Robot API.  
+    **Note:** *The game rules and robot behaviors cannot be changed.*
+
+-   **Control API**: Within the Java package `robocode.control` and .NET 
+    namespace `Robocode.Control`.  
+	The Control API is used for letting	another application start up
+	battles with selected robots in Robocode and retrieve the results.
+	It is also possible to get snapshots of robots and bullets (like
+	position, heading, energy level etc.) at a specific time in a battle.
+
+### 6. ROBOCODE REPOSITORY
+
+If you want to try out new robots than the sample robots that come with
+Robocode, you should visit the [Robocode
+Repository](http://robocoderepository.com/).
+
+Robots are available under the
+[Bots](http://robocoderepository.com/Categories.jsp) section of the
+repository.
+
+The Robocode Repository is developed and maintained by David Lynn as a
+project independently of the Robocode project.
+
+### 7. COMMUNITY
+
+The community around Robocode is using the RoboWiki as communication
+channel. At the RoboWiki, people share new ideas, code snippets,
+algorithms, strategies, and lots of other stuff about Robocode. New
+official documentation from the developers of Robocode will be put at
+the RoboWiki as well.
+
+On the RoboWiki, these strategies are provided:
+
+-   [Radar](http://robowiki.net/wiki/Radar)
+-   [Movement](http://robowiki.net/wiki/Category:Movement)
+-   [Targeting](http://robowiki.net/wiki/Category:Targeting)
+
+The code snippets are also provided on the RoboWiki:
+
+-   [Code Snippets](http://robowiki.net/wiki/Category:Code_Snippets)
+
+### 8. CHALLENGES
+
+A good way to improve you self as a robot developer is to try out some
+real challenges. On the RoboWiki, two famous challenges exist for
+testing/studying a robots movement, targeting, and gun abilities:
+
+-   [Movement Challenge](http://robowiki.net/wiki/Movement_Challenge_(original))
+-   [Targeting Challenge](http://robowiki.net/wiki/Targeting_Challenge_(original))
+-   [RoboRumble Gun Challenge](hhttp://robowiki.net/wiki/RoboRumble_Gun_Challenge)
+
+### 9. COMPETITION
+
+If you want to challenge your robot(s) and yourself as robot developer,
+the [RoboRumble@Home](http://robowiki.net/wiki/RoboRumble) is the best
+way to do it. RoboRumble is the ultimate collaborative effort to have a
+live, up-to-date ranking of Robocode bots. It uses the power of
+available Robocoders' computers to distribute the effort of running
+battles and building the rankings.
+
+RoboRumble is actually 3 different rumbles:
+
+-   **RoboRumble** (aka 1v1): One robot versus another robot - both
+    picked at random. These two robots a alone on the battle field.
+-   **MeleeRumble**: Ten robots picked at random all battle against
+    each other..
+-   **TeamRumble**: One team versus another team - both picked at
+    random. Each team consists of five or less robots.
+
+In order to get started with RoboRumble, you should read this page:
+
+-   [Starting With RoboRumble](http://robowiki.net/wiki/RoboRumble/Starting_With_RoboRumble)
+
+Note that the RoboRumble@Home client is built into Robocode and can
+be started using the batch/shell/command files:
+
+|                 | Windows           | UNIX / Linux     | Mac OS                |
+|-----------------+-------------------+------------------+-----------------------|
+| **RoboRumble**  | `roborumble.bat`  | `roborumble.sh`  | `roborumble.command`  |
+| **MeleeRumble** | `meleerumble.bat` | `meleerumble.sh` | `meleerumble.command` |
+| **TeamRumble**  | `teamrumble.bat`  | `teamrumble.sh`  | `teamrumble.command`  |
+
+Two other competitions exists which are:
+
+-   [Twin Duel](http://robowiki.net/wiki/Twin_Duel): Two teams
+    battle on an 800x800 field. Each team consists of two robots
+    (twins).
+-   [Hat League](http://robowiki.net/wiki/Hat_League): Two teams not
+    knowing each other are paired together at random (like drawing
+    names from a hat). Each team consists of two robots. These two
+	teams must work together and defeat two other teams that have also
+	been picked at random.
+
+### 10. COMMAND LINE
+
+It is possible to specify options and predefined properties from the
+command-line when running Robocode. The usage of these can be listed by
+writing this from a command prompt or shell:
+
+    robocode -help
+
+For example, it is possible to:
+
+-   disable the graphical user interface (GUI).
+-   disable security that is specific to Robocode (but does not
+    override the security that comes with the JVM).
+-   enable/disable the debugging mode, useful when debugging robots.
+-   play a battle based on an existing Robocode .battle file.
+-   replay a recorded battle visually.
+-   save the results of battles in a comma-separated file.
+
+You can read more details here:
+
+-   [Console Usage](http://robowiki.net/w/index.php?title=Robocode/Console_Usage)
+
+### 11. LINKS
+
+Links relevant to Robocode are provided on the home page of Robocode:
+
+-   [Home Page of Robocode](http://robocode.sourceforge.net/)
+
+Other links are provided from the RoboWiki - especially for challenges
+and competitions:
+
+-   [RoboWiki](http://robowiki.net/)
+
+The is also a Wikipedia page available about Robocode, which provides
+good links to movement and targeting strategies, competitions, and other
+sites about Robocode:
+
+-   [Robocode on Wikipedia](http://en.wikipedia.org/wiki/Robocode)
+
+### 12. REPORTING DEFECTS
+
+If you discover a defect (bug) in Robocode you are encouraged to report
+the issue as soon as you discover it - the sooner the better.
+
+A bug report should be reported on the [Bugs](http://http://sourceforge.net/p/robocode/bugs//p/robocode/bugs/)
+page on the SourceForge site for Robocode. Each bug report will be
+prioritized among other bug reports depending on its impact on the game.
+
+It will be a great help if you describe how to see or which steps to do
+in order to reproduce the defect. You are very welcome to provide a
+screen shot, source code or anything else that will show the bug. It is
+also a very good idea to write which system and version of Robocode and
+Java you are using.
+
+If you are a registered user at SourceForge (register
+[here](http://sourceforge.net/account/registration/)) you will be able
+to add a "monitor" on your bug report. This way you will be able to
+receive notifications when someone add comments to your report, but will
+also be able to better track the current status of the bug, e.g. when
+the bug is fixed and with which version of Robocode the fix is
+available.
+
+If you are a developer yourself, and have a good idea of how the bug
+could be fixed, you are more than welcome to do so. By fixing the bug,
+you will become a contributor of Robocode yourself. You can learn more
+about how to contribute [here](#how-to-contribute). Note that we accept
+bug fixes under the terms of
+[EPL](http://www.eclipse.org/legal/epl-v10.html).
+
+### 13. FEATURE REQUESTS
+
+If you got an idea for a new feature or improvement for Robocode, you
+are very welcome to share your idea by summiting a feature request.
+
+A feature request should be put on the
+[Feature Requests](http://sourceforge.net/p/robocode/feature-requests/)
+on the SourceForge site for Robocode. Each feature request will be
+prioritized among other feature requests.
+
+It will be a great help if you describe your idea in detail, and how you
+think it could be implemented into Robocode. For example, will it be
+possible to extend an existing feature with your idea?
+
+If you are a registered user at SourceForge (register
+[here](http://sourceforge.net/account/registration/)) you will be able
+to add a "monitor" on your request. This way you will be able to receive
+notifications when someone add comments to your request entry, but will
+also be able to better track the current status of your entry, e.g. when
+the feature has been implemented and with which version of Robocode it
+will be available.
+
+If you are a developer yourself, and have a good idea of how the feature
+could be implemented, you are more than welcome to do so if the feature
+is being accepted. By implementing the feature, you will become a
+contributor of Robocode yourself. You can learn more about how to
+contribute [here](#how-to-contribute). Note that we accept
+implementations under the terms of
+[EPL](http://www.eclipse.org/legal/epl-v10.html).
+
+### 14. VERSIONS
+
+Robocode is continuously under development, and you should be aware that
+three different release types exist for Robocode:
+
+-   **Alpha** version is an unofficial "snapshot" version of Robocode
+    that is under development and not feature complete yet. It is
+	normally provided for the person that has put a bug report or
+    feature request on the tracker for Robocode, which needs to be
+    verified. Alpha versions are not meant to be redistributed at all.
+
+-   **Beta** version is an official release that is considered feature
+    complete, and which intended for everybody to try out and test
+	regarding all new features and changes, but which is also
+	considered "unstable", and might contain some unwanted side-effects
+    due to the changes made to this version compared to the last final
+    version of Robocode. Defects or undesired behaviors should be
+    reported as soon as they are discovered so the issues can be fixed
+    before the final release. Everybody is encouraged to take part in
+    the testing Beta versions of Robocode.
+
+-   **Final** version is (as it says) the final version of a specific
+    and official release of Robocode, and where new features and bug
+	fixes have been tested. Note, that the release will not state
+	"final" on the distribution files for Robocode like it is the case
+	for Alpha and Beta versions.
+
+### 15. NEWS
+
+News about Robocode is put on the blog spot for Robocode. Here it
+is possible subscribe to a RSS feed to receive news about Robocode.
+
+-   [Robocode News](http://robo-code.blogspot.com/)
+
+You can also follow Robocode on Twitter and Facebook here:
+
+-   [Twitter for Robocode](http://twitter.com/robocode)
+-   [Robocode on Facebook](http://www.facebook.com/group.php?gid=129627130234)
+
+The RoboWiki can be followed on Twitter as well:
+
+-   [Twitter for RoboRumble](http://twitter.com/robowiki)
+
+### 16. HOW TO CONTRIBUTE
+
+If you want to contribute to Robocode with e.g. a new feature or bug
+fix, you should read the [Developers Guide for building
+Robocode.](http://robowiki.net/wiki/Robocode/Developers_Guide_for_building_Robocode)
+
+Note that we accept code changes under the terms of
+[EPL](http://www.eclipse.org/legal/epl-v10.html).
+
+There exist no or little documentation about the internals of Robocode, 
+and the code base will need to be examined by a contributor in order to 
+get an insight of how Robocode is implemented. Thus, it required a 
+skilled Java developer to figure out how Robocode is put together. 
+
+Robocode is divided into several modules. You can read Pavel Savara's
+blog to get a good overview of Robocode here:
+
+-   [Robocode modules](http://zamboch.blogspot.com/2009/06/robocode-modules-as-in-version-17.html)
+
+Help for Robocode internals can be provided through the [Robocode
+Developers Discussion Group](https://groups.google.com/forum/?fromgroups#!forum/robocode-developers)
+where you can register yourself, and start up a new topic. This is the best
+way of getting information and asking about details for the internals in
+Robocode.
+
+If a contribution is a somewhat small change to involves under 10 files,
+then the preferred way is to provide the contribution as a patch file
+that can be applied to the existing Robocode sources. Otherwise, you can
+be granted a Subversion branch for your work, where you can commit your
+changes. Later, this branch needs to be merged into the trunk be the
+administrators of Robocode and tested carefully. Additional work might
+be done by other Robocode developers to finalize the work.
Index: branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/config/robocode.properties
===================================================================
--- branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/config/robocode.properties	(revision 13019)
+++ branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/config/robocode.properties	(revision 13019)
@@ -0,0 +1,6 @@
+#Robocode Properties
+#Thu Oct 15 11:27:05 CEST 2015
+robocode.cpu.constant=6014762
+robocode.options.battle.desiredTPS=30
+robocode.version.lastrun=1.9.2.4
+robocode.versionchecked=10/15/2015 11\:27\:05
Index: branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/license/epl-v10.html
===================================================================
--- branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/license/epl-v10.html	(revision 13019)
+++ branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/license/epl-v10.html	(revision 13019)
@@ -0,0 +1,188 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
+<!-- saved from url=(0041)http://robocode.sourceforge.net/license/epl-v10.html -->
+<HTML xmlns="http://www.w3.org/1999/xhtml"><HEAD><TITLE>Eclipse Public License - Version 1.0</TITLE>
+<META content="text/html; charset=ISO-8859-1" http-equiv=Content-Type>
+<STYLE type=text/css>BODY {
+	MARGIN: 0.25in 0.5in; size: 8.5in 11.0in; tab-interval: 0.5in
+}
+P {
+	MARGIN-TOP: 0.5em; MARGIN-BOTTOM: 0.5em; MARGIN-LEFT: auto
+}
+P.list {
+	MARGIN-TOP: 0.05em; MARGIN-BOTTOM: 0.05em; MARGIN-LEFT: 0.5in
+}
+</STYLE>
+
+<META name=GENERATOR content="MSHTML 8.00.7600.16490"></HEAD>
+<BODY lang=EN-US>
+<H2>Eclipse Public License - v 1.0</H2>
+<P>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC 
+LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM 
+CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.</P>
+<P><B>1. DEFINITIONS</B></P>
+<P>"Contribution" means:</P>
+<P class=list>a) in the case of the initial Contributor, the initial code and 
+documentation distributed under this Agreement, and</P>
+<P class=list>b) in the case of each subsequent Contributor:</P>
+<P class=list>i) changes to the Program, and</P>
+<P class=list>ii) additions to the Program;</P>
+<P class=list>where such changes and/or additions to the Program originate from 
+and are distributed by that particular Contributor. A Contribution 'originates' 
+from a Contributor if it was added to the Program by such Contributor itself or 
+anyone acting on such Contributor's behalf. Contributions do not include 
+additions to the Program which: (i) are separate modules of software distributed 
+in conjunction with the Program under their own license agreement, and (ii) are 
+not derivative works of the Program.</P>
+<P>"Contributor" means any person or entity that distributes the Program.</P>
+<P>"Licensed Patents" mean patent claims licensable by a Contributor which are 
+necessarily infringed by the use or sale of its Contribution alone or when 
+combined with the Program.</P>
+<P>"Program" means the Contributions distributed in accordance with this 
+Agreement.</P>
+<P>"Recipient" means anyone who receives the Program under this Agreement, 
+including all Contributors.</P>
+<P><B>2. GRANT OF RIGHTS</B></P>
+<P class=list>a) Subject to the terms of this Agreement, each Contributor hereby 
+grants Recipient a non-exclusive, worldwide, royalty-free copyright license to 
+reproduce, prepare derivative works of, publicly display, publicly perform, 
+distribute and sublicense the Contribution of such Contributor, if any, and such 
+derivative works, in source code and object code form.</P>
+<P class=list>b) Subject to the terms of this Agreement, each Contributor hereby 
+grants Recipient a non-exclusive, worldwide, royalty-free patent license under 
+Licensed Patents to make, use, sell, offer to sell, import and otherwise 
+transfer the Contribution of such Contributor, if any, in source code and object 
+code form. This patent license shall apply to the combination of the 
+Contribution and the Program if, at the time the Contribution is added by the 
+Contributor, such addition of the Contribution causes such combination to be 
+covered by the Licensed Patents. The patent license shall not apply to any other 
+combinations which include the Contribution. No hardware per se is licensed 
+hereunder.</P>
+<P class=list>c) Recipient understands that although each Contributor grants the 
+licenses to its Contributions set forth herein, no assurances are provided by 
+any Contributor that the Program does not infringe the patent or other 
+intellectual property rights of any other entity. Each Contributor disclaims any 
+liability to Recipient for claims brought by any other entity based on 
+infringement of intellectual property rights or otherwise. As a condition to 
+exercising the rights and licenses granted hereunder, each Recipient hereby 
+assumes sole responsibility to secure any other intellectual property rights 
+needed, if any. For example, if a third party patent license is required to 
+allow Recipient to distribute the Program, it is Recipient's responsibility to 
+acquire that license before distributing the Program.</P>
+<P class=list>d) Each Contributor represents that to its knowledge it has 
+sufficient copyright rights in its Contribution, if any, to grant the copyright 
+license set forth in this Agreement.</P>
+<P><B>3. REQUIREMENTS</B></P>
+<P>A Contributor may choose to distribute the Program in object code form under 
+its own license agreement, provided that:</P>
+<P class=list>a) it complies with the terms and conditions of this Agreement; 
+and</P>
+<P class=list>b) its license agreement:</P>
+<P class=list>i) effectively disclaims on behalf of all Contributors all 
+warranties and conditions, express and implied, including warranties or 
+conditions of title and non-infringement, and implied warranties or conditions 
+of merchantability and fitness for a particular purpose;</P>
+<P class=list>ii) effectively excludes on behalf of all Contributors all 
+liability for damages, including direct, indirect, special, incidental and 
+consequential damages, such as lost profits;</P>
+<P class=list>iii) states that any provisions which differ from this Agreement 
+are offered by that Contributor alone and not by any other party; and</P>
+<P class=list>iv) states that source code for the Program is available from such 
+Contributor, and informs licensees how to obtain it in a reasonable manner on or 
+through a medium customarily used for software exchange.</P>
+<P>When the Program is made available in source code form:</P>
+<P class=list>a) it must be made available under this Agreement; and</P>
+<P class=list>b) a copy of this Agreement must be included with each copy of the 
+Program.</P>
+<P>Contributors may not remove or alter any copyright notices contained within 
+the Program.</P>
+<P>Each Contributor must identify itself as the originator of its Contribution, 
+if any, in a manner that reasonably allows subsequent Recipients to identify the 
+originator of the Contribution.</P>
+<P><B>4. COMMERCIAL DISTRIBUTION</B></P>
+<P>Commercial distributors of software may accept certain responsibilities with 
+respect to end users, business partners and the like. While this license is 
+intended to facilitate the commercial use of the Program, the Contributor who 
+includes the Program in a commercial product offering should do so in a manner 
+which does not create potential liability for other Contributors. Therefore, if 
+a Contributor includes the Program in a commercial product offering, such 
+Contributor ("Commercial Contributor") hereby agrees to defend and indemnify 
+every other Contributor ("Indemnified Contributor") against any losses, damages 
+and costs (collectively "Losses") arising from claims, lawsuits and other legal 
+actions brought by a third party against the Indemnified Contributor to the 
+extent caused by the acts or omissions of such Commercial Contributor in 
+connection with its distribution of the Program in a commercial product 
+offering. The obligations in this section do not apply to any claims or Losses 
+relating to any actual or alleged intellectual property infringement. In order 
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial 
+Contributor in writing of such claim, and b) allow the Commercial Contributor to 
+control, and cooperate with the Commercial Contributor in, the defense and any 
+related settlement negotiations. The Indemnified Contributor may participate in 
+any such claim at its own expense.</P>
+<P>For example, a Contributor might include the Program in a commercial product 
+offering, Product X. That Contributor is then a Commercial Contributor. If that 
+Commercial Contributor then makes performance claims, or offers warranties 
+related to Product X, those performance claims and warranties are such 
+Commercial Contributor's responsibility alone. Under this section, the 
+Commercial Contributor would have to defend claims against the other 
+Contributors related to those performance claims and warranties, and if a court 
+requires any other Contributor to pay any damages as a result, the Commercial 
+Contributor must pay those damages.</P>
+<P><B>5. NO WARRANTY</B></P>
+<P>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON 
+AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS 
+OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, 
+NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each 
+Recipient is solely responsible for determining the appropriateness of using and 
+distributing the Program and assumes all risks associated with its exercise of 
+rights under this Agreement , including but not limited to the risks and costs 
+of program errors, compliance with applicable laws, damage to or loss of data, 
+programs or equipment, and unavailability or interruption of operations.</P>
+<P><B>6. DISCLAIMER OF LIABILITY</B></P>
+<P>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY 
+CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST 
+PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 
+OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS 
+GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.</P>
+<P><B>7. GENERAL</B></P>
+<P>If any provision of this Agreement is invalid or unenforceable under 
+applicable law, it shall not affect the validity or enforceability of the 
+remainder of the terms of this Agreement, and without further action by the 
+parties hereto, such provision shall be reformed to the minimum extent necessary 
+to make such provision valid and enforceable.</P>
+<P>If Recipient institutes patent litigation against any entity (including a 
+cross-claim or counterclaim in a lawsuit) alleging that the Program itself 
+(excluding combinations of the Program with other software or hardware) 
+infringes such Recipient's patent(s), then such Recipient's rights granted under 
+Section 2(b) shall terminate as of the date such litigation is filed.</P>
+<P>All Recipient's rights under this Agreement shall terminate if it fails to 
+comply with any of the material terms or conditions of this Agreement and does 
+not cure such failure in a reasonable period of time after becoming aware of 
+such noncompliance. If all Recipient's rights under this Agreement terminate, 
+Recipient agrees to cease use and distribution of the Program as soon as 
+reasonably practicable. However, Recipient's obligations under this Agreement 
+and any licenses granted by Recipient relating to the Program shall continue and 
+survive.</P>
+<P>Everyone is permitted to copy and distribute copies of this Agreement, but in 
+order to avoid inconsistency the Agreement is copyrighted and may only be 
+modified in the following manner. The Agreement Steward reserves the right to 
+publish new versions (including revisions) of this Agreement from time to time. 
+No one other than the Agreement Steward has the right to modify this Agreement. 
+The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation 
+may assign the responsibility to serve as the Agreement Steward to a suitable 
+separate entity. Each new version of the Agreement will be given a 
+distinguishing version number. The Program (including Contributions) may always 
+be distributed subject to the version of the Agreement under which it was 
+received. In addition, after a new version of the Agreement is published, 
+Contributor may elect to distribute the Program (including its Contributions) 
+under the new version. Except as expressly stated in Sections 2(a) and 2(b) 
+above, Recipient receives no rights or licenses to the intellectual property of 
+any Contributor under this Agreement, whether expressly, by implication, 
+estoppel or otherwise. All rights in the Program not expressly granted under 
+this Agreement are reserved.</P>
+<P>This Agreement is governed by the laws of the State of New York and the 
+intellectual property laws of the United States of America. No party to this 
+Agreement will bring a legal action under this Agreement more than one year 
+after the cause of action arose. Each party waives its rights to a jury trial in 
+any resulting litigation.</P></BODY></HTML>
Index: branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/Evaluation/empty.txt
===================================================================
--- branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/Evaluation/empty.txt	(revision 13019)
+++ branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/Evaluation/empty.txt	(revision 13019)
@@ -0,0 +1,1 @@
+﻿This file is only necessary to make sure the folder "robots/Evaluation" is created in the output folder
Index: branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/META-INF/MANIFEST.MF
===================================================================
--- branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/META-INF/MANIFEST.MF	(revision 13019)
+++ branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/META-INF/MANIFEST.MF	(revision 13019)
@@ -0,0 +1,6 @@
+Manifest-Version: 1.0
+Built-By: Flemming
+Build-Jdk: 1.6.0_45
+Created-By: Apache Maven
+Archiver-Version: Plexus Archiver
+
Index: branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/Corners.java
===================================================================
--- branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/Corners.java	(revision 13019)
+++ branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/Corners.java	(revision 13019)
@@ -0,0 +1,140 @@
+/**
+ * Copyright (c) 2001-2014 Mathew A. Nelson and Robocode contributors
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://robocode.sourceforge.net/license/epl-v10.html
+ */
+package sample;
+
+
+import robocode.DeathEvent;
+import robocode.Robot;
+import robocode.ScannedRobotEvent;
+import static robocode.util.Utils.normalRelativeAngleDegrees;
+
+import java.awt.*;
+
+
+/**
+ * Corners - a sample robot by Mathew Nelson.
+ * <p/>
+ * This robot moves to a corner, then swings the gun back and forth.
+ * If it dies, it tries a new corner in the next round.
+ *
+ * @author Mathew A. Nelson (original)
+ * @author Flemming N. Larsen (contributor)
+ */
+public class Corners extends Robot {
+	int others; // Number of other robots in the game
+	static int corner = 0; // Which corner we are currently using
+	// static so that it keeps it between rounds.
+	boolean stopWhenSeeRobot = false; // See goCorner()
+
+	/**
+	 * run:  Corners' main run function.
+	 */
+	public void run() {
+		// Set colors
+		setBodyColor(Color.red);
+		setGunColor(Color.black);
+		setRadarColor(Color.yellow);
+		setBulletColor(Color.green);
+		setScanColor(Color.green);
+
+		// Save # of other bots
+		others = getOthers();
+
+		// Move to a corner
+		goCorner();
+
+		// Initialize gun turn speed to 3
+		int gunIncrement = 3;
+
+		// Spin gun back and forth
+		while (true) {
+			for (int i = 0; i < 30; i++) {
+				turnGunLeft(gunIncrement);
+			}
+			gunIncrement *= -1;
+		}
+	}
+
+	/**
+	 * goCorner:  A very inefficient way to get to a corner.  Can you do better?
+	 */
+	public void goCorner() {
+		// We don't want to stop when we're just turning...
+		stopWhenSeeRobot = false;
+		// turn to face the wall to the "right" of our desired corner.
+		turnRight(normalRelativeAngleDegrees(corner - getHeading()));
+		// Ok, now we don't want to crash into any robot in our way...
+		stopWhenSeeRobot = true;
+		// Move to that wall
+		ahead(5000);
+		// Turn to face the corner
+		turnLeft(90);
+		// Move to the corner
+		ahead(5000);
+		// Turn gun to starting point
+		turnGunLeft(90);
+	}
+
+	/**
+	 * onScannedRobot:  Stop and fire!
+	 */
+	public void onScannedRobot(ScannedRobotEvent e) {
+		// Should we stop, or just fire?
+		if (stopWhenSeeRobot) {
+			// Stop everything!  You can safely call stop multiple times.
+			stop();
+			// Call our custom firing method
+			smartFire(e.getDistance());
+			// Look for another robot.
+			// NOTE:  If you call scan() inside onScannedRobot, and it sees a robot,
+			// the game will interrupt the event handler and start it over
+			scan();
+			// We won't get here if we saw another robot.
+			// Okay, we didn't see another robot... start moving or turning again.
+			resume();
+		} else {
+			smartFire(e.getDistance());
+		}
+	}
+
+	/**
+	 * smartFire:  Custom fire method that determines firepower based on distance.
+	 *
+	 * @param robotDistance the distance to the robot to fire at
+	 */
+	public void smartFire(double robotDistance) {
+		if (robotDistance > 200 || getEnergy() < 15) {
+			fire(1);
+		} else if (robotDistance > 50) {
+			fire(2);
+		} else {
+			fire(3);
+		}
+	}
+
+	/**
+	 * onDeath:  We died.  Decide whether to try a different corner next game.
+	 */
+	public void onDeath(DeathEvent e) {
+		// Well, others should never be 0, but better safe than sorry.
+		if (others == 0) {
+			return;
+		}
+
+		// If 75% of the robots are still alive when we die, we'll switch corners.
+		if ((others - getOthers()) / (double) others < .75) {
+			corner += 90;
+			if (corner == 270) {
+				corner = -90;
+			}
+			out.println("I died and did poorly... switching corner to " + corner);
+		} else {
+			out.println("I died but did well.  I will still use corner " + corner);
+		}
+	}
+}
Index: branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/Corners.properties
===================================================================
--- branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/Corners.properties	(revision 13019)
+++ branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/Corners.properties	(revision 13019)
@@ -0,0 +1,9 @@
+#Robot Properties
+#Sun Aug 20 21:14:27 EST 2006
+robot.description=\                             A sample robot\n         Moves to a corner, then swings the gun back and forth.\n          If it dies, it tries a new corner in the next round.
+robot.webpage=
+robocode.version=1.1.2
+robot.java.source.included=true
+robot.author.name=Mathew Nelson and Flemming N. Larsen
+robot.classname=sample.Corners
+robot.name=Corners
Index: branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/Crazy.java
===================================================================
--- branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/Crazy.java	(revision 13019)
+++ branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/Crazy.java	(revision 13019)
@@ -0,0 +1,103 @@
+/**
+ * Copyright (c) 2001-2014 Mathew A. Nelson and Robocode contributors
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://robocode.sourceforge.net/license/epl-v10.html
+ */
+package sample;
+
+
+import robocode.*;
+
+import java.awt.*;
+
+
+/**
+ * Crazy - a sample robot by Mathew Nelson.
+ * <p/>
+ * This robot moves around in a crazy pattern.
+ *
+ * @author Mathew A. Nelson (original)
+ * @author Flemming N. Larsen (contributor)
+ */
+public class Crazy extends AdvancedRobot {
+	boolean movingForward;
+
+	/**
+	 * run: Crazy's main run function
+	 */
+	public void run() {
+		// Set colors
+		setBodyColor(new Color(0, 200, 0));
+		setGunColor(new Color(0, 150, 50));
+		setRadarColor(new Color(0, 100, 100));
+		setBulletColor(new Color(255, 255, 100));
+		setScanColor(new Color(255, 200, 200));
+
+		// Loop forever
+		while (true) {
+			// Tell the game we will want to move ahead 40000 -- some large number
+			setAhead(40000);
+			movingForward = true;
+			// Tell the game we will want to turn right 90
+			setTurnRight(90);
+			// At this point, we have indicated to the game that *when we do something*,
+			// we will want to move ahead and turn right.  That's what "set" means.
+			// It is important to realize we have not done anything yet!
+			// In order to actually move, we'll want to call a method that
+			// takes real time, such as waitFor.
+			// waitFor actually starts the action -- we start moving and turning.
+			// It will not return until we have finished turning.
+			waitFor(new TurnCompleteCondition(this));
+			// Note:  We are still moving ahead now, but the turn is complete.
+			// Now we'll turn the other way...
+			setTurnLeft(180);
+			// ... and wait for the turn to finish ...
+			waitFor(new TurnCompleteCondition(this));
+			// ... then the other way ...
+			setTurnRight(180);
+			// .. and wait for that turn to finish.
+			waitFor(new TurnCompleteCondition(this));
+			// then back to the top to do it all again
+		}
+	}
+
+	/**
+	 * onHitWall:  Handle collision with wall.
+	 */
+	public void onHitWall(HitWallEvent e) {
+		// Bounce off!
+		reverseDirection();
+	}
+
+	/**
+	 * reverseDirection:  Switch from ahead to back & vice versa
+	 */
+	public void reverseDirection() {
+		if (movingForward) {
+			setBack(40000);
+			movingForward = false;
+		} else {
+			setAhead(40000);
+			movingForward = true;
+		}
+	}
+
+	/**
+	 * onScannedRobot:  Fire!
+	 */
+	public void onScannedRobot(ScannedRobotEvent e) {
+		fire(1);
+	}
+
+	/**
+	 * onHitRobot:  Back up!
+	 */
+	public void onHitRobot(HitRobotEvent e) {
+		// If we're moving the other robot, reverse!
+		if (e.isMyFault()) {
+			reverseDirection();
+		}
+	}
+}
Index: branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/Crazy.properties
===================================================================
--- branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/Crazy.properties	(revision 13019)
+++ branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/Crazy.properties	(revision 13019)
@@ -0,0 +1,9 @@
+#Robot Properties
+#Sun Aug 20 21:16:04 EST 2006
+robot.description=\                             A sample robot\n\n                     Moves around in a crazy pattern
+robot.webpage=
+robocode.version=1.1.2
+robot.java.source.included=true
+robot.author.name=Mathew Nelson and Flemming N. Larsen
+robot.classname=sample.Crazy
+robot.name=Crazy
Index: branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/Fire.java
===================================================================
--- branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/Fire.java	(revision 13019)
+++ branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/Fire.java	(revision 13019)
@@ -0,0 +1,84 @@
+/**
+ * Copyright (c) 2001-2014 Mathew A. Nelson and Robocode contributors
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://robocode.sourceforge.net/license/epl-v10.html
+ */
+package sample;
+
+
+import robocode.HitByBulletEvent;
+import robocode.HitRobotEvent;
+import robocode.Robot;
+import robocode.ScannedRobotEvent;
+import static robocode.util.Utils.normalRelativeAngleDegrees;
+
+import java.awt.*;
+
+
+/**
+ * Fire - a sample robot by Mathew Nelson, and maintained.
+ * <p/>
+ * Sits still. Spins gun around. Moves when hit.
+ *
+ * @author Mathew A. Nelson (original)
+ * @author Flemming N. Larsen (contributor)
+ */
+public class Fire extends Robot {
+	int dist = 50; // distance to move when we're hit
+
+	/**
+	 * run:  Fire's main run function
+	 */
+	public void run() {
+		// Set colors
+		setBodyColor(Color.orange);
+		setGunColor(Color.orange);
+		setRadarColor(Color.red);
+		setScanColor(Color.red);
+		setBulletColor(Color.red);
+
+		// Spin the gun around slowly... forever
+		while (true) {
+			turnGunRight(5);
+		}
+	}
+
+	/**
+	 * onScannedRobot:  Fire!
+	 */
+	public void onScannedRobot(ScannedRobotEvent e) {
+		// If the other robot is close by, and we have plenty of life,
+		// fire hard!
+		if (e.getDistance() < 50 && getEnergy() > 50) {
+			fire(3);
+		} // otherwise, fire 1.
+		else {
+			fire(1);
+		}
+		// Call scan again, before we turn the gun
+		scan();
+	}
+
+	/**
+	 * onHitByBullet:  Turn perpendicular to the bullet, and move a bit.
+	 */
+	public void onHitByBullet(HitByBulletEvent e) {
+		turnRight(normalRelativeAngleDegrees(90 - (getHeading() - e.getHeading())));
+
+		ahead(dist);
+		dist *= -1;
+		scan();
+	}
+
+	/**
+	 * onHitRobot:  Aim at it.  Fire Hard!
+	 */
+	public void onHitRobot(HitRobotEvent e) {
+		double turnGunAmt = normalRelativeAngleDegrees(e.getBearing() + getHeading() - getGunHeading());
+
+		turnGunRight(turnGunAmt);
+		fire(3);
+	}
+}
Index: branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/Fire.properties
===================================================================
--- branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/Fire.properties	(revision 13019)
+++ branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/Fire.properties	(revision 13019)
@@ -0,0 +1,9 @@
+#Robot Properties
+#Sun Aug 20 21:16:33 EST 2007
+robot.description=\                             A sample robot\n\n             Sits still.  Spins gun around.  Moves when hit.  Ooh\!
+robot.webpage=
+robocode.version=1.1.2
+robot.java.source.included=true
+robot.author.name=Mathew Nelson and Flemming N. Larsen
+robot.classname=sample.Fire
+robot.name=Fire
Index: branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/Interactive.java
===================================================================
--- branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/Interactive.java	(revision 13019)
+++ branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/Interactive.java	(revision 13019)
@@ -0,0 +1,223 @@
+/**
+ * Copyright (c) 2001-2014 Mathew A. Nelson and Robocode contributors
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://robocode.sourceforge.net/license/epl-v10.html
+ */
+package sample;
+
+
+import robocode.AdvancedRobot;
+import static robocode.util.Utils.normalAbsoluteAngle;
+import static robocode.util.Utils.normalRelativeAngle;
+
+import java.awt.*;
+import java.awt.event.KeyEvent;
+import static java.awt.event.KeyEvent.*;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseWheelEvent;
+
+
+/**
+ * Interactive - a sample robot by Flemming N. Larsen.
+ * <p/>
+ * This is a robot that is controlled using the arrow keys and mouse only.
+ * <p/>
+ * Keys:
+ * - W or arrow up:    Move forward
+ * - S or arrow down:  Move backward
+ * - A or arrow right: Turn right
+ * - D or arrow left:  Turn left
+ * Mouse:
+ * - Moving:      Moves the aim, which the gun will follow
+ * - Wheel up:    Move forward
+ * - Wheel down:  Move backward
+ * - Button 1:    Fire a bullet with power = 1
+ * - Button 2:    Fire a bullet with power = 2
+ * - Button 3:    Fire a bullet with power = 3
+ * <p/>
+ * The bullet color depends on the fire power:
+ * - Power = 1:   Yellow
+ * - Power = 2:   Orange
+ * - Power = 3:   Red
+ * <p/>
+ * Note that the robot will continue firing as long as the mouse button is
+ * pressed down.
+ * <p/>
+ * By enabling the "Paint" button on the robot console window for this robot,
+ * a cross hair will be painted for the robots current aim (controlled by the
+ * mouse).
+ *
+ * @author Flemming N. Larsen (original)
+ *
+ * @version 1.2
+ *
+ * @since 1.3.4
+ */
+public class Interactive extends AdvancedRobot {
+
+	// Move direction: 1 = move forward, 0 = stand still, -1 = move backward
+	int moveDirection;
+
+	// Turn direction: 1 = turn right, 0 = no turning, -1 = turn left
+	int turnDirection;
+
+	// Amount of pixels/units to move
+	double moveAmount;
+
+	// The coordinate of the aim (x,y)
+	int aimX, aimY;
+
+	// Fire power, where 0 = don't fire
+	int firePower;
+
+	// Called when the robot must run
+	public void run() {
+
+		// Sets the colors of the robot
+		// body = black, gun = white, radar = red
+		setColors(Color.BLACK, Color.WHITE, Color.RED);
+
+		// Loop forever
+		for (;;) {
+			// Sets the robot to move forward, backward or stop moving depending
+			// on the move direction and amount of pixels to move
+			setAhead(moveAmount * moveDirection);
+
+			// Decrement the amount of pixels to move until we reach 0 pixels
+			// This way the robot will automatically stop if the mouse wheel
+			// has stopped it's rotation
+			moveAmount = Math.max(0, moveAmount - 1);
+
+			// Sets the robot to turn right or turn left (at maximum speed) or
+			// stop turning depending on the turn direction
+			setTurnRight(45 * turnDirection); // degrees
+
+			// Turns the gun toward the current aim coordinate (x,y) controlled by
+			// the current mouse coordinate
+			double angle = normalAbsoluteAngle(Math.atan2(aimX - getX(), aimY - getY()));
+
+			setTurnGunRightRadians(normalRelativeAngle(angle - getGunHeadingRadians()));
+
+			// Fire the gun with the specified fire power, unless the fire power = 0
+			if (firePower > 0) {
+				setFire(firePower);
+			}
+
+			// Execute all pending set-statements
+			execute();
+
+			// Next turn is processed in this loop..
+		}
+	}
+
+	// Called when a key has been pressed
+	public void onKeyPressed(KeyEvent e) {
+		switch (e.getKeyCode()) {
+		case VK_UP:
+		case VK_W:
+			// Arrow up key: move direction = forward (infinitely)
+			moveDirection = 1;
+			moveAmount = Double.POSITIVE_INFINITY;
+			break;
+
+		case VK_DOWN:
+		case VK_S:
+			// Arrow down key: move direction = backward (infinitely)
+			moveDirection = -1;
+			moveAmount = Double.POSITIVE_INFINITY;
+			break;
+
+		case VK_RIGHT:
+		case VK_D:
+			// Arrow right key: turn direction = right
+			turnDirection = 1;
+			break;
+
+		case VK_LEFT:
+		case VK_A:
+			// Arrow left key: turn direction = left
+			turnDirection = -1;
+			break;
+		}
+	}
+
+	// Called when a key has been released (after being pressed)
+	public void onKeyReleased(KeyEvent e) {
+		switch (e.getKeyCode()) {
+		case VK_UP:
+		case VK_W:
+		case VK_DOWN:
+		case VK_S:
+			// Arrow up and down keys: move direction = stand still
+			moveDirection = 0;
+			moveAmount = 0;
+			break;
+
+		case VK_RIGHT:
+		case VK_D:
+		case VK_LEFT:
+		case VK_A:
+			// Arrow right and left keys: turn direction = stop turning
+			turnDirection = 0;
+			break;
+		}
+	}
+
+	// Called when the mouse wheel is rotated
+	public void onMouseWheelMoved(MouseWheelEvent e) {
+		// If the wheel rotation is negative it means that it is moved forward.
+		// Set move direction = forward, if wheel is moved forward.
+		// Otherwise, set move direction = backward
+		moveDirection = (e.getWheelRotation() < 0) ? 1 : -1;
+
+		// Set the amount to move = absolute wheel rotation amount * 5 (speed)
+		// Here 5 means 5 pixels per wheel rotation step. The higher value, the
+		// more speed
+		moveAmount += Math.abs(e.getWheelRotation()) * 5;
+	}
+
+	// Called when the mouse has been moved
+	public void onMouseMoved(MouseEvent e) {
+		// Set the aim coordinate = the mouse pointer coordinate
+		aimX = e.getX();
+		aimY = e.getY();
+	}
+
+	// Called when a mouse button has been pressed
+	public void onMousePressed(MouseEvent e) {
+		if (e.getButton() == MouseEvent.BUTTON3) {
+			// Button 3: fire power = 3 energy points, bullet color = red
+			firePower = 3;
+			setBulletColor(Color.RED);
+		} else if (e.getButton() == MouseEvent.BUTTON2) {
+			// Button 2: fire power = 2 energy points, bullet color = orange
+			firePower = 2;
+			setBulletColor(Color.ORANGE);
+		} else {
+			// Button 1 or unknown button:
+			// fire power = 1 energy points, bullet color = yellow
+			firePower = 1;
+			setBulletColor(Color.YELLOW);
+		}
+	}
+
+	// Called when a mouse button has been released (after being pressed)
+	public void onMouseReleased(MouseEvent e) {
+		// Fire power = 0, which means "don't fire"
+		firePower = 0;
+	}
+
+	// Called in order to paint graphics for this robot.
+	// "Paint" button on the robot console window for this robot must be
+	// enabled in order to see the paintings.
+	public void onPaint(Graphics2D g) {
+		// Draw a red cross hair with the center at the current aim
+		// coordinate (x,y)
+		g.setColor(Color.RED);
+		g.drawOval(aimX - 15, aimY - 15, 30, 30);
+		g.drawLine(aimX, aimY - 4, aimX, aimY + 4);
+		g.drawLine(aimX - 4, aimY, aimX + 4, aimY);
+	}
+}
Index: branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/Interactive.properties
===================================================================
--- branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/Interactive.properties	(revision 13019)
+++ branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/Interactive.properties	(revision 13019)
@@ -0,0 +1,9 @@
+#Robot Properties
+#Wed Jun 27 23:08:48 EST 2007
+robot.description=\                             A sample robot\n\n This is a robot that is controlled using the arrow keys and mouse only
+robot.webpage=
+robocode.version=1.3.4
+robot.java.source.included=true
+robot.author.name=Flemming N. Larsen
+robot.classname=sample.Interactive
+robot.name=Interactive
Index: branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/Interactive_v2.java
===================================================================
--- branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/Interactive_v2.java	(revision 13019)
+++ branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/Interactive_v2.java	(revision 13019)
@@ -0,0 +1,263 @@
+/**
+ * Copyright (c) 2001-2014 Mathew A. Nelson and Robocode contributors
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://robocode.sourceforge.net/license/epl-v10.html
+ */
+package sample;
+
+
+import robocode.AdvancedRobot;
+import robocode.util.Utils;
+import static robocode.util.Utils.normalAbsoluteAngle;
+import static robocode.util.Utils.normalRelativeAngle;
+
+import java.awt.*;
+import java.awt.event.KeyEvent;
+import static java.awt.event.KeyEvent.*;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseWheelEvent;
+import java.util.HashSet;
+import java.util.Set;
+
+
+/**
+ * Interactive_v2 - a modified version of the sample robot Interactive by Flemming N. Larsen
+ *                  to use absolute movements (up, right, down, left) by Tuan Anh Nguyen.
+ * <p/>
+ * This is a robot that is controlled using the arrow keys (or WASD) and mouse only.
+ * <p/>
+ * Keys:
+ * - W or arrow up:    Move up
+ * - S or arrow down:  Move down
+ * - A or arrow right: Move right
+ * - D or arrow left:  Move left
+ * Mouse:
+ * - Moving:      Moves the aim, which the gun will follow
+ * - Button 1:    Fire a bullet with power = 1
+ * - Button 2:    Fire a bullet with power = 2
+ * - Button 3:    Fire a bullet with power = 3
+ * <p/>
+ * The bullet color depends on the fire power:
+ * - Power = 1:   Yellow
+ * - Power = 2:   Orange
+ * - Power = 3:   Red
+ * <p/>
+ * Note that the robot will continue firing as long as the mouse button is
+ * pressed down.
+ * <p/>
+ * By enabling the "Paint" button on the robot console window for this robot,
+ * a cross hair will be painted for the robots current aim (controlled by the
+ * mouse).
+ *
+ * @author Flemming N. Larsen (original)
+ * @author Tuan Anh Nguyen (contributor)
+ *
+ * @version 1.0
+ *
+ * @since 1.7.2.2
+ */
+public class Interactive_v2 extends AdvancedRobot {
+
+	// The coordinate of the aim (x,y)
+	int aimX, aimY;
+
+	// Fire power, where 0 = don't fire
+	int firePower;
+
+	// Absolute directions on the screen
+	private enum Direction {
+		UP,
+		DOWN,
+		LEFT,
+		RIGHT
+	}
+
+	// Current move directions
+	private final Set<Direction> directions = new HashSet<Direction>();
+
+	// Called when the robot must run
+	public void run() {
+
+		// Sets the colors of the robot
+		// body = black, gun = white, radar = red
+		setColors(Color.BLACK, Color.WHITE, Color.RED);
+
+		// Loop forever
+		for (;;) {
+			// Move the robot compared to the distance to move
+			setAhead(distanceToMove());
+
+			// Turn the body to it points in the correct direction
+			setTurnRight(angleToTurnInDegrees());
+
+			// Turns the gun toward the current aim coordinate (x,y) controlled by
+			// the current mouse coordinate
+			double angle = normalAbsoluteAngle(Math.atan2(aimX - getX(), aimY - getY()));
+
+			setTurnGunRightRadians(normalRelativeAngle(angle - getGunHeadingRadians()));
+
+			// Fire the gun with the specified fire power, unless the fire power = 0
+			if (firePower > 0) {
+				setFire(firePower);
+			}
+
+			// Execute all pending set-statements
+			execute();
+
+			// Next turn is processed in this loop..
+		}
+	}
+
+	// Called when a key has been pressed
+	public void onKeyPressed(KeyEvent e) {
+		switch (e.getKeyCode()) {
+		case VK_UP:
+		case VK_W:
+			directions.add(Direction.UP);
+			break;
+
+		case VK_DOWN:
+		case VK_S:
+			directions.add(Direction.DOWN);
+			break;
+
+		case VK_RIGHT:
+		case VK_D:
+			directions.add(Direction.RIGHT);
+			break;
+
+		case VK_LEFT:
+		case VK_A:
+			directions.add(Direction.LEFT);
+			break;
+		}
+	}
+
+	// Called when a key has been released (after being pressed)
+	public void onKeyReleased(KeyEvent e) {
+		switch (e.getKeyCode()) {
+		case VK_UP:
+		case VK_W:
+			directions.remove(Direction.UP);
+			break;
+
+		case VK_DOWN:
+		case VK_S:
+			directions.remove(Direction.DOWN);
+			break;
+
+		case VK_RIGHT:
+		case VK_D:
+			directions.remove(Direction.RIGHT);
+			break;
+
+		case VK_LEFT:
+		case VK_A:
+			directions.remove(Direction.LEFT);
+			break;
+		}
+	}
+
+	// Called when the mouse wheel is rotated
+	public void onMouseWheelMoved(MouseWheelEvent e) {// Do nothing
+	}
+
+	// Called when the mouse has been moved
+	public void onMouseMoved(MouseEvent e) {
+		// Set the aim coordinate = the mouse pointer coordinate
+		aimX = e.getX();
+		aimY = e.getY();
+	}
+
+	// Called when a mouse button has been pressed
+	public void onMousePressed(MouseEvent e) {
+		if (e.getButton() == MouseEvent.BUTTON3) {
+			// Button 3: fire power = 3 energy points, bullet color = red
+			firePower = 3;
+			setBulletColor(Color.RED);
+		} else if (e.getButton() == MouseEvent.BUTTON2) {
+			// Button 2: fire power = 2 energy points, bullet color = orange
+			firePower = 2;
+			setBulletColor(Color.ORANGE);
+		} else {
+			// Button 1 or unknown button:
+			// fire power = 1 energy points, bullet color = yellow
+			firePower = 1;
+			setBulletColor(Color.YELLOW);
+		}
+	}
+
+	// Called when a mouse button has been released (after being pressed)
+	public void onMouseReleased(MouseEvent e) {
+		// Fire power = 0, which means "don't fire"
+		firePower = 0;
+	}
+
+	// Called in order to paint graphics for this robot.
+	// "Paint" button on the robot console window for this robot must be
+	// enabled in order to see the paintings.
+	public void onPaint(Graphics2D g) {
+		// Draw a red cross hair with the center at the current aim
+		// coordinate (x,y)
+		g.setColor(Color.RED);
+		g.drawOval(aimX - 15, aimY - 15, 30, 30);
+		g.drawLine(aimX, aimY - 4, aimX, aimY + 4);
+		g.drawLine(aimX - 4, aimY, aimX + 4, aimY);
+	}
+
+	// Returns the angle to turn, which is the delta between the desired
+	// direction and the current heading of the robot
+	private double angleToTurnInDegrees() {
+		if (directions.isEmpty()) {
+			return 0;
+		}
+		return Utils.normalRelativeAngleDegrees(desiredDirection() - getHeading());
+	}
+
+	// Returns the distance to move
+	private double distanceToMove() {
+		// If no keys are pressed, we should not move at all
+		if (directions.isEmpty()) {
+			return 0;
+		}
+		// If the robot has more than 45 degrees to turn, move only 5 pixel 
+		if (Math.abs(angleToTurnInDegrees()) > 45) {
+			return 5;
+		}
+		// Otherwise, move at full speed
+		return Double.POSITIVE_INFINITY;
+	}
+
+	// Return the desired direction depending on the pending move directions.
+	// With one arrow key pressed, the move to N, E, S, W.
+	// With two keys pressed, the robot also move to NE, NW, SE, SW.
+	private double desiredDirection() {
+		if (directions.contains(Direction.UP)) {
+			if (directions.contains(Direction.RIGHT)) {
+				return 45;
+			}
+			if (directions.contains(Direction.LEFT)) {
+				return 315;
+			}
+			return 0;
+		}
+		if (directions.contains(Direction.DOWN)) {
+			if (directions.contains(Direction.RIGHT)) {
+				return 135;
+			}
+			if (directions.contains(Direction.LEFT)) {
+				return 225;
+			}
+			return 180;
+		}
+		if (directions.contains(Direction.RIGHT)) {
+			return 90;
+		}
+		if (directions.contains(Direction.LEFT)) {
+			return 270;
+		}
+		return 0;
+	}
+}
Index: branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/Interactive_v2.properties
===================================================================
--- branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/Interactive_v2.properties	(revision 13019)
+++ branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/Interactive_v2.properties	(revision 13019)
@@ -0,0 +1,8 @@
+#Robot Properties
+robot.description=\                             A sample robot\n\n This is a robot that is controlled using the arrow keys and mouse only
+robot.webpage=
+robocode.version=1.3.4
+robot.java.source.included=true
+robot.author.name=Tuan Anh Nguyen and Flemming N. Larsen
+robot.classname=sample.Interactive_v2
+robot.name=Interactive_v2
Index: branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/MyFirstJuniorRobot.java
===================================================================
--- branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/MyFirstJuniorRobot.java	(revision 13019)
+++ branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/MyFirstJuniorRobot.java	(revision 13019)
@@ -0,0 +1,60 @@
+/**
+ * Copyright (c) 2001-2014 Mathew A. Nelson and Robocode contributors
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://robocode.sourceforge.net/license/epl-v10.html
+ */
+package sample;
+
+
+import robocode.JuniorRobot;
+
+
+/**
+ * MyFirstJuniorRobot - a sample robot by Flemming N. Larsen
+ * <p/>
+ * Moves in a seesaw motion, and spins the gun around at each end
+ * when it cannot see any enemy robot. When the robot sees and enemy
+ * robot, it will immediately turn the gun and fire at it.
+ *
+ * @author Flemming N. Larsen (original)
+ */
+public class MyFirstJuniorRobot extends JuniorRobot {
+
+	/**
+	 * MyFirstJuniorRobot's run method - Seesaw as default
+	 */
+	public void run() {
+		// Set robot colors
+		setColors(green, black, blue);
+
+		// Seesaw forever
+		while (true) {
+			ahead(100); // Move ahead 100
+			turnGunRight(360); // Spin gun around
+			back(100); // Move back 100
+			turnGunRight(360); // Spin gun around
+		}
+	}
+
+	/**
+	 * When we see a robot, turn the gun towards it and fire
+	 */
+	public void onScannedRobot() {
+		// Turn gun to point at the scanned robot
+		turnGunTo(scannedAngle);
+
+		// Fire!
+		fire(1);
+	}
+
+	/**
+	 * We were hit!  Turn and move perpendicular to the bullet,
+	 * so our seesaw might avoid a future shot.
+	 */
+	public void onHitByBullet() {
+		// Move ahead 100 and in the same time turn left papendicular to the bullet
+		turnAheadLeft(100, 90 - hitByBulletBearing);
+	}
+}
Index: branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/MyFirstJuniorRobot.properties
===================================================================
--- branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/MyFirstJuniorRobot.properties	(revision 13019)
+++ branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/MyFirstJuniorRobot.properties	(revision 13019)
@@ -0,0 +1,9 @@
+#Robot Properties
+#Sun Jul 29 00:07:28 EST 2007
+robot.description=\                             A sample robot\n     Moves in a seesaw motion, and spins the gun around at each end\n     Moves perpendicular to the direction of a bullet that hits it
+robot.webpage=
+robocode.version=1.4
+robot.java.source.included=true
+robot.author.name=Flemming N. Larsen
+robot.classname=sample.MyFirstJuniorRobot
+robot.name=MyFirstJuniorRobot
Index: branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/MyFirstRobot.java
===================================================================
--- branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/MyFirstRobot.java	(revision 13019)
+++ branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/MyFirstRobot.java	(revision 13019)
@@ -0,0 +1,53 @@
+/**
+ * Copyright (c) 2001-2014 Mathew A. Nelson and Robocode contributors
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://robocode.sourceforge.net/license/epl-v10.html
+ */
+package sample;
+
+
+import robocode.HitByBulletEvent;
+import robocode.Robot;
+import robocode.ScannedRobotEvent;
+
+
+/**
+ * MyFirstRobot - a sample robot by Mathew Nelson.
+ * <p/>
+ * Moves in a seesaw motion, and spins the gun around at each end.
+ *
+ * @author Mathew A. Nelson (original)
+ */
+public class MyFirstRobot extends Robot {
+
+	/**
+	 * MyFirstRobot's run method - Seesaw
+	 */
+	public void run() {
+
+		while (true) {
+			ahead(100); // Move ahead 100
+			turnGunRight(360); // Spin gun around
+			back(100); // Move back 100
+			turnGunRight(360); // Spin gun around
+		}
+	}
+
+	/**
+	 * Fire when we see a robot
+	 */
+	public void onScannedRobot(ScannedRobotEvent e) {
+		fire(1);
+	}
+
+	/**
+	 * We were hit!  Turn perpendicular to the bullet,
+	 * so our seesaw might avoid a future shot.
+	 */
+	public void onHitByBullet(HitByBulletEvent e) {
+		turnLeft(90 - e.getBearing());
+	}
+}												
+
Index: branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/MyFirstRobot.properties
===================================================================
--- branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/MyFirstRobot.properties	(revision 13019)
+++ branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/MyFirstRobot.properties	(revision 13019)
@@ -0,0 +1,9 @@
+#Robot Properties
+#Fri Nov 02 17:17:44 EST 2001
+robot.description=\                             A sample robot\n     Moves in a seesaw motion, and spins the gun around at each end\n     Turns perpendicular to the direction of a bullet that hits it
+robot.webpage=http\://robocode.sourceforge.net/myfirstrobot/MyFirstRobot.html
+robocode.version=1.0
+robot.java.source.included=true
+robot.author.name=Mathew Nelson
+robot.classname=sample.MyFirstRobot
+robot.name=MyFirstRobot
Index: branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/PaintingRobot.java
===================================================================
--- branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/PaintingRobot.java	(revision 13019)
+++ branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/PaintingRobot.java	(revision 13019)
@@ -0,0 +1,87 @@
+/**
+ * Copyright (c) 2001-2014 Mathew A. Nelson and Robocode contributors
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://robocode.sourceforge.net/license/epl-v10.html
+ */
+package sample;
+
+
+import robocode.HitByBulletEvent;
+import robocode.Robot;
+import robocode.ScannedRobotEvent;
+
+import java.awt.*;
+
+
+/**
+ * PaintingRobot - a sample robot that demonstrates the onPaint() and
+ * getGraphics() methods.
+ * Also demonstrate feature of debugging properties on RobotDialog
+ * <p/>
+ * Moves in a seesaw motion, and spins the gun around at each end.
+ * When painting is enabled for this robot, a red circle will be painted
+ * around this robot.
+ *
+ * @author Stefan Westen (original SGSample)
+ * @author Pavel Savara (contributor)
+ */
+public class PaintingRobot extends Robot {
+
+	/**
+	 * PaintingRobot's run method - Seesaw
+	 */
+	public void run() {
+		while (true) {
+			ahead(100);
+			turnGunRight(360);
+			back(100);
+			turnGunRight(360);
+		}
+	}
+
+	/**
+	 * Fire when we see a robot
+	 */
+	public void onScannedRobot(ScannedRobotEvent e) {
+		// demonstrate feature of debugging properties on RobotDialog
+		setDebugProperty("lastScannedRobot", e.getName() + " at " + e.getBearing() + " degrees at time " + getTime());
+		
+		fire(1);
+	}
+
+	/**
+	 * We were hit!  Turn perpendicular to the bullet,
+	 * so our seesaw might avoid a future shot.
+	 * In addition, draw orange circles where we were hit.
+	 */
+	public void onHitByBullet(HitByBulletEvent e) {
+		// demonstrate feature of debugging properties on RobotDialog
+		setDebugProperty("lastHitBy", e.getName() + " with power of bullet " + e.getPower() + " at time " + getTime());
+
+		// show how to remove debugging property
+		setDebugProperty("lastScannedRobot", null);
+
+		// gebugging by painting to battle view
+		Graphics2D g = getGraphics();
+
+		g.setColor(Color.orange);
+		g.drawOval((int) (getX() - 55), (int) (getY() - 55), 110, 110);
+		g.drawOval((int) (getX() - 56), (int) (getY() - 56), 112, 112);
+		g.drawOval((int) (getX() - 59), (int) (getY() - 59), 118, 118);
+		g.drawOval((int) (getX() - 60), (int) (getY() - 60), 120, 120);
+
+		turnLeft(90 - e.getBearing());
+	}
+
+	/**
+	 * Paint a red circle around our PaintingRobot
+	 */
+	public void onPaint(Graphics2D g) {
+		g.setColor(Color.red);
+		g.drawOval((int) (getX() - 50), (int) (getY() - 50), 100, 100);
+		g.setColor(new Color(0, 0xFF, 0, 30));
+		g.fillOval((int) (getX() - 60), (int) (getY() - 60), 120, 120);
+	}
+}
Index: branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/PaintingRobot.properties
===================================================================
--- branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/PaintingRobot.properties	(revision 13019)
+++ branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/PaintingRobot.properties	(revision 13019)
@@ -0,0 +1,10 @@
+#Robot Properties
+#Sat Apr 12 14:47:44 EST 2008
+robot.description=\                             A sample robot\n     Demonstrates how to do custom painting and debugging properties.
+robot.webpage=
+robocode.version=1.6
+robot.java.source.included=true
+robot.author.name=Stefan Westen
+robot.classname=sample.PaintingRobot
+robot.name=PaintingRobot
+
Index: branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/RamFire.java
===================================================================
--- branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/RamFire.java	(revision 13019)
+++ branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/RamFire.java	(revision 13019)
@@ -0,0 +1,86 @@
+/**
+ * Copyright (c) 2001-2014 Mathew A. Nelson and Robocode contributors
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://robocode.sourceforge.net/license/epl-v10.html
+ */
+package sample;
+
+
+import robocode.HitRobotEvent;
+import robocode.Robot;
+import robocode.ScannedRobotEvent;
+
+import java.awt.*;
+
+
+/**
+ * RamFire - a sample robot by Mathew Nelson.
+ * <p/>
+ * Drives at robots trying to ram them.
+ * Fires when it hits them.
+ *
+ * @author Mathew A. Nelson (original)
+ * @author Flemming N. Larsen (contributor)
+ */
+public class RamFire extends Robot {
+	int turnDirection = 1; // Clockwise or counterclockwise
+
+	/**
+	 * run: Spin around looking for a target
+	 */
+	public void run() {
+		// Set colors
+		setBodyColor(Color.lightGray);
+		setGunColor(Color.gray);
+		setRadarColor(Color.darkGray);
+
+		while (true) {
+			turnRight(5 * turnDirection);
+		}
+	}
+
+	/**
+	 * onScannedRobot:  We have a target.  Go get it.
+	 */
+	public void onScannedRobot(ScannedRobotEvent e) {
+
+		if (e.getBearing() >= 0) {
+			turnDirection = 1;
+		} else {
+			turnDirection = -1;
+		}
+
+		turnRight(e.getBearing());
+		ahead(e.getDistance() + 5);
+		scan(); // Might want to move ahead again!
+	}
+
+	/**
+	 * onHitRobot:  Turn to face robot, fire hard, and ram him again!
+	 */
+	public void onHitRobot(HitRobotEvent e) {
+		if (e.getBearing() >= 0) {
+			turnDirection = 1;
+		} else {
+			turnDirection = -1;
+		}
+		turnRight(e.getBearing());
+
+		// Determine a shot that won't kill the robot...
+		// We want to ram him instead for bonus points
+		if (e.getEnergy() > 16) {
+			fire(3);
+		} else if (e.getEnergy() > 10) {
+			fire(2);
+		} else if (e.getEnergy() > 4) {
+			fire(1);
+		} else if (e.getEnergy() > 2) {
+			fire(.5);
+		} else if (e.getEnergy() > .4) {
+			fire(.1);
+		}
+		ahead(40); // Ram him again!
+	}
+}
Index: branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/RamFire.properties
===================================================================
--- branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/RamFire.properties	(revision 13019)
+++ branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/RamFire.properties	(revision 13019)
@@ -0,0 +1,9 @@
+#Robot Properties
+#Sun Aug 20 21:17:21 EST 2007
+robot.description=\                             A sample robot\n                  Drives at robots trying to ram them.\n                         Fires when it hits them.
+robot.webpage=
+robocode.version=1.1.2
+robot.java.source.included=true
+robot.author.name=Mathew Nelson and Flemming N. Larsen
+robot.classname=sample.RamFire
+robot.name=RamFire
Index: branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/SittingDuck.data/count.dat
===================================================================
--- branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/SittingDuck.data/count.dat	(revision 13019)
+++ branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/SittingDuck.data/count.dat	(revision 13019)
@@ -0,0 +1,2 @@
+4
+2
Index: branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/SittingDuck.java
===================================================================
--- branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/SittingDuck.java	(revision 13019)
+++ branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/SittingDuck.java	(revision 13019)
@@ -0,0 +1,96 @@
+/**
+ * Copyright (c) 2001-2014 Mathew A. Nelson and Robocode contributors
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://robocode.sourceforge.net/license/epl-v10.html
+ */
+package sample;
+
+
+import robocode.AdvancedRobot;
+import robocode.RobocodeFileOutputStream;
+
+import java.awt.*;
+import java.io.BufferedReader;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.PrintStream;
+
+
+/**
+ * SittingDuck - a sample robot by Mathew Nelson.
+ * <p/>
+ * Along with sitting still doing nothing, this robot demonstrates persistency.
+ *
+ * @author Mathew A. Nelson (original)
+ * @author Flemming N. Larsen (contributor)
+ * @author Andrew Magargle (contributor)
+ */
+public class SittingDuck extends AdvancedRobot {
+	static boolean incrementedBattles = false;
+
+	public void run() {
+		setBodyColor(Color.yellow);
+		setGunColor(Color.yellow);
+
+		int roundCount, battleCount;
+
+		try {
+			BufferedReader reader = null;
+			try {
+				// Read file "count.dat" which contains 2 lines, a round count, and a battle count
+				reader = new BufferedReader(new FileReader(getDataFile("count.dat")));
+
+				// Try to get the counts
+				roundCount = Integer.parseInt(reader.readLine());
+				battleCount = Integer.parseInt(reader.readLine());
+
+			} finally {
+				if (reader != null) {
+					reader.close();
+				}
+			}
+		} catch (IOException e) {
+			// Something went wrong reading the file, reset to 0.
+			roundCount = 0;
+			battleCount = 0;
+		} catch (NumberFormatException e) {
+			// Something went wrong converting to ints, reset to 0
+			roundCount = 0;
+			battleCount = 0;
+		}
+
+		// Increment the # of rounds
+		roundCount++;
+
+		// If we haven't incremented # of battles already,
+		// Note: Because robots are only instantiated once per battle, member variables remain valid throughout it.
+		if (!incrementedBattles) {
+			// Increment # of battles
+			battleCount++;
+			incrementedBattles = true;
+		}
+
+		PrintStream w = null;
+		try {
+			w = new PrintStream(new RobocodeFileOutputStream(getDataFile("count.dat")));
+
+			w.println(roundCount);
+			w.println(battleCount);
+
+			// PrintStreams don't throw IOExceptions during prints, they simply set a flag.... so check it here.
+			if (w.checkError()) {
+				out.println("I could not write the count!");
+			}
+		} catch (IOException e) {
+			out.println("IOException trying to write: ");
+			e.printStackTrace(out);
+		} finally {
+			if (w != null) {
+				w.close();
+			}
+		}
+		out.println("I have been a sitting duck for " + roundCount + " rounds, in " + battleCount + " battles."); 
+	}
+}
Index: branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/SittingDuck.properties
===================================================================
--- branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/SittingDuck.properties	(revision 13019)
+++ branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/SittingDuck.properties	(revision 13019)
@@ -0,0 +1,9 @@
+#Robot Properties
+#Sun Aug 20 21:18:07 EST 2007
+robot.description=\                             A sample robot\nThis robot sits still, and waits to be fired upon.  Exciting stuff\!\nAlso counts how many times he has been a sitting duck.
+robot.webpage=
+robocode.version=1.1.2
+robot.java.source.included=true
+robot.author.name=Mathew Nelson and Flemming N. Larsen
+robot.classname=sample.SittingDuck
+robot.name=SittingDuck
Index: branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/SpinBot.java
===================================================================
--- branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/SpinBot.java	(revision 13019)
+++ branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/SpinBot.java	(revision 13019)
@@ -0,0 +1,70 @@
+/**
+ * Copyright (c) 2001-2014 Mathew A. Nelson and Robocode contributors
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://robocode.sourceforge.net/license/epl-v10.html
+ */
+package sample;
+
+
+import robocode.AdvancedRobot;
+import robocode.HitRobotEvent;
+import robocode.ScannedRobotEvent;
+
+import java.awt.*;
+
+
+/**
+ * SpinBot - a sample robot by Mathew Nelson.
+ * <p/>
+ * Moves in a circle, firing hard when an enemy is detected.
+ *
+ * @author Mathew A. Nelson (original)
+ * @author Flemming N. Larsen (contributor)
+ */
+public class SpinBot extends AdvancedRobot {
+
+	/**
+	 * SpinBot's run method - Circle
+	 */
+	public void run() {
+		// Set colors
+		setBodyColor(Color.blue);
+		setGunColor(Color.blue);
+		setRadarColor(Color.black);
+		setScanColor(Color.yellow);
+
+		// Loop forever
+		while (true) {
+			// Tell the game that when we take move,
+			// we'll also want to turn right... a lot.
+			setTurnRight(10000);
+			// Limit our speed to 5
+			setMaxVelocity(5);
+			// Start moving (and turning)
+			ahead(10000);
+			// Repeat.
+		}
+	}
+
+	/**
+	 * onScannedRobot: Fire hard!
+	 */
+	public void onScannedRobot(ScannedRobotEvent e) {
+		fire(3);
+	}
+
+	/**
+	 * onHitRobot:  If it's our fault, we'll stop turning and moving,
+	 * so we need to turn again to keep spinning.
+	 */
+	public void onHitRobot(HitRobotEvent e) {
+		if (e.getBearing() > -10 && e.getBearing() < 10) {
+			fire(3);
+		}
+		if (e.isMyFault()) {
+			turnRight(10);
+		}
+	}
+}
Index: branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/SpinBot.properties
===================================================================
--- branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/SpinBot.properties	(revision 13019)
+++ branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/SpinBot.properties	(revision 13019)
@@ -0,0 +1,9 @@
+#Robot Properties
+#Sun Aug 20 21:18:07 EST 2006
+robot.description=\                             A sample robot\n\n        Moves in a circle, firing hard when an enemy is detected
+robot.webpage=
+robocode.version=1.1.2
+robot.java.source.included=true
+robot.author.name=Mathew Nelson and Flemming N. Larsen
+robot.classname=sample.SpinBot
+robot.name=SpinBot
Index: branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/Target.java
===================================================================
--- branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/Target.java	(revision 13019)
+++ branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/Target.java	(revision 13019)
@@ -0,0 +1,65 @@
+/**
+ * Copyright (c) 2001-2014 Mathew A. Nelson and Robocode contributors
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://robocode.sourceforge.net/license/epl-v10.html
+ */
+package sample;
+
+
+import robocode.AdvancedRobot;
+import robocode.Condition;
+import robocode.CustomEvent;
+
+import java.awt.*;
+
+
+/**
+ * Target - a sample robot by Mathew Nelson.
+ * <p/>
+ * Sits still. Moves every time energy drops by 20.
+ * This Robot demonstrates custom events.
+ *
+ * @author Mathew A. Nelson (original)
+ * @author Flemming N. Larsen (contributor)
+ */
+public class Target extends AdvancedRobot {
+
+	int trigger; // Keeps track of when to move
+
+	/**
+	 * TrackFire's run method
+	 */
+	public void run() {
+		// Set colors
+		setBodyColor(Color.white);
+		setGunColor(Color.white);
+		setRadarColor(Color.white);
+
+		// Initially, we'll move when life hits 80
+		trigger = 80;
+		// Add a custom event named "trigger hit",
+		addCustomEvent(new Condition("triggerhit") {
+			public boolean test() {
+				return (getEnergy() <= trigger);
+			}
+		});
+	}
+
+	/**
+	 * onCustomEvent handler
+	 */
+	public void onCustomEvent(CustomEvent e) {
+		// If our custom event "triggerhit" went off,
+		if (e.getCondition().getName().equals("triggerhit")) {
+			// Adjust the trigger value, or
+			// else the event will fire again and again and again...
+			trigger -= 20;
+			out.println("Ouch, down to " + (int) (getEnergy() + .5) + " energy.");
+			// move around a bit.
+			turnLeft(65);
+			ahead(100);
+		}
+	}
+}
Index: branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/Target.properties
===================================================================
--- branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/Target.properties	(revision 13019)
+++ branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/Target.properties	(revision 13019)
@@ -0,0 +1,9 @@
+#Robot Properties
+#Sun Aug 20 21:18:46 EST 2006
+robot.description=\                             A sample robot\n              Sits still.  Moves every time energy drops by 20.\n                  This Robot demonstrates custom events.
+robot.webpage=
+robocode.version=1.1.2
+robot.java.source.included=true
+robot.author.name=Mathew Nelson and Flemming N. Larsen
+robot.classname=sample.Target
+robot.name=Target
Index: branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/TrackFire.java
===================================================================
--- branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/TrackFire.java	(revision 13019)
+++ branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/TrackFire.java	(revision 13019)
@@ -0,0 +1,80 @@
+/**
+ * Copyright (c) 2001-2014 Mathew A. Nelson and Robocode contributors
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://robocode.sourceforge.net/license/epl-v10.html
+ */
+package sample;
+
+
+import robocode.Robot;
+import robocode.ScannedRobotEvent;
+import robocode.WinEvent;
+import static robocode.util.Utils.normalRelativeAngleDegrees;
+
+import java.awt.*;
+
+
+/**
+ * TrackFire - a sample robot by Mathew Nelson.
+ * <p/>
+ * Sits still. Tracks and fires at the nearest robot it sees.
+ *
+ * @author Mathew A. Nelson (original)
+ * @author Flemming N. Larsen (contributor)
+ */
+public class TrackFire extends Robot {
+
+	/**
+	 * TrackFire's run method
+	 */
+	public void run() {
+		// Set colors
+		setBodyColor(Color.pink);
+		setGunColor(Color.pink);
+		setRadarColor(Color.pink);
+		setScanColor(Color.pink);
+		setBulletColor(Color.pink);
+
+		// Loop forever
+		while (true) {
+			turnGunRight(10); // Scans automatically
+		}
+	}
+
+	/**
+	 * onScannedRobot:  We have a target.  Go get it.
+	 */
+	public void onScannedRobot(ScannedRobotEvent e) {
+		// Calculate exact location of the robot
+		double absoluteBearing = getHeading() + e.getBearing();
+		double bearingFromGun = normalRelativeAngleDegrees(absoluteBearing - getGunHeading());
+
+		// If it's close enough, fire!
+		if (Math.abs(bearingFromGun) <= 3) {
+			turnGunRight(bearingFromGun);
+			// We check gun heat here, because calling fire()
+			// uses a turn, which could cause us to lose track
+			// of the other robot.
+			if (getGunHeat() == 0) {
+				fire(Math.min(3 - Math.abs(bearingFromGun), getEnergy() - .1));
+			}
+		} // otherwise just set the gun to turn.
+		// Note:  This will have no effect until we call scan()
+		else {
+			turnGunRight(bearingFromGun);
+		}
+		// Generates another scan event if we see a robot.
+		// We only need to call this if the gun (and therefore radar)
+		// are not turning.  Otherwise, scan is called automatically.
+		if (bearingFromGun == 0) {
+			scan();
+		}
+	}
+
+	public void onWin(WinEvent e) {
+		// Victory dance
+		turnRight(36000);
+	}
+}				
Index: branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/TrackFire.properties
===================================================================
--- branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/TrackFire.properties	(revision 13019)
+++ branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/TrackFire.properties	(revision 13019)
@@ -0,0 +1,9 @@
+#Robot Properties
+#Sun Aug 20 21:21:08 EST 2006
+robot.description=\                             A sample robot\n\n             Tracks and fires at the nearest robot it sees
+robot.webpage=
+robocode.version=1.1.2
+robot.java.source.included=true
+robot.author.name=Mathew Nelson and Flemming N. Larsen
+robot.classname=sample.TrackFire
+robot.name=TrackFire
Index: branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/Tracker.java
===================================================================
--- branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/Tracker.java	(revision 13019)
+++ branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/Tracker.java	(revision 13019)
@@ -0,0 +1,144 @@
+/**
+ * Copyright (c) 2001-2014 Mathew A. Nelson and Robocode contributors
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://robocode.sourceforge.net/license/epl-v10.html
+ */
+package sample;
+
+
+import robocode.HitRobotEvent;
+import robocode.Robot;
+import robocode.ScannedRobotEvent;
+import robocode.WinEvent;
+import static robocode.util.Utils.normalRelativeAngleDegrees;
+
+import java.awt.*;
+
+
+/**
+ * Tracker - a sample robot by Mathew Nelson.
+ * <p/>
+ * Locks onto a robot, moves close, fires when close.
+ *
+ * @author Mathew A. Nelson (original)
+ * @author Flemming N. Larsen (contributor)
+ */
+public class Tracker extends Robot {
+	int count = 0; // Keeps track of how long we've
+	// been searching for our target
+	double gunTurnAmt; // How much to turn our gun when searching
+	String trackName; // Name of the robot we're currently tracking
+
+	/**
+	 * run:  Tracker's main run function
+	 */
+	public void run() {
+		// Set colors
+		setBodyColor(new Color(128, 128, 50));
+		setGunColor(new Color(50, 50, 20));
+		setRadarColor(new Color(200, 200, 70));
+		setScanColor(Color.white);
+		setBulletColor(Color.blue);
+
+		// Prepare gun
+		trackName = null; // Initialize to not tracking anyone
+		setAdjustGunForRobotTurn(true); // Keep the gun still when we turn
+		gunTurnAmt = 10; // Initialize gunTurn to 10
+
+		// Loop forever
+		while (true) {
+			// turn the Gun (looks for enemy)
+			turnGunRight(gunTurnAmt);
+			// Keep track of how long we've been looking
+			count++;
+			// If we've haven't seen our target for 2 turns, look left
+			if (count > 2) {
+				gunTurnAmt = -10;
+			}
+			// If we still haven't seen our target for 5 turns, look right
+			if (count > 5) {
+				gunTurnAmt = 10;
+			}
+			// If we *still* haven't seen our target after 10 turns, find another target
+			if (count > 11) {
+				trackName = null;
+			}
+		}
+	}
+
+	/**
+	 * onScannedRobot:  Here's the good stuff
+	 */
+	public void onScannedRobot(ScannedRobotEvent e) {
+
+		// If we have a target, and this isn't it, return immediately
+		// so we can get more ScannedRobotEvents.
+		if (trackName != null && !e.getName().equals(trackName)) {
+			return;
+		}
+
+		// If we don't have a target, well, now we do!
+		if (trackName == null) {
+			trackName = e.getName();
+			out.println("Tracking " + trackName);
+		}
+		// This is our target.  Reset count (see the run method)
+		count = 0;
+		// If our target is too far away, turn and move toward it.
+		if (e.getDistance() > 150) {
+			gunTurnAmt = normalRelativeAngleDegrees(e.getBearing() + (getHeading() - getRadarHeading()));
+
+			turnGunRight(gunTurnAmt); // Try changing these to setTurnGunRight,
+			turnRight(e.getBearing()); // and see how much Tracker improves...
+			// (you'll have to make Tracker an AdvancedRobot)
+			ahead(e.getDistance() - 140);
+			return;
+		}
+
+		// Our target is close.
+		gunTurnAmt = normalRelativeAngleDegrees(e.getBearing() + (getHeading() - getRadarHeading()));
+		turnGunRight(gunTurnAmt);
+		fire(3);
+
+		// Our target is too close!  Back up.
+		if (e.getDistance() < 100) {
+			if (e.getBearing() > -90 && e.getBearing() <= 90) {
+				back(40);
+			} else {
+				ahead(40);
+			}
+		}
+		scan();
+	}
+
+	/**
+	 * onHitRobot:  Set him as our new target
+	 */
+	public void onHitRobot(HitRobotEvent e) {
+		// Only print if he's not already our target.
+		if (trackName != null && !trackName.equals(e.getName())) {
+			out.println("Tracking " + e.getName() + " due to collision");
+		}
+		// Set the target
+		trackName = e.getName();
+		// Back up a bit.
+		// Note:  We won't get scan events while we're doing this!
+		// An AdvancedRobot might use setBack(); execute();
+		gunTurnAmt = normalRelativeAngleDegrees(e.getBearing() + (getHeading() - getRadarHeading()));
+		turnGunRight(gunTurnAmt);
+		fire(3);
+		back(50);
+	}
+
+	/**
+	 * onWin:  Do a victory dance
+	 */
+	public void onWin(WinEvent e) {
+		for (int i = 0; i < 50; i++) {
+			turnRight(30);
+			turnLeft(30);
+		}
+	}
+}
Index: branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/Tracker.properties
===================================================================
--- branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/Tracker.properties	(revision 13019)
+++ branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/Tracker.properties	(revision 13019)
@@ -0,0 +1,9 @@
+#Robot Properties
+#Sun Aug 20 21:20:26 EST 2006
+robot.description=\                             A sample robot\n\n           Locks onto a robot, moves close, fires when close.
+robot.webpage=
+robocode.version=1.1.2
+robot.java.source.included=true
+robot.author.name=Mathew Nelson and Flemming N. Larsen
+robot.classname=sample.Tracker
+robot.name=Tracker
Index: branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/VelociRobot.java
===================================================================
--- branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/VelociRobot.java	(revision 13019)
+++ branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/VelociRobot.java	(revision 13019)
@@ -0,0 +1,59 @@
+/**
+ * Copyright (c) 2001-2014 Mathew A. Nelson and Robocode contributors
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://robocode.sourceforge.net/license/epl-v10.html
+ */
+package sample;
+
+
+import robocode.HitByBulletEvent;
+import robocode.HitWallEvent;
+import robocode.RateControlRobot;
+import robocode.ScannedRobotEvent;
+
+
+/**
+ * This is a sample of a robot using the RateControlRobot class
+ * 
+ * @author Joshua Galecki (original)
+ */
+public class VelociRobot extends RateControlRobot {
+
+	int turnCounter;
+	public void run() {
+
+		turnCounter = 0;
+		setGunRotationRate(15);
+		
+		while (true) {
+			if (turnCounter % 64 == 0) {
+				// Straighten out, if we were hit by a bullet and are turning
+				setTurnRate(0);
+				// Go forward with a velocity of 4
+				setVelocityRate(4);
+			}
+			if (turnCounter % 64 == 32) {
+				// Go backwards, faster
+				setVelocityRate(-6);
+			}
+			turnCounter++;
+			execute();
+		}
+	}
+
+	public void onScannedRobot(ScannedRobotEvent e) {
+		fire(1);
+	}
+
+	public void onHitByBullet(HitByBulletEvent e) {
+		// Turn to confuse the other robot
+		setTurnRate(5);
+	}
+	
+	public void onHitWall(HitWallEvent e) {
+		// Move away from the wall
+		setVelocityRate(-1 * getVelocityRate());
+	}
+}
Index: branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/VelociRobot.properties
===================================================================
--- branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/VelociRobot.properties	(revision 13019)
+++ branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/VelociRobot.properties	(revision 13019)
@@ -0,0 +1,9 @@
+#Robot Properties
+#Tue May 27 14:21:08 EST 2009
+robot.description=\                             A sample robot\n\n                   Demonstrates the RateControlRobot
+robot.webpage=
+robocode.version=1.7.1.3
+robot.java.source.included=true
+robot.author.name=Joshua Galecki
+robot.classname=sample.VelociRobot
+robot.name=VelociRobot
Index: branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/Walls.java
===================================================================
--- branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/Walls.java	(revision 13019)
+++ branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/Walls.java	(revision 13019)
@@ -0,0 +1,94 @@
+/**
+ * Copyright (c) 2001-2014 Mathew A. Nelson and Robocode contributors
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://robocode.sourceforge.net/license/epl-v10.html
+ */
+package sample;
+
+
+import robocode.HitRobotEvent;
+import robocode.Robot;
+import robocode.ScannedRobotEvent;
+
+import java.awt.*;
+
+
+/**
+ * Walls - a sample robot by Mathew Nelson, and maintained by Flemming N. Larsen
+ * <p/>
+ * Moves around the outer edge with the gun facing in.
+ *
+ * @author Mathew A. Nelson (original)
+ * @author Flemming N. Larsen (contributor)
+ */
+public class Walls extends Robot {
+
+	boolean peek; // Don't turn if there's a robot there
+	double moveAmount; // How much to move
+
+	/**
+	 * run: Move around the walls
+	 */
+	public void run() {
+		// Set colors
+		setBodyColor(Color.black);
+		setGunColor(Color.black);
+		setRadarColor(Color.orange);
+		setBulletColor(Color.cyan);
+		setScanColor(Color.cyan);
+
+		// Initialize moveAmount to the maximum possible for this battlefield.
+		moveAmount = Math.max(getBattleFieldWidth(), getBattleFieldHeight());
+		// Initialize peek to false
+		peek = false;
+
+		// turnLeft to face a wall.
+		// getHeading() % 90 means the remainder of
+		// getHeading() divided by 90.
+		turnLeft(getHeading() % 90);
+		ahead(moveAmount);
+		// Turn the gun to turn right 90 degrees.
+		peek = true;
+		turnGunRight(90);
+		turnRight(90);
+
+		while (true) {
+			// Look before we turn when ahead() completes.
+			peek = true;
+			// Move up the wall
+			ahead(moveAmount);
+			// Don't look now
+			peek = false;
+			// Turn to the next wall
+			turnRight(90);
+		}
+	}
+
+	/**
+	 * onHitRobot:  Move away a bit.
+	 */
+	public void onHitRobot(HitRobotEvent e) {
+		// If he's in front of us, set back up a bit.
+		if (e.getBearing() > -90 && e.getBearing() < 90) {
+			back(100);
+		} // else he's in back of us, so set ahead a bit.
+		else {
+			ahead(100);
+		}
+	}
+
+	/**
+	 * onScannedRobot:  Fire!
+	 */
+	public void onScannedRobot(ScannedRobotEvent e) {
+		fire(2);
+		// Note that scan is called automatically when the robot is moving.
+		// By calling it manually here, we make sure we generate another scan event if there's a robot on the next
+		// wall, so that we do not start moving up it until it's gone.
+		if (peek) {
+			scan();
+		}
+	}
+}
Index: branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/Walls.properties
===================================================================
--- branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/Walls.properties	(revision 13019)
+++ branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sample/Walls.properties	(revision 13019)
@@ -0,0 +1,9 @@
+#Robot Properties
+#Sun Aug 20 21:21:53 EST 2006
+robot.description=\                            A sample robot\n\n            Moves around the outer edge with the gun facing in
+robot.webpage=
+robocode.version=1.1.2
+robot.java.source.included=true
+robot.author.name=Mathew Nelson and Flemming N. Larsen
+robot.classname=sample.Walls
+robot.name=Walls
Index: branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sampleex/Alien.java
===================================================================
--- branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sampleex/Alien.java	(revision 13019)
+++ branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sampleex/Alien.java	(revision 13019)
@@ -0,0 +1,82 @@
+/**
+ * Copyright (c) 2001-2014 Mathew A. Nelson and Robocode contributors
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://robocode.sourceforge.net/license/epl-v10.html
+ */
+package sampleex;
+
+
+import robocode.*;
+import robocode.robotinterfaces.IBasicEvents;
+import robocode.robotinterfaces.IBasicRobot;
+import robocode.robotinterfaces.peer.IBasicRobotPeer;
+import robocode.robotinterfaces.peer.IStandardRobotPeer;
+
+import java.io.PrintStream;
+
+
+/**
+ * A sample robot.
+ * Is not inherited from classic base robots, uses new experimental access to RobotPeer.
+ * Use -DEXPERIMENTAL=true to start robocode for this robot.
+ *
+ * @author Pavel Savara (original)
+ */
+public class Alien implements IBasicEvents, IBasicRobot, Runnable {
+
+	PrintStream out;
+	IStandardRobotPeer peer;
+
+	public Runnable getRobotRunnable() {
+		return this;
+	}
+
+	public IBasicEvents getBasicEventListener() {
+		return this;
+	}
+
+	public void setPeer(IBasicRobotPeer iRobotPeer) {
+		peer = (IStandardRobotPeer) iRobotPeer;
+	}
+
+	public void setOut(PrintStream printStream) {
+		out = printStream;
+	}
+
+	public void run() {
+		while (true) {
+			peer.move(100); // Move ahead 100
+			peer.turnGun(Math.PI * 2); // Spin gun around
+			peer.move(-100); // Move back 100
+			peer.turnGun(Math.PI * 2); // Spin gun around
+		}
+	}
+
+	public void onScannedRobot(ScannedRobotEvent e) {
+		peer.setFire(1);
+	}
+
+	public void onHitByBullet(HitByBulletEvent e) {
+		peer.turnBody(Math.PI / 2 + e.getBearingRadians());
+	}
+
+	public void onStatus(StatusEvent e) {}
+
+	public void onBulletHit(BulletHitEvent e) {}
+
+	public void onBulletHitBullet(BulletHitBulletEvent e) {}
+
+	public void onBulletMissed(BulletMissedEvent e) {}
+
+	public void onDeath(DeathEvent e) {}
+
+	public void onHitRobot(HitRobotEvent e) {}
+
+	public void onHitWall(HitWallEvent e) {}
+
+	public void onRobotDeath(RobotDeathEvent e) {}
+
+	public void onWin(WinEvent e) {}
+}
Index: branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sampleex/Alien.properties
===================================================================
--- branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sampleex/Alien.properties	(revision 13019)
+++ branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sampleex/Alien.properties	(revision 13019)
@@ -0,0 +1,9 @@
+#Robot Properties
+#Sun Feb 20 21:16:33 EST 2008
+robot.description=\                             A sample robot\n\n              Is not inherited from classic base robots,\n              uses new experimental access to RobotPeer.
+robot.webpage=zamboch.blogspot.com
+robocode.version=1.6
+robot.java.source.included=true
+robot.author.name=Pavel Savara
+robot.classname=sampleex.Alien
+robot.name=Alien
Index: branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sampleex/AlienComposition.java
===================================================================
--- branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sampleex/AlienComposition.java	(revision 13019)
+++ branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sampleex/AlienComposition.java	(revision 13019)
@@ -0,0 +1,95 @@
+/**
+ * Copyright (c) 2001-2014 Mathew A. Nelson and Robocode contributors
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://robocode.sourceforge.net/license/epl-v10.html
+ */
+package sampleex;
+
+
+import robocode.*;
+import robocode.robotinterfaces.IBasicEvents;
+import robocode.robotinterfaces.IBasicRobot;
+import robocode.robotinterfaces.peer.IBasicRobotPeer;
+import robocode.robotinterfaces.peer.IStandardRobotPeer;
+
+import java.io.PrintStream;
+
+
+/**
+ * A sample robot.
+ * Is not inherited from classic base robots, uses new experimental access to RobotPeer.
+ * Use -DEXPERIMENTAL=true to start robocode for this robot.
+ * This composition version is showing possible decomposition of robot, main runnable and event handler to different classes.
+ *
+ * @author Pavel Savara (original)
+ */
+public class AlienComposition implements IBasicRobot {
+	PrintStream out;
+	IStandardRobotPeer peer;
+	final AlienMain main;
+	final AlienEventHandler handler;
+
+	public AlienComposition() {
+		main = new AlienMain();
+		handler = new AlienEventHandler();
+	}
+
+	public void setPeer(IBasicRobotPeer iRobotPeer) {
+		peer = (IStandardRobotPeer) iRobotPeer;
+	}
+
+	public void setOut(PrintStream printStream) {
+		out = printStream;
+	}
+
+	public Runnable getRobotRunnable() {
+		return main;
+	}
+
+	public IBasicEvents getBasicEventListener() {
+		return handler;
+	}
+
+	class AlienMain implements Runnable {
+		public void run() {
+			while (true) {
+				peer.move(100); // Move ahead 100
+				peer.turnGun(Math.PI * 2); // Spin gun around
+				peer.move(-100); // Move back 100
+				peer.turnGun(Math.PI * 2); // Spin gun around
+			}
+		}
+	}
+
+
+	class AlienEventHandler implements IBasicEvents {
+		public void onScannedRobot(ScannedRobotEvent e) {
+			peer.setFire(1);
+		}
+
+		public void onHitByBullet(HitByBulletEvent e) {
+			peer.turnBody(Math.PI / 2 + e.getBearingRadians());
+		}
+
+		public void onStatus(StatusEvent e) {}
+
+		public void onBulletHit(BulletHitEvent e) {}
+
+		public void onBulletHitBullet(BulletHitBulletEvent e) {}
+
+		public void onBulletMissed(BulletMissedEvent e) {}
+
+		public void onDeath(DeathEvent e) {}
+
+		public void onHitRobot(HitRobotEvent e) {}
+
+		public void onHitWall(HitWallEvent e) {}
+
+		public void onRobotDeath(RobotDeathEvent e) {}
+
+		public void onWin(WinEvent e) {}
+	}
+}
+
Index: branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sampleex/MasterAndSlave.java
===================================================================
--- branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sampleex/MasterAndSlave.java	(revision 13019)
+++ branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sampleex/MasterAndSlave.java	(revision 13019)
@@ -0,0 +1,115 @@
+/**
+ * Copyright (c) 2001-2014 Mathew A. Nelson and Robocode contributors
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://robocode.sourceforge.net/license/epl-v10.html
+ */
+package sampleex;
+
+
+import robocode.AdvancedRobot;
+import robocode.HitByBulletEvent;
+import robocode.ScannedRobotEvent;
+import robocode.robotinterfaces.IAdvancedEvents;
+import robocode.robotinterfaces.IAdvancedRobot;
+import robocode.robotinterfaces.IBasicEvents;
+import robocode.robotinterfaces.IInteractiveEvents;
+import robocode.robotinterfaces.peer.IBasicRobotPeer;
+
+import java.io.PrintStream;
+
+
+/**
+ * @author Pavel Savara (original)
+ */
+public class MasterAndSlave extends MasterBase implements IAdvancedRobot {
+
+	/**
+	 * This is not showing any aditional qualities over normal MyFirst robot.
+	 * But it could, because architecture is no more tied by inheritance from Robot base class.
+	 */
+	public void run() {
+		while (true) {
+			ahead(100); // Move ahead 100
+			turnGunRight(360); // Spin gun around
+			back(100); // Move back 100
+			turnGunRight(360); // Spin gun around
+		}
+	}
+
+	public void onScannedRobot(ScannedRobotEvent e) {
+		fire(1);
+	}
+
+	public void onHitByBullet(HitByBulletEvent e) {
+		turnLeft(90 - e.getBearing());
+	}
+
+	public IInteractiveEvents getInteractiveEventListener() {
+		return null;
+	}
+}
+
+
+/**
+ * Infrastructure base class, for helpers and boring implementation details
+ */
+abstract class MasterBase {
+
+	public MasterBase() {
+		helperRobot = new Slave(this);
+	}
+
+	private final AdvancedRobot helperRobot;
+
+	public IAdvancedEvents getAdvancedEventListener() {
+		return helperRobot;
+	}
+
+	public IInteractiveEvents getSystemEventListener() {
+		return helperRobot;
+	}
+
+	public Runnable getRobotRunnable() {
+		return helperRobot;
+	}
+
+	public IBasicEvents getBasicEventListener() {
+		return helperRobot;
+	}
+
+	public void setPeer(IBasicRobotPeer robotPeer) {
+		helperRobot.setPeer(robotPeer);
+	}
+
+	public void setOut(PrintStream printStream) {
+		helperRobot.setOut(printStream);
+	}
+
+	public void turnGunRight(double degrees) {
+		helperRobot.turnGunRight(degrees);
+	}
+
+	public void turnLeft(double degrees) {
+		helperRobot.turnLeft(degrees);
+	}
+
+	public void ahead(double distance) {
+		helperRobot.ahead(distance);
+	}
+
+	public void back(double distance) {
+		helperRobot.back(distance);
+	}
+
+	public void fire(double power) {
+		helperRobot.fire(power);
+	}
+
+	public void onScannedRobot(ScannedRobotEvent e) {}
+
+	public void onHitByBullet(HitByBulletEvent e) {}
+
+	public void run() {}
+}
Index: branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sampleex/MasterAndSlave.properties
===================================================================
--- branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sampleex/MasterAndSlave.properties	(revision 13019)
+++ branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sampleex/MasterAndSlave.properties	(revision 13019)
@@ -0,0 +1,9 @@
+#Robot Properties
+#Sun Feb 20 21:16:33 EST 2008
+robot.description=\                             A sample robot\n\n              Is not inherited from classic base robots,\n              uses new experimental access to RobotPeer.
+robot.webpage=zamboch.blogspot.com
+robocode.version=1.6
+robot.java.source.included=true
+robot.author.name=Pavel Savara
+robot.classname=sampleex.MasterAndSlave
+robot.name=MasterAndSlave
Index: branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sampleex/ProxyOfGreyEminence.java
===================================================================
--- branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sampleex/ProxyOfGreyEminence.java	(revision 13019)
+++ branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sampleex/ProxyOfGreyEminence.java	(revision 13019)
@@ -0,0 +1,73 @@
+/**
+ * Copyright (c) 2001-2014 Mathew A. Nelson and Robocode contributors
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://robocode.sourceforge.net/license/epl-v10.html
+ */
+package sampleex;
+
+
+import robocode.AdvancedRobot;
+import robocode.HitByBulletEvent;
+import robocode.ScannedRobotEvent;
+
+
+/**
+ * This is just dummy proxy, it's hiding the Eminence and
+ * giving it more freedom to inherit from Monk rather than from Robot.
+ *
+ * @author Pavel Savara (original)
+ */
+public class ProxyOfGreyEminence extends AdvancedRobot {
+	private final GreyEminence monk;
+
+	public ProxyOfGreyEminence() {
+		monk = new GreyEminence(this);
+	}
+
+	public void onHitByBullet(HitByBulletEvent event) {
+		monk.onHitByBullet(event);
+	}
+
+	public void onScannedRobot(ScannedRobotEvent event) {
+		monk.onScannedRobot(event);
+	}
+
+	public void run() {
+		monk.run();
+	}
+}
+
+
+/**
+ * The power behind the throne.
+ */
+class GreyEminence extends RegullarMonk {
+	private final ProxyOfGreyEminence proxy;
+
+	public GreyEminence(ProxyOfGreyEminence proxy) {
+		this.proxy = proxy;
+	}
+
+	/**
+	 * This is not showing any aditional qualities over normal MyFirst robot.
+	 * But it could, because architecture is no more tied by inheritance from Robot base class.
+	 */
+	public void run() {
+		while (true) {
+			proxy.ahead(100); // Move ahead 100
+			proxy.turnGunRight(360); // Spin gun around
+			proxy.back(100); // Move back 100
+			proxy.turnGunRight(360); // Spin gun around
+		}
+	}
+
+	public void onScannedRobot(ScannedRobotEvent e) {
+		proxy.fire(1);
+	}
+
+	public void onHitByBullet(HitByBulletEvent e) {
+		proxy.turnLeft(90 - e.getBearing());
+	}
+}
Index: branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sampleex/ProxyOfGreyEminence.properties
===================================================================
--- branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sampleex/ProxyOfGreyEminence.properties	(revision 13019)
+++ branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sampleex/ProxyOfGreyEminence.properties	(revision 13019)
@@ -0,0 +1,9 @@
+#Robot Properties
+#Sun Feb 20 21:16:33 EST 2008
+robot.description=\                             A sample robot\n\n              Is not inherited from classic base robots,\n              uses new experimental access to RobotPeer.
+robot.webpage=zamboch.blogspot.com
+robocode.version=1.6
+robot.java.source.included=true
+robot.author.name=Pavel Savara
+robot.classname=sampleex.ProxyOfGreyEminence
+robot.name=ProxyOfGreyEminence
Index: branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sampleex/RegullarMonk.java
===================================================================
--- branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sampleex/RegullarMonk.java	(revision 13019)
+++ branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sampleex/RegullarMonk.java	(revision 13019)
@@ -0,0 +1,17 @@
+/**
+ * Copyright (c) 2001-2014 Mathew A. Nelson and Robocode contributors
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://robocode.sourceforge.net/license/epl-v10.html
+ */
+package sampleex;
+
+
+/**
+ * Monk of a order. Implements anything too boring for Eminence.
+ * The infractructure base class.
+ *
+ * @author Pavel Savara (original)
+ */
+abstract class RegullarMonk {}
Index: branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sampleex/Slave.java
===================================================================
--- branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sampleex/Slave.java	(revision 13019)
+++ branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sampleex/Slave.java	(revision 13019)
@@ -0,0 +1,40 @@
+/**
+ * Copyright (c) 2001-2014 Mathew A. Nelson and Robocode contributors
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://robocode.sourceforge.net/license/epl-v10.html
+ */
+package sampleex;
+
+
+import robocode.AdvancedRobot;
+import robocode.HitByBulletEvent;
+import robocode.ScannedRobotEvent;
+
+
+/**
+ * This is robot derived from AdvancedRobot.
+ * Only reason to use this inheritance and this class is that external robots are unable to call RobotPeer directly.
+ *
+ * @author Pavel Savara (original)
+ */
+class Slave extends AdvancedRobot {
+	final MasterBase parent;
+
+	public Slave(MasterBase parent) {
+		this.parent = parent;
+	}
+
+	public void run() {
+		parent.run();
+	}
+
+	public void onScannedRobot(ScannedRobotEvent e) {
+		parent.onScannedRobot(e);
+	}
+
+	public void onHitByBullet(HitByBulletEvent e) {
+		parent.onHitByBullet(e);
+	}
+}
Index: branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/samplesentry/BorderGuard.java
===================================================================
--- branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/samplesentry/BorderGuard.java	(revision 13019)
+++ branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/samplesentry/BorderGuard.java	(revision 13019)
@@ -0,0 +1,716 @@
+/**
+ * Copyright (c) 2001-2014 Mathew A. Nelson and Robocode contributors
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://robocode.sourceforge.net/license/epl-v10.html
+ */
+package samplesentry;
+
+
+import robocode.*;
+import robocode.util.Utils;
+
+import java.awt.BasicStroke;
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.geom.Point2D;
+import java.util.*;
+
+
+/**
+ * BorderGuard - is a sample robot that demonstrates how the BorderSentry interface can be used for
+ * creating a robot that guards the border area of the battle field, and which is efficient against
+ * robots trying to hide at corners and robots sneaking around near the borders.
+ * <p>
+ * This robot is somewhat advanced due to:<br>
+ * 1) it uses linear targeting for predicting how to hit robots that moves in straight lines.<br>
+ * 2) it will only fire at a robot, if it figures out that its bullets will do damage to that
+ * particular robot, e.g. when the robots predicted future position will be within the sentry border
+ * attack range.<br>
+ * 3) it has an efficient scanner that keeps the scan angle as little as possible to get as new
+ * scanned data for enemy robots as possible.<br>
+ * 4) it picks a target robot to fire at, which is the nearest robot our robot will be able to
+ * damage (by predicting its future position using linear targeting).<br>
+ * 5) it only moves along the borders of the battle field and constantly changes its direction, so
+ * it is not an easy target, and it will try to get as close to its target robot as possible.<br>
+ * <p>
+ * Lots of improvements can be made to this robot by copying it - making it even stronger. The
+ * intention with of this sample robot is to serve as a more advanced example of how a AdvancedRobot
+ * can be made, and how it can be structured as most sample robots are far simpler.
+ * <p>
+ * 
+ * Credits goes to the hard working Robocoders at the RoboWiki. :-)
+ * <p>
+ * 
+ * This robot makes use of the Oldest Scanned melee scanner from the RoboWiki:<br>
+ * http://robowiki.net/wiki/Melee_Radar
+ * <p>
+ * 
+ * In addition, it makes use of the Exact Non-iterative Solution for Linear Targeting from the
+ * RoboWiki:<br>
+ * http://robowiki.net/wiki/Linear_Targeting
+ * 
+ * @author Flemming N. Larsen
+ * 
+ * @version 1.0
+ * 
+ * @since 1.9.0.0
+ */
+public class BorderGuard extends AdvancedRobot implements BorderSentry {
+
+	// Constants
+	final double FIREPOWER = 3; // Max. power => violent as this robot can afford it!
+	final double HALF_ROBOT_SIZE = 18; // Robot size is 36x36 units, so the half size is 18 units
+
+	// Map containing data for all scanned robots.
+	// The key to the map is a robot name and the value is an object containing robot data.
+	final Map<String, RobotData> enemyMap;
+
+	// Scanning direction, where the radar turns to the right with positive values, and turns
+	// to the left with negative values.
+	double scanDir = 1;
+
+	// Oldest scanned robot. Can be null.
+	RobotData oldestScanned;
+
+	// Target robot for the gun. Can be null meaning that there is currently no target robot.
+	RobotData target;
+
+	// Last time when the robot shifted its direction
+	long lastDirectionShift;
+
+	// Current direction, where 1 means ahead (forward) and -1 means back
+	int direction = 1;
+
+	/**
+	 * Constructs this robot.
+	 */
+	public BorderGuard() {
+		// We initialize a specialized HashMap that uses a linked list for the access order.
+		// This means that the last accessed robot entry is listed first, when we iterate over its
+		// values. This robot always sweep the radar towards the oldest scanned robot.
+		enemyMap = new LinkedHashMap<String, RobotData>(5, 2, true);
+	}
+
+	/**
+	 * Main method that is called by the game when the robot engage in the next round of a battle.
+	 */
+	@Override
+	public void run() {
+		// Do initialization stuff here before the loop
+		initialize();
+
+		// Loop forever. If the robot does not take action, the game will disable our robot!
+		while (true) {
+			// Handle a single turn...
+
+			// Handle the radar that scans enemy robots
+			handleRadar();
+			// Handle the gun by turning it and fire at our target
+			handleGun();
+			// Move the robot around on the battlefield
+			moveRobot();
+
+			// Scan for other robots. Note that this method will execute all pending commands for
+			// the next turn. Hence, scan() ends the turn for our robot.
+			scan();
+		}
+	}
+
+	/**
+	 * This method is called by the game when your robot sees another robot, i.e. when the robot's
+	 * radar scan "hits" another robot.
+	 * 
+	 * @param scannedRobotEvent
+	 *            is a ScannedRobotEvent event.
+	 */
+	@Override
+	public void onScannedRobot(ScannedRobotEvent scannedRobotEvent) {
+		// Check that the scanned robot is not a sentry robot
+		if (!scannedRobotEvent.isSentryRobot()) {
+			// The scanned robot is not a sentry robot...
+
+			// Update the enemy map
+			updateEnemyMap(scannedRobotEvent);
+
+			// Update the scan direction
+			updateScanDirection(scannedRobotEvent);
+
+			// Update enemy target positions
+			updateEnemyTargetPositions();
+		}
+	}
+
+	/**
+	 * This method is called by the game when another robot dies.
+	 * 
+	 * @param robotDeathEvent
+	 *            is the RobotDeathEvent that occurs, when another robot dies, which contains data
+	 *            for the robot that died.
+	 */
+	@Override
+	public void onRobotDeath(RobotDeathEvent robotDeathEvent) {
+		// Gets the name of the robot that died
+		final String deadRobotName = robotDeathEvent.getName();
+
+		// Remove the robot data for the robot that died from the enemy map
+		enemyMap.remove(deadRobotName);
+
+		// Remove the data entry for the oldest scanned robot, if we have such an entry
+		if (oldestScanned != null && oldestScanned.name.equals(deadRobotName)) {
+			oldestScanned = null;
+		}
+		if (target != null && target.name.equals(deadRobotName)) {
+			target = null;
+		}
+	}
+
+	/**
+	 * This method is called by the every time the robot is painted. In order to see the painting,
+	 * make sure to enable the Paint button on the robot console for this robot.
+	 * 
+	 * @param g
+	 *            is the {@link Graphics2D} object, which is the graphics context used for painting
+	 *            various shapes like rectangles, circles, lines etc. on top of the battlefield for
+	 *            debugging graphics.
+	 */
+	@Override
+	public void onPaint(Graphics2D g) {
+		// Set the line width to 2 pixels
+		g.setStroke(new BasicStroke(2f));
+
+		// Prepare colors for painting the scanned coordinate and target coordinate
+		Color color1 = new Color(0x00, 0xFF, 0x00, 0x40); // Green with 25% alpha blending
+		Color color2 = new Color(0xFF, 0xFF, 0x00, 0x40); // Yellow with 25% alhpa blending
+
+		// Paint a two circles for each robot in the enemy map. One circle where the robot was
+		// scanned the last time, and another circle where our robot must point the gun in order to
+		// hit it (target coordinate). In addition, a line is drawn between these circles.
+		for (RobotData robot : enemyMap.values()) {
+			// Paint the two circles and a line
+			fillCircle(g, robot.scannedX, robot.scannedY, color1); // scanned coordinate
+			fillCircle(g, robot.targetX, robot.targetY, color2); // target coordinate
+			g.setColor(color1);
+			g.drawLine((int) robot.scannedX, (int) robot.scannedY, (int) robot.targetX, (int) robot.targetY);
+		}
+
+		// Paint a two circles for the target robot. One circle where the robot was
+		// scanned the last time, and another circle where our robot must point the gun in order to
+		// hit it (target coordinate). In addition, a line is drawn between these circles.
+		if (target != null) {
+			// Prepare colors for painting the scanned coordinate and target coordinate
+			color1 = new Color(0xFF, 0x7F, 0x00, 0x40); // Orange with 25% alpha blending
+			color2 = new Color(0xFF, 0x00, 0x00, 0x80); // Red with 50% alpha blending
+
+			// Paint the two circles and a line
+			fillCircle(g, target.scannedX, target.scannedY, color1); // scanned coordinate
+			fillCircle(g, target.targetX, target.targetY, color2); // target coordinate
+			g.setColor(color1);
+			g.drawLine((int) target.scannedX, (int) target.scannedY, (int) target.targetX, (int) target.targetY);
+		}
+	}
+
+	/**
+	 * Initializes this robot before a new round in a battle.
+	 */
+	private void initialize() {
+		// Let the robot body, gun, and radar turn independently of each other
+		setAdjustRadarForGunTurn(true);
+		setAdjustGunForRobotTurn(true);
+
+		// Set robot colors
+		setBodyColor(new Color(0x5C, 0x33, 0x17)); // Chocolate Brown
+		setGunColor(new Color(0x45, 0x8B, 0x74)); // Aqua Marine
+		setRadarColor(new Color(0xD2, 0x69, 0x1E)); // Orange Chocolate
+		setBulletColor(new Color(0xFF, 0xD3, 0x9B)); // Burly wood
+		setScanColor(new Color(0xCA, 0xFF, 0x70)); // Olive Green
+	}
+
+	/**
+	 * This method handles the radar that scans for enemy robots.
+	 */
+	private void handleRadar() {
+		// Set the radar to turn infinitely to the right if the scan direction is positive;
+		// otherwise the radar is moved to the left, if the scan direction is negative.
+		// Notice that onScannedRobot(ScannedRobotEvent) is responsible for determining the scan
+		// direction.
+		setTurnRadarRightRadians(scanDir * Double.POSITIVE_INFINITY);
+	}
+
+	/**
+	 * Method that handles the gun be turning it and fire at a target.
+	 */
+	private void handleGun() {
+		// Update our target robot to fire at
+		updateTarget();
+		// Update the gun direction
+		updateGunDirection();
+		// Fires the gun, when it is ready
+		fireGunWhenReady();
+	}
+
+	/**
+	 * Method that moves our robot around the battlefield.
+	 */
+	private void moveRobot() {
+
+		// The movement strategy is to move as close to our target robot as possible.
+		// Our robot should move along the borders all the time, vertically or horizontally.
+		// When we get close to our target, or have no where to go, our robot should shift its
+		// direction from side to side so it does not stand still at any time.
+		// If the robot stands still, it will be an easy target for enemy robots.
+
+		int newDirection = direction;
+
+		// Get closer to our target if we have a target robot
+		if (target != null) {
+			// Calculate the range from the walls/borders, our robot should keep within
+			int borderRange = getSentryBorderSize() - 20;
+
+			// The horizontal and vertical flags are used for determining, if our robot should
+			// move horizontal or vertical.
+			boolean horizontal = false;
+			boolean vertical = false;
+
+			// Initialize the new heading of the robot to the current heading of the robot
+			double newHeading = getHeadingRadians();
+
+			// Check if our robot is at the upper or lower border and hence should move horizontally
+			if (getY() < borderRange || getY() > getBattleFieldHeight() - borderRange) {
+				horizontal = true;
+			}
+			// Check if our robot is at the left or right border and hence should move vertically
+			if (getX() < borderRange || getX() > getBattleFieldWidth() - borderRange) {
+				vertical = true;
+			}
+
+			// If we are in one of the corners of the battlefield, we could move both horizontally
+			// or vertically.
+			// In this situation, we need to choose one of the two directions.
+			if (horizontal && vertical) {
+				// If the horizontal distance to our target is lesser than the vertical distance,
+				// then we choose to move vertically, and hence we clear the horizontal flag.
+				if (Math.abs(target.targetX - getX()) <= Math.abs(target.targetY - getY())) {
+					horizontal = false; // Do not move horizontally => move vertically
+				}
+			}
+			// Adjust the heading of our robot with 90 degrees, if it must move horizontally.
+			// Otherwise the calculated heading is towards moving vertically.
+			if (horizontal) {
+				newHeading -= Math.PI / 2;
+			}
+			// Set the robot to turn left the amount of radians we have just calculated
+			setTurnLeftRadians(Utils.normalRelativeAngle(newHeading));
+
+			// Check if our robot has finished turning, i.e. has less than 1 degrees left to turn
+			if (Math.abs(getTurnRemaining()) < 1 || Math.abs(getVelocity()) < 0.01) {
+				// If we should move horizontally, the set the robot to move ahead with the
+				// horizontal distance to the target robot. Otherwise, use the vertical distance.
+				double delta; // delta is the delta distance to move
+				if (horizontal) {
+					delta = target.targetX - getX();
+				} else {
+					delta = target.targetY - getY();
+				}
+				setAhead(delta);
+
+				// Set the new direction of our robot to 1 (meaning move forward) if the delta
+				// distance is positive; otherwise it is set to -1 (meaning move backward).
+				newDirection = delta > 0 ? 1 : -1;
+
+				// Check if more than 10 turns have past since we changed the direction the last
+				// time
+				if (getTime() - lastDirectionShift > 10) {
+					// If so, set the new direction to be the reverse direction if the velocity < 1
+					if (Math.abs(getVelocity()) < 1) {
+						newDirection = direction * -1;
+					}
+					// Check if the direction really changed
+					if (newDirection != direction) {
+						// If the new direction != current direction, then set the current direction
+						// to be the new direction and save the current time so we know when we
+						// changed the direction the last time.
+						direction = newDirection;
+						lastDirectionShift = getTime();
+					}
+				}
+			}
+		}
+		// Set ahead 100 units forward or backward depending on the direction
+		setAhead(100 * direction);
+	}
+
+	/**
+	 * Method the updates the enemy map based on new scan data for a scanned robot.
+	 * 
+	 * @param scannedRobotEvent
+	 *            is a ScannedRobotEvent event containing data about a scanned robot.
+	 */
+	private void updateEnemyMap(ScannedRobotEvent scannedRobotEvent) {
+		// Gets the name of the scanned robot
+		final String scannedRobotName = scannedRobotEvent.getName();
+
+		// Get robot data for the scanned robot, if we have an entry in the enemy map
+		RobotData scannedRobot = enemyMap.get(scannedRobotName);
+
+		// Check if data entry exists for the scanned robot
+		if (scannedRobot == null) {
+			// No data entry exists => Create a new data entry for the scanned robot
+			scannedRobot = new RobotData(scannedRobotEvent);
+			// Put the new data entry into the enemy map
+			enemyMap.put(scannedRobotName, scannedRobot);
+		} else {
+			// Data entry exists => Update the current entry with new scanned data
+			scannedRobot.update(scannedRobotEvent);
+		}
+	}
+
+	/**
+	 * Method that updates the direction of the radar based on new scan data for a scanned robot.
+	 * 
+	 * @param scannedRobotEvent
+	 *            is a ScannedRobotEvent event containing data about a scanned robot.
+	 */
+	private void updateScanDirection(ScannedRobotEvent scannedRobotEvent) {
+		// Gets the name of the scanned robot
+		final String scannedRobotName = scannedRobotEvent.getName();
+
+		// Change the scanning direction if and only if we have no record for the oldest scanned
+		// robot or the scanned robot IS the oldest scanned robot (based on the name) AND the enemy
+		// map contains scanned data entries for ALL robots (the size of the enemy map is equal to
+		// the number of opponent robots found by calling the getOthers() method).
+		if ((oldestScanned == null || scannedRobotName.equals(oldestScanned.name)) && enemyMap.size() == getOthers()) {
+
+			// Get the oldest scanned robot data from our LinkedHashMap, where the first value
+			// contains the oldest accessed entry, which is the robot we need to get.
+			RobotData oldestScannedRobot = enemyMap.values().iterator().next();
+
+			// Get the recent scanned position (x,y) of the oldest scanned robot
+			double x = oldestScannedRobot.scannedX;
+			double y = oldestScannedRobot.scannedY;
+
+			// Get the heading of our robot
+			double ourHeading = getRadarHeadingRadians();
+
+			// Calculate the bearing to the oldest scanned robot.
+			// The bearing is the delta angle between the heading of our robot and the other robot,
+			// which can be a positive or negative angle.
+			double bearing = bearingTo(ourHeading, x, y);
+
+			// Update the scan direction based on the bearing.
+			// If the bearing is positive, the radar will be moved to the right.
+			// If the bearing is negative, the radar will be moved to the left.
+			scanDir = bearing;
+		}
+	}
+
+	/**
+	 * Updates the target positions for all enemies. The target position is the position our robot
+	 * must fire at in order to hit the target robot. This robot uses Linear Targeting (Exact
+	 * Non-iterative Solution) as described on the RoboWiki here:
+	 * http://robowiki.net/wiki/Linear_Targeting
+	 */
+	private void updateEnemyTargetPositions() {
+		// Go thru all robots in the enemy map
+		for (RobotData enemy : enemyMap.values()) {
+
+			// Variables prefixed with e- refer to enemy and b- refer to bullet
+			double bV = Rules.getBulletSpeed(FIREPOWER);
+			double eX = enemy.scannedX;
+			double eY = enemy.scannedY;
+			double eV = enemy.scannedVelocity;
+			double eH = enemy.scannedHeading;
+
+			// These constants make calculating the quadratic coefficients below easier
+			double A = (eX - getX()) / bV;
+			double B = (eY - getY()) / bV;
+			double C = eV / bV * Math.sin(eH);
+			double D = eV / bV * Math.cos(eH);
+
+			// Quadratic coefficients: a*(1/t)^2 + b*(1/t) + c = 0
+			double a = A * A + B * B;
+			double b = 2 * (A * C + B * D);
+			double c = (C * C + D * D - 1);
+
+			// If the discriminant of the quadratic formula is >= 0, we have a solution meaning that
+			// at some time, t, the bullet will hit the enemy robot if we fire at it now.
+			double discrim = b * b - 4 * a * c;
+			if (discrim >= 0) {
+				// Reciprocal of quadratic formula. Calculate the two possible solution for the
+				// time, t
+				double t1 = 2 * a / (-b - Math.sqrt(discrim));
+				double t2 = 2 * a / (-b + Math.sqrt(discrim));
+
+				// Choose the minimum positive time or select the one closest to 0, if the time is
+				// negative
+				double t = Math.min(t1, t2) >= 0 ? Math.min(t1, t2) : Math.max(t1, t2);
+
+				// Calculate the target position (x,y) for the enemy. That is the point that our gun
+				// should point at in order to hit the enemy at the time, t.
+				double targetX = eX + eV * t * Math.sin(eH);
+				double targetY = eY + eV * t * Math.cos(eH);
+
+				// Assume enemy stops at walls. Hence, we limit that target position at the walls.
+				double minX = HALF_ROBOT_SIZE;
+				double minY = HALF_ROBOT_SIZE;
+				double maxX = getBattleFieldWidth() - HALF_ROBOT_SIZE;
+				double maxY = getBattleFieldHeight() - HALF_ROBOT_SIZE;
+
+				enemy.targetX = limit(targetX, minX, maxX);
+				enemy.targetY = limit(targetY, minY, maxY);
+			}
+		}
+	}
+
+	/**
+	 * Updates which enemy robot from the enemy map that should be our current target.
+	 */
+	private void updateTarget() {
+		// Set target to null, meaning that we have no target robot yet
+		target = null;
+
+		// Create a list over possible target robots that is a copy of robot data from the enemy map
+		List<RobotData> targets = new ArrayList<RobotData>(enemyMap.values());
+
+		// Run thru all the possible target robots and remove those that are outside the attack
+		// range for this border sentry robot as our robot cannot do harm to robots outside its
+		// range.
+		Iterator<RobotData> it = targets.iterator();
+		while (it.hasNext()) {
+			RobotData robot = it.next();
+			if (isOutsideAttackRange(robot.targetX, robot.targetY)) {
+				it.remove();
+			}
+		}
+
+		// Set the target robot to be the one among all possible target robots that is closest to
+		// our robot.
+		double minDist = Double.POSITIVE_INFINITY;
+		for (RobotData robot : targets) {
+			double dist = distanceTo(robot.targetX, robot.targetY);
+			if (dist < minDist) {
+				minDist = dist;
+				target = robot;
+			}
+		}
+
+		// If we still haven't got a target robot, then take the first one from our list of target
+		// robots if the list is not empty.
+		if (target == null && targets.size() > 0) {
+			target = targets.get(0);
+		}
+	}
+
+	/**
+	 * Method that updates the gun direction to point at the current target.
+	 */
+	private void updateGunDirection() {
+		// Only update the gun direction, if we have a current target
+		if (target != null) {
+			// Calculate the bearing between the gun and the target, which can be positive or
+			// negative
+			double targetBearing = bearingTo(getGunHeadingRadians(), target.targetX, target.targetY);
+			// Set the gun to turn right the amount of radians defined by the bearing to the target
+			setTurnGunRightRadians(targetBearing); // positive => turn right, negative => turn left
+		}
+	}
+
+	/**
+	 * Method that fires a bullet when the gun is ready to fire.
+	 */
+	private void fireGunWhenReady() {
+		// We only fire the fun, when we have a target robot
+		if (target != null) {
+			// Only fire when the angle of the gun is pointing at our (virtual) target robot
+
+			// Calculate the distance between between our robot and the target robot
+			double dist = distanceTo(target.targetX, target.targetY);
+			// Angle that "covers" the the target robot from its center to its edge
+			double angle = Math.atan(HALF_ROBOT_SIZE / dist);
+
+			// Check if the remaining angle (turn) to move the gun is less than our calculated cover
+			// angle
+			if (Math.abs(getGunTurnRemaining()) < angle) {
+				// If so, our gun should be pointing at our target so we can hit it => fire!!
+				setFire(FIREPOWER);
+			}
+		}
+	}
+
+	/**
+	 * Method that checks if a coordinate (x,y) is outside the Border Sentry's attack range.
+	 * 
+	 * @param x
+	 *            is the x coordinate.
+	 * @param y
+	 *            is the y coordinate.
+	 * @return true if the coordinate is outside the attack range; false otherwise.
+	 */
+	private boolean isOutsideAttackRange(double x, double y) {
+		double minBorderX = getSentryBorderSize();
+		double minBorderY = getSentryBorderSize();
+		double maxBorderX = getBattleFieldWidth() - getSentryBorderSize();
+		double maxBorderY = getBattleFieldHeight() - getSentryBorderSize();
+
+		return (x > minBorderX) && (y > minBorderY) && (x < maxBorderX) && (y < maxBorderY);
+	}
+
+	/**
+	 * Method that returns a value that is guaranteed to be within a value range defined by a
+	 * minimum and maximum value based on an input value.<br>
+	 * If the input value is lesser than the minimum value, the returned value will be set to the
+	 * minimum value.<br>
+	 * If the input value is greater than the maximum value, the returned value will be set to the
+	 * maximum value.<br>
+	 * Otherwise the returned value will be equal to the input value.
+	 * 
+	 * @param value
+	 *            is the input value to limit.
+	 * @param min
+	 *            is the allowed minimum value.
+	 * @param max
+	 *            is the allowed maximum value.
+	 * @return the limited input value that is guaranteed to be within the specified minimum and
+	 *         maximum range.
+	 */
+	private double limit(double value, double min, double max) {
+		return Math.min(max, Math.max(min, value));
+	}
+
+	/**
+	 * Methods that returns the distance to a coordinate (x,y) from our robot.
+	 * 
+	 * @param x
+	 *            is the x coordinate.
+	 * @param y
+	 *            is the y coordinate.
+	 * @return the distance to the coordinate (x,y).
+	 */
+	private double distanceTo(double x, double y) {
+		return Math.hypot(x - getX(), y - getY());
+	}
+
+	/**
+	 * Method that returns the angle to a coordinate (x,y) from our robot.
+	 * 
+	 * @param x
+	 *            is the x coordinate.
+	 * @param y
+	 *            is the y coordinate.
+	 * @return the angle to the coordinate (x,y).
+	 */
+	private double angleTo(double x, double y) {
+		return Math.atan2(x - getX(), y - getY());
+	}
+
+	/**
+	 * Method that returns the bearing to a coordinate (x,y) from the position and heading of our
+	 * robot. The bearing is the delta angle between the heading of our robot and the angle of the
+	 * specified coordinate.
+	 * 
+	 * @param x
+	 *            is the x coordinate.
+	 * @param y
+	 *            is the y coordinate.
+	 * @return the angle to the coordinate (x,y).
+	 */
+	private double bearingTo(double heading, double x, double y) {
+		return Utils.normalRelativeAngle(angleTo(x, y) - heading);
+	}
+
+	/**
+	 * Method that paints a filled circle at the specified coordinate (x,y) and given color. The
+	 * circle will have a radius of 20 pixels (meaning that the diameter will be 40 pixels).
+	 * 
+	 * @param gfx
+	 *            is the graphics context to draw within.
+	 * @param x
+	 *            is the x coordinate for the center of the circle.
+	 * @param y
+	 *            is the y coordinate for the center of the circle.
+	 * @param color
+	 *            is the color of the filled circle.
+	 */
+	private void fillCircle(Graphics2D gfx, double x, double y, Color color) {
+		// Set the pen color
+		gfx.setColor(color);
+		// Paint a filled circle (oval) that has a radius of 20 pixels with a center at the input
+		// coordinates.
+		gfx.fillOval((int) x - 20, (int) y - 20, 40, 40);
+	}
+
+	/**
+	 * This class is used for storing data about a robot that has been scanned.<br>
+	 * The data is mainly a snapshot of specific scanned data like the scanned position (x,y),
+	 * velocity and heading, put also the calculated predicted target position of the robot when our
+	 * robot needs to fire at the scanned robot.<br>
+	 * Note that this class calculates the position (x,y) of the scanned robot as our robot moves,
+	 * and hence data like the angle and distance to the scanned robot will change over time. by
+	 * using the position, it is easy to calculate a new angle and distance to the robot.
+	 */
+	class RobotData {
+		final String name; // name of the scanned robot
+		double scannedX; // x coordinate of the scanned robot based on the last update
+		double scannedY; // y coordinate of the scanned robot based on the last update
+		double scannedVelocity; // velocity of the scanned robot from the last update
+		double scannedHeading; // heading of the scanned robot from the last update
+		double targetX; // predicated x coordinate to aim our gun at, when firing at the robot
+		double targetY; // predicated y coordinate to aim our gun at, when firing at the robot
+
+		/**
+		 * Creates a new robot data entry based on new scan data for a scanned robot.
+		 * 
+		 * @param event
+		 *            is a ScannedRobotEvent event containing data about a scanned robot.
+		 */
+		RobotData(ScannedRobotEvent event) {
+			// Store the name of the scanned robot
+			name = event.getName();
+			// Updates all scanned facts like position, velocity, and heading
+			update(event);
+			// Initialize the coordinates (x,y) to fire at to the updated scanned position
+			targetX = scannedX;
+			targetY = scannedY;
+		}
+
+		/**
+		 * Updates the scanned data based on new scan data for a scanned robot.
+		 * 
+		 * @param event
+		 *            is a ScannedRobotEvent event containing data about a scanned robot.
+		 */
+		void update(ScannedRobotEvent event) {
+			// Get the position of the scanned robot based on the ScannedRobotEvent
+			Point2D.Double pos = getPosition(event);
+			// Store the scanned position (x,y)
+			scannedX = pos.x;
+			scannedY = pos.y;
+			// Store the scanned velocity and heading
+			scannedVelocity = event.getVelocity();
+			scannedHeading = event.getHeadingRadians();
+		}
+
+		/**
+		 * Returns the position of the scanned robot based on new scan data for a scanned robot.
+		 * 
+		 * @param event
+		 *            is a ScannedRobotEvent event containing data about a scanned robot.
+		 * @return the position (x,y) of the scanned robot.
+		 */
+		Point2D.Double getPosition(ScannedRobotEvent event) {
+			// Gets the distance to the scanned robot
+			double distance = event.getDistance();
+			// Calculate the angle to the scanned robot (our robot heading + bearing to scanned
+			// robot)
+			double angle = getHeadingRadians() + event.getBearingRadians();
+
+			// Calculate the coordinates (x,y) of the scanned robot
+			double x = getX() + Math.sin(angle) * distance;
+			double y = getY() + Math.cos(angle) * distance;
+
+			// Return the position as a point (x,y)
+			return new Point2D.Double(x, y);
+		}
+	}
+}
Index: branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/samplesentry/BorderGuard.properties
===================================================================
--- branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/samplesentry/BorderGuard.properties	(revision 13019)
+++ branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/samplesentry/BorderGuard.properties	(revision 13019)
@@ -0,0 +1,9 @@
+#Robot Properties
+#Sat May 25 22:15:07 EST 2013
+robot.description=\                             A sample robot\n\n      This is a robot that guards the borders of the battlefield\n\nUse it against \"wall crawlers\" like e.g. sample.Walls and sample.Corners
+robot.webpage=
+robocode.version=1.9.0.0
+robot.java.source.included=true
+robot.author.name=Flemming N. Larsen
+robot.classname=samplesentry.BorderGuard
+robot.name=BorderGuard
Index: branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sampleteam/MyFirstDroid.java
===================================================================
--- branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sampleteam/MyFirstDroid.java	(revision 13019)
+++ branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sampleteam/MyFirstDroid.java	(revision 13019)
@@ -0,0 +1,62 @@
+/**
+ * Copyright (c) 2001-2014 Mathew A. Nelson and Robocode contributors
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://robocode.sourceforge.net/license/epl-v10.html
+ */
+package sampleteam;
+
+
+import robocode.Droid;
+import robocode.MessageEvent;
+import robocode.TeamRobot;
+import static robocode.util.Utils.normalRelativeAngleDegrees;
+
+
+/**
+ * SimpleDroid - a sample robot by Mathew Nelson.
+ * <p/>
+ * Follows orders of team leader.
+ *
+ * @author Mathew A. Nelson (original)
+ * @author Flemming N. Larsen (contributor)
+ */
+public class MyFirstDroid extends TeamRobot implements Droid {
+
+	/**
+	 * run:  Droid's default behavior
+	 */
+	public void run() {
+		out.println("MyFirstDroid ready.");
+	}
+
+	/**
+	 * onMessageReceived:  What to do when our leader sends a message
+	 */
+	public void onMessageReceived(MessageEvent e) {
+		// Fire at a point
+		if (e.getMessage() instanceof Point) {
+			Point p = (Point) e.getMessage();
+			// Calculate x and y to target
+			double dx = p.getX() - this.getX();
+			double dy = p.getY() - this.getY();
+			// Calculate angle to target
+			double theta = Math.toDegrees(Math.atan2(dx, dy));
+
+			// Turn gun to target
+			turnGunRight(normalRelativeAngleDegrees(theta - getGunHeading()));
+			// Fire hard!
+			fire(3);
+		} // Set our colors
+		else if (e.getMessage() instanceof RobotColors) {
+			RobotColors c = (RobotColors) e.getMessage();
+
+			setBodyColor(c.bodyColor);
+			setGunColor(c.gunColor);
+			setRadarColor(c.radarColor);
+			setScanColor(c.scanColor);
+			setBulletColor(c.bulletColor);
+		}
+	}
+}
Index: branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sampleteam/MyFirstLeader.java
===================================================================
--- branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sampleteam/MyFirstLeader.java	(revision 13019)
+++ branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sampleteam/MyFirstLeader.java	(revision 13019)
@@ -0,0 +1,89 @@
+/**
+ * Copyright (c) 2001-2014 Mathew A. Nelson and Robocode contributors
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://robocode.sourceforge.net/license/epl-v10.html
+ */
+package sampleteam;
+
+
+import robocode.HitByBulletEvent;
+import robocode.ScannedRobotEvent;
+import robocode.TeamRobot;
+
+import java.awt.*;
+import java.io.IOException;
+
+
+/**
+ * MyFirstLeader - a sample team robot by Mathew Nelson.
+ * <p/>
+ * Looks around for enemies, and orders teammates to fire
+ *
+ * @author Mathew A. Nelson (original)
+ * @author Flemming N. Larsen (contributor)
+ */
+public class MyFirstLeader extends TeamRobot {
+
+	/**
+	 * run:  Leader's default behavior
+	 */
+	public void run() {
+		// Prepare RobotColors object
+		RobotColors c = new RobotColors();
+
+		c.bodyColor = Color.red;
+		c.gunColor = Color.red;
+		c.radarColor = Color.red;
+		c.scanColor = Color.yellow;
+		c.bulletColor = Color.yellow;
+
+		// Set the color of this robot containing the RobotColors
+		setBodyColor(c.bodyColor);
+		setGunColor(c.gunColor);
+		setRadarColor(c.radarColor);
+		setScanColor(c.scanColor);
+		setBulletColor(c.bulletColor);
+		try {
+			// Send RobotColors object to our entire team
+			broadcastMessage(c);
+		} catch (IOException ignored) {}
+		// Normal behavior
+		while (true) {
+			setTurnRadarRight(10000);
+			ahead(100);
+			back(100);
+		}
+	}
+
+	/**
+	 * onScannedRobot:  What to do when you see another robot
+	 */
+	public void onScannedRobot(ScannedRobotEvent e) {
+		// Don't fire on teammates
+		if (isTeammate(e.getName())) {
+			return;
+		}
+		// Calculate enemy bearing
+		double enemyBearing = this.getHeading() + e.getBearing();
+		// Calculate enemy's position
+		double enemyX = getX() + e.getDistance() * Math.sin(Math.toRadians(enemyBearing));
+		double enemyY = getY() + e.getDistance() * Math.cos(Math.toRadians(enemyBearing));
+
+		try {
+			// Send enemy position to teammates
+			broadcastMessage(new Point(enemyX, enemyY));
+		} catch (IOException ex) {
+			out.println("Unable to send order: ");
+			ex.printStackTrace(out);
+		}
+	}
+
+	/**
+	 * onHitByBullet:  Turn perpendicular to bullet path
+	 */
+	public void onHitByBullet(HitByBulletEvent e) {
+		turnLeft(90 - e.getBearing());
+	}
+}
Index: branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sampleteam/MyFirstTeam.team
===================================================================
--- branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sampleteam/MyFirstTeam.team	(revision 13019)
+++ branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sampleteam/MyFirstTeam.team	(revision 13019)
@@ -0,0 +1,7 @@
+#Robocode robot team
+#Sun Aug 20 23:26:53 EST 2006
+team.members=sampleteam.MyFirstLeader,sampleteam.MyFirstDroid,sampleteam.MyFirstDroid,sampleteam.MyFirstDroid,sampleteam.MyFirstDroid
+team.author.name=Mathew Nelson and Flemming N. Larsen
+robocode.version=1.1.2
+team.webpage=
+team.description=\                            A sample team.\n                  MyFirstLeader scans for enemies,\n                  and orders the 4 droids to fire.
Index: branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sampleteam/Point.java
===================================================================
--- branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sampleteam/Point.java	(revision 13019)
+++ branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sampleteam/Point.java	(revision 13019)
@@ -0,0 +1,33 @@
+/**
+ * Copyright (c) 2001-2014 Mathew A. Nelson and Robocode contributors
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://robocode.sourceforge.net/license/epl-v10.html
+ */
+package sampleteam;
+
+
+/**
+ * Point - a serializable point class
+ */
+public class Point implements java.io.Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	private double x = 0.0;
+	private double y = 0.0;
+
+	public Point(double x, double y) {
+		this.x = x;
+		this.y = y;
+	}
+
+	public double getX() {
+		return x;
+	}
+
+	public double getY() {
+		return y;
+	}
+}
Index: branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sampleteam/RobotColors.java
===================================================================
--- branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sampleteam/RobotColors.java	(revision 13019)
+++ branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/robocode/robots/sampleteam/RobotColors.java	(revision 13019)
@@ -0,0 +1,29 @@
+/**
+ * Copyright (c) 2001-2014 Mathew A. Nelson and Robocode contributors
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://robocode.sourceforge.net/license/epl-v10.html
+ */
+package sampleteam;
+
+
+import java.awt.*;
+
+
+/**
+ * RobotColors - A serializable class to send Colors to teammates.
+ *
+ * @author Mathew A. Nelson (original)
+ * @author Flemming N. Larsen (contributor)
+ */
+public class RobotColors implements java.io.Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	public Color bodyColor;
+	public Color gunColor;
+	public Color radarColor;
+	public Color scanColor;
+	public Color bulletColor;
+}
