NAME
Karel::Robot::WithGrid
DESCRIPTION
A robot with an associated grid. To create the robot, use
my $robot = 'Karel::Robot'->new;
my $grid = 'Karel::Grid'->new(x => 10, y => 12);
$robot = $robot->set_grid($grid, 1, 1);
METHODS
- $robot->x, $robot->y
-
my ($x, $y) = map $robot->$_, qw( x y );
Coordinates of the robot in its grid.
- $robot->grid
-
my $grid = $robot->grid;
The associated
Karel::Grid
object. - $robot->set_grid($grid, $x, $y, $direction);
-
Initialize the grid. Grid must be an object of the
Karel::Grid
type,$x
and$y
are coordinates of the robot,$direction
is one ofN E S W
(defaults toN
). Dies if the robot's place is occupied by a wall. - $robot->drop_mark
-
Drop mark in the current location. Dies if there are already 9 marks.
- $robot->pick_mark
-
Picks up one mark from the current location. Dies if there's nothing to pick.
- $robot->direction
-
my $direction = $robot->direction;
Returns the robot's direction: one of
qw( N W S E )
. - $robot->left
-
Turn the robot to the left.
- $robot->coords
-
Returns the robot's coordinates, i.e.
x
andy
. - $robot->cover
-
Returns the grid element at the robot's coordinates, i.e.
$r->grid->at($r->coords)
- $robot->facing_coords
-
Returns the coordinates of the grid element the robot is facing.
- $robot->facing
-
Returns the contents of the grid element the robot is facing.
- $robot->current
-
For debugging Karel programs: returns the source of the currently executed command, current position in the source and the length of the command.
- $robot->run($command_name)
-
Run the given command.
- $robot->forward
-
Moves the robot one cell forward in its direction.
- $robot->repeat($count, $commands)
-
Runs the
repeat
command: decreases the counter, and if it's non-zero, pushes the body to the stack. Returns 0 (CONTINUE) when it should stay in the stack, 1 (FINISHED) otherwise. - $isnot_south = $robot->condition('!S')
-
Solve the given condition. Supported parameters are:
N E S W
Facing North, East, South, West
m
Covering mark(s).
w
Facing a wall.
!
Negates the condition.
Returns true or false, dies on invalid condition.
- $robot->If($condition, $commands, $else)
-
If $condition is true, puts $commands to the stack, otherwise puts $else to the stack. Returns 2 (FINISH_DELAYED) in the former case, 1 (FINISHED) in the latter one.
- $robot->While($condition, $commands)
-
Similar to
If
, but returns 0 (CONTINUE) if the condition is true, i.e. it stays in the stack. - $robot->call($command)
-
Checks whether the robot knows the command, and if so, pushes its definition to the stack. Dies otherwise. Returns 2 (FINISH_DELAYED).
- $robot->stop
-
Stops execution of the current program and clears the stack. Returns -1 (QUIT).
- $robot->step
-
Makes one step in the currently running program.
RETURN VALUES
There are three special return values corresponding to the stack handling:
0 CONTINUE
1 FINISHED
2 FINISHED_DELAYED
If a command returns CONTINUE
, the stack doesn't change. If it returns FINISHED
, the following command in the stack is executed. If it returns FINISHED_DELAYED
, new commands are put in the stack, but once they're finished, the command behaves as if finished, too.