NAME
    Games::AlphaBeta - game-tree search with object oriented interface

SYNOPSIS
        package My::GamePos;
        use base qw(Games::AlphaBeta::Position);

        # initialise starting position
        sub _init { ... }

        # Methods required by Games::AlphaBeta
        sub apply { ... }
        sub endpos { ... }          # optional
        sub evaluate { ... }
        sub findmoves { ... }

        # Draw a position in the game (optional)
        sub draw { ... }

        package main;
        my $pos = My::GamePos->new;
        my $game = Games::AlphaBeta->new($pos);

        while ($game->abmove) {
            print draw($game->peek_pos);
        }

DESCRIPTION
    Games::AlphaBeta provides a generic implementation of the AlphaBeta
    game-tree search algorithm (also known as MiniMax search with alpha beta
    pruning). This algorithm can be used to find the best move at a
    particular position in any two-player, zero-sum game with perfect
    information. Examples of such games include Chess, Othello, Connect4,
    Go, Tic-Tac-Toe and many, many other boardgames.

    Users must pass an object representing the initial state of the game as
    the first argument to `new()'. This object must provide the following
    methods: `copy()', `apply()', `endpos()', `evaluate()' and
    `findmoves()'. This is explained more carefully in
    Games::AlphaBeta::Position which is a base class you can use to
    implement your position object.

INHERITED METHODS
    The following methods are inherited from Games::Sequential:

    new
    debug
    peek_pos
    peek_move
    move
    undo
METHODS
    _init [@list]
        *Internal method.*

        Initialize an AlphaBeta object.

    ply [$value]
        Return current default search depth and, if invoked with an
        argument, set to new value.

    abmove [$ply]
        Perform the best move found after an AlphaBeta game-tree search to
        depth $ply. If $ply is not specified, the default depth is used (see
        `ply()'). The best move found is performed and a reference to the
        resulting position is returned on success, and undef is returned on
        failure.

        Note that this function can take a long time if $ply is high,
        particularly if the game in question has many possible moves at each
        position.

        If `debug()' is set, some basic debugging is printed as the search
        progresses.

    _alphabeta $pos $alpha $beta $ply
        *Internal method.*

BUGS
    The valid range of values `evaluate()' can return is hardcoded to
    -99_999 - +99_999 at the moment. Probably should provide methods to
    get/set these.

TODO
    Implement the missing iterative deepening alphabeta routine.

SEE ALSO
    The author's website, describing this and other projects:
    http://brautaset.org/projects/

AUTHOR
    Stig Brautaset, <stig@brautaset.org>

COPYRIGHT AND LICENCE
    Copyright (C) 2004 by Stig Brautaset

    This library is free software; you can redistribute it and/or modify it
    under the same terms as Perl itself, either Perl version 5.8.3 or, at
    your option, any later version of Perl 5 you may have available.

