## ReadMe for Robocode
Updated 04-Mar-2012 by Flemming N. Larsen
Send all feedback, comments, and issues to the tracker at the
[Robocode project](http://sourceforge.net/tracker/?group_id=37202) at
SourceForge.net.
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 develop a robot
battle tank to battle against other tanks in Java or .NET. The robot
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 comes with its own installer, built-in robot editor and Java
compiler, and only pre-requires a Java Virtual Machine (JVM) to exist on
the system where it must 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 5.0 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 Matthew A. Nelson, aka Mat
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.
In the beginning of 2005, Robocode was brought to SourceForge as Open
Source with Robocode version 1.0.7. At this point, the development of
Robocode had somewhat stopped. In the meanwhile, the community around
Robocode began to develop their own versions of Robocode in order to get
rid of bugs and also to put new features into Robocode, the
Contributions for Open Source Robocode and later on the RobocodeNG
project by Flemming N. Larsen.
As nothing seemed to happen with Robocode in more than a year, Flemming
N. Larsen took over the Robocode project at SourceForge as administrator
and developer in July 2006. The RobocodeNG project was dropped, but the
Robocode 2006 variant, which contained a lot of contributions from the
Robocode community, was merged into the official Robocode with version
1.1. Since then, lots of new versions of Robocode have been released
with more and more features and contributions from the community.
Recently (from version 1.7.2.0), the .NET platform is supported through
a .NET plug-in provided by Pavel Savara based on
[jni4net](http://jni4net.sourceforge.net/), also developed by Pavel
Savara.
### 3. SYSTEM REQUIREMENTS
In order to run Robocode, Java 5.0 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.5.0_22`
UNIX, Linux, Mac OS example: `JAVA_HOME=/usr/local/jdk1.5.0_22`
- `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 API](http://robocode.sourceforge.net/docs/robocode/)
- [.NET 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 st