Write a robot
Your robot is the teal one, and it starts with a copy of the hunter's program. Each time your edits compile, a new match starts.
There are 30 ticks in a second. The arena runs your robot's main function once every tick, and global variables keep their values between ticks. Paste this robot into the editor to try it. It circles and fires at the first robot its radar finds.
var radar: float;
fn main() -> void {
drive(6.0);
steer(4.0);
if scan(radar) < 0.0 {
radar = radar + 20.0;
return;
}
fire(radar, 2.0);
}
The language
| Types | int, float, bool and arrays such as [int; 8] |
|---|---|
| Variables | var count: int = 3; or const POWER: float = 2.0; A variable without a value starts at zero. |
| Functions | fn half(x: float) -> float { ... } |
| Control flow | if, else, while, break, continue and return. Write else if as else { if ... }. |
| Built-ins | int() and float() convert between whole and decimal numbers, and sqrt() and abs() take a float. |
Arena functions
Angles are in degrees, counterclockwise from the x axis. A value outside its range rounds to the nearest valid number.
my_x(), my_y() | The robot's position |
my_heading(), my_speed(), my_energy() | Its heading, speed and energy |
scan(direction) | The distance to the nearest robot within 10° of the direction, or -1 |
scan_x(), scan_y() | The position of the robot that this tick's last scan found, or 0 |
drive(speed) | Sets a speed from -4 to 8, which lasts until it changes or the robot hits something |
steer(degrees) | Turns up to 10° this tick |
fire(direction, power) | Fires a bullet with a power from 0.1 to 3. The bullet flies (20 − 3 × power) units a tick, and the gun then needs 10 ticks to cool. |
sin, cos, atan2(y, x) | Trigonometry |
Rules
| Field | 800 by 600, with its origin at the lower left |
|---|---|
| Steps | A robot may take up to 1000 steps a tick. Each statement and each function call costs a step, and a while loop costs a step every time it checks its condition. |
| Energy | Each robot starts with 100. Firing costs energy equal to the bullet's power. A hit takes 4 times as much energy from the robot hit and gives the shooter 3 times as much. A robot with no energy left is destroyed. |
| Winner | The last robot left, or after 3000 ticks the one with the most energy. Otherwise the match is a draw. |