NAME
Games::Sokoban::Controller - sokoban controller
SYNOPSIS
use strict;
use warnings;
use Games::Sokoban::Controller;
my $c = Games::Sokoban::Controller->new;
$c->set_data(<<'LEVEL');
#######
#@ . #
# $ #
# #
#######
LEVEL
my @replaced = $c->go_down;
for (@replaced) {
my $char = $c->get($_->[0], $_->[1]);
if ($char eq '@') { ... } # me
if ($char eq '+') { ... } # me on a goal
if ($char eq '$') { ... } # box
if ($char eq '*') { ... } # box on a goal
if ($char eq '.') { ... } # goal
if ($char eq ' ') { ... } # floor
}
if ($c->solved) {
print "SOLVED!\n";
}
DESCRIPTION
This is a plain Sokoban controller. If you want to play Sokoban, you'll need some front-end.
METHODS
new
creates an object.
set_data (data, format)
set puzzle data (level). See Games::Sokoban for available formats.
level_id
returns an unique id of the puzzle.
reset
(re-)initializes the puzzle.
size, width, height
return width and/or height of the puzzle.
get (x, y)
returns a character of the (0-based) coordinate.
go_left, go_right, go_up, go_down
move the player (and a box if applicable), and return an array of coordinates where you need to update because of the move.
direction
usually returns the direction of the player (left, right, up, down). You may want to use this if you create a graphical front-end.
solved
returns true if everything is placed correctly.
SEE ALSO
AUTHOR
Kenichi Ishigaki, <ishigaki@cpan.org>
COPYRIGHT AND LICENSE
Copyright (C) 2011 by Kenichi Ishigaki.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.