LM-Solve - A Logic Mazes Solver


1. History


1.1. First Encounter with the Logic Mazes


1.2. Two Initial Scripts


1.3. First Version of LM-Solve


1.4. LM-Solve 0.4.0 and 0.6.0


1.5. No BitKeeper for you!


1.6. Recent Work


2. Technologies used by LM-Solve


2.1. Makefile.PL

use ExtUtils::MakeMaker;

WriteMakefile(
    'NAME' => 'Games::LMSolve',
    'DISTNAME' => 'Games-LMSolve',
    'EXE_FILES' => ["lm-solve"],
    'VERSION_FROM' => 'lib/Games/LMSolve/Base.pm',
    );


2.2. Getopt::Long

    # This is a flag that specifies whether to present the moves in Run-Length
    # Encoding.
    my $to_rle = 1;
    my $output_states = 0;
    my $scan = "brfs";
    my $run_time_states_display = 0;

    #my $p = Getopt::Long::Parser->new();
    if (! GetOptions('rle!' => \$to_rle,
        'output-states!' => \$output_states,
        'method=s' => \$scan,
        'rtd!' => \$run_time_states_display,
        ))
    {
        die "Incorrect options passed!\n"
    }

2.3. POD, Pod::Usage and Friends

    my $variant = $self->{'default_variant'};
    my $help = 0;
    my $man = 0;

    Getopt::Long::Configure('pass_through');
    GetOptions(
        "g|game=s" => \$variant,
        'help|h|?' => \$help,
        'man' => \$man
        ) or pod2usage(2);

    pod2usage(1) if $help;
    pod2usage(-exitstatus => 0, -verbose => 2) if $man;

2.4. Writing an RPM Spec


3. Architecture of LM-Solve


3.1. Multiple Solvers Implementation


3.2. Registry


3.3. The Input Module


4. Exotic Bugs


4.1. The Hex Swamps Conundrum

Hex Swamps Proto-Game Screenshot


4.2. Recursion Limit


General Links

Project's Resources