NAME AI::Evolve::Befunge::Physics::othello - an othello game
SYNOPSIS
my $physics = AI::Evolve::Befunge::Physics->new('othello');
DESCRIPTION
This is an implementation of the "othello" board game ruleset. This game is also known to some as "reversi". It is implemented as a plugin for the AI::Evolve::Befunge Physics system; essentially an AI creature exists in an "othello" universe, and plays by its rules.
CONSTRUCTOR
Use AI::Evolve::Befunge::Physics->new() to get an othello object; there is no constructor in this module for you to call directly.
METHODS
setup_board
$othello->setup_board($board);
Initialize the board to its default state. For othello, this looks like:
........
........
........
...xo...
...ox...
........
........
........
in_bounds
die("out of bounds") unless $othello->in_bounds($vec);
Returns 1 if the vector is within the playspace, and 0 otherwise.
try_move_vector
my $score = $othello->try_move_vector($board, $player, $pos, $dir);
Determines how many flippable enemy pieces exist in the given direction. This is a lowlevel routine, meant to be called by the valid_move() and make_move() methods, below.
valid_move
$next_player = $othello->make_move($board, $player, $pos)
if $othello->valid_move($board, $player, $pos);
If the move is valid, returns the number of pieces which would be flipped by moving in the given position. Returns 0 otherwise.
won
my $winner = $othello->won($board);
If the game has been won, returns the player who won. Returns 0 otherwise.
over
my $over = $othello->over($board);
Returns 1 if no more moves are valid from either player, and returns 0 otherwise.
score
my $score = $othello->score($board, $player, $number_of_moves);
Returns the number of pieces on the board owned by the given player.
can_pass
my $can_pass = $othello->can_pass($board, $player);
Returns 1 if the player can pass, and 0 otherwise. For the othello rule set, passing is only allowed if no valid moves are available.
make_move
$othello->make_move($board, $player, $pos);
Makes the indicated move, updates the board with the new piece and flips enemy pieces as necessary.