Controllers must implement the Agent interface, and are permitted to use only the information available from the Environment interface (plus Elementary java stuff such as timing), and communicate with the simulation only through the methods defined there and in the Controller interface. Any use of java.reflection of similar methods to directly access or influence the workings or internal state of a competing controller (or the simulation itself) during runtime is forbidden and will result in disqualification.
The controllers need to run in real time. This means that each time step can not require more than 40 ms processing on a MacBook Pro from 2006 (with a 2 GHz Core Duo processor). How fast your submission runs on your computer can be gauged using the Stats class; if you think you run a risk of your submission not running fast enough, you should talk to Julian before submission.
Scoring will be measured as the average distance travelled on a number of previously unseen levels featuring enemies. We will use the CompetitionScore class; you should provide your own competition score with seed 0 in your submission, but we will not release the seed used in final scoring before the scoring event (in order to prevent overfitting controllers to a specific seed). If two controllers get the same score, further trials will be made until a performance difference can be ascertained. In the unlikely event that no performance difference can be found between two controllers (this could basically only happen if none of the controllers ever fail to complete a level), the organizers reserve the rights to judge the controllers on other criteria, e.g. number of coins collected.