git @ Cat's Eye Technologies Jaccia / master script / jacciata.pl
master

Tree @master (Download .tar.gz)

jacciata.pl @masterraw · history · blame

#!/usr/bin/perl
#  - automatically generated from  by:
# alpaca.pl v0.93
# http://catseye.webhop.net/projects/alpaca/
######################################################

use Alpaca qw(true false guess
	      adjacent_state adjacent_class
	      load_playfield display_playfield process_playfield);

sub StarterClassRules {
  return 0
 };

sub SustainerClassRules {
  return 0
 };

sub SassyClassRules {
  return 0
 };

sub SolutionClassRules {
  return 0
 };

sub SpaceStateRules {
  return 'Space'
 };

sub WallStateRules {
  return 'Wall'
 };

sub SlimeStateRules {
  return 'Space' if ((not ((SustainerClassMember($Playfield->[$x][$y-1]) and SustainerClassMember($Playfield->[$x+1][$y])) or (SustainerClassMember($Playfield->[$x][$y-1]) and SustainerClassMember($Playfield->[$x][$y+1])) or (SustainerClassMember($Playfield->[$x][$y-1]) and SustainerClassMember($Playfield->[$x-1][$y])) or (SustainerClassMember($Playfield->[$x+1][$y]) and SustainerClassMember($Playfield->[$x][$y+1])) or (SustainerClassMember($Playfield->[$x+1][$y]) and SustainerClassMember($Playfield->[$x-1][$y])) or (SustainerClassMember($Playfield->[$x][$y+1]) and SustainerClassMember($Playfield->[$x-1][$y])))) or (($Playfield->[$x][$y-1] eq 'Head' and $Playfield->[$x+1][$y] eq 'Head') or ($Playfield->[$x][$y-1] eq 'Head' and $Playfield->[$x][$y+1] eq 'Head') or ($Playfield->[$x][$y-1] eq 'Head' and $Playfield->[$x-1][$y] eq 'Head') or ($Playfield->[$x+1][$y] eq 'Head' and $Playfield->[$x][$y+1] eq 'Head') or ($Playfield->[$x+1][$y] eq 'Head' and $Playfield->[$x-1][$y] eq 'Head') or ($Playfield->[$x][$y+1] eq 'Head' and $Playfield->[$x-1][$y] eq 'Head')));
  return 'Head' if ((StarterClassMember($Playfield->[$x][$y+1]) or StarterClassMember($Playfield->[$x][$y-1]) or StarterClassMember($Playfield->[$x+1][$y]) or StarterClassMember($Playfield->[$x-1][$y])));
  return SustainerClassRules() || 'Slime'
 };

sub HeadStateRules {
  return 'Body' if (1);
  return StarterClassRules() || SustainerClassRules() || SassyClassRules() || 'Head'
 };

sub BodyStateRules {
  return 'Solved' if ((SolutionClassMember($Playfield->[$x][$y+1]) or SolutionClassMember($Playfield->[$x][$y-1]) or SolutionClassMember($Playfield->[$x+1][$y]) or SolutionClassMember($Playfield->[$x-1][$y])));
  return 'Space' if ((not ((SassyClassMember($Playfield->[$x][$y-1]) and SassyClassMember($Playfield->[$x+1][$y])) or (SassyClassMember($Playfield->[$x][$y-1]) and SassyClassMember($Playfield->[$x][$y+1])) or (SassyClassMember($Playfield->[$x][$y-1]) and SassyClassMember($Playfield->[$x-1][$y])) or (SassyClassMember($Playfield->[$x+1][$y]) and SassyClassMember($Playfield->[$x][$y+1])) or (SassyClassMember($Playfield->[$x+1][$y]) and SassyClassMember($Playfield->[$x-1][$y])) or (SassyClassMember($Playfield->[$x][$y+1]) and SassyClassMember($Playfield->[$x-1][$y])))));
  return StarterClassRules() || SassyClassRules() || 'Body'
 };

sub SolvedStateRules {
  return 'Space' if ((not ((SassyClassMember($Playfield->[$x][$y-1]) and SassyClassMember($Playfield->[$x+1][$y])) or (SassyClassMember($Playfield->[$x][$y-1]) and SassyClassMember($Playfield->[$x][$y+1])) or (SassyClassMember($Playfield->[$x][$y-1]) and SassyClassMember($Playfield->[$x-1][$y])) or (SassyClassMember($Playfield->[$x+1][$y]) and SassyClassMember($Playfield->[$x][$y+1])) or (SassyClassMember($Playfield->[$x+1][$y]) and SassyClassMember($Playfield->[$x-1][$y])) or (SassyClassMember($Playfield->[$x][$y+1]) and SassyClassMember($Playfield->[$x-1][$y])))));
  return SassyClassRules() || SolutionClassRules() || 'Solved'
 };

sub StartStateRules {
  return StarterClassRules() || SustainerClassRules() || SassyClassRules() || 'Start'
 };

sub FinishStateRules {
  return SustainerClassRules() || SassyClassRules() || SolutionClassRules() || 'Finish'
 };

sub SassyClassMember {
  return $_[0] eq 'Head' ||
         $_[0] eq 'Body' ||
         $_[0] eq 'Solved' ||
         $_[0] eq 'Start' ||
         $_[0] eq 'Finish' ||
         0
};

sub SolutionClassMember {
  return $_[0] eq 'Solved' ||
         $_[0] eq 'Finish' ||
         0
};

sub StarterClassMember {
  return $_[0] eq 'Head' ||
         $_[0] eq 'Body' ||
         $_[0] eq 'Start' ||
         0
};

sub SustainerClassMember {
  return $_[0] eq 'Slime' ||
         $_[0] eq 'Head' ||
         $_[0] eq 'Start' ||
         $_[0] eq 'Finish' ||
         0
};

$Appearance = {
  'Body' => '?',
  'Finish' => 'F',
  'Head' => '-',
  'Slime' => ':',
  'Solved' => '@',
  'Space' => ' ',
  'Start' => 'S',
  'Wall' => '#',

};

$InputCodec = {
  '?' => 'Body',
  'F' => 'Finish',
  '-' => 'Head',
  ':' => 'Slime',
  '@' => 'Solved',
  ' ' => 'Space',
  'S' => 'Start',
  '#' => 'Wall',

};

$StateRule = {
  'Body' => \&main::BodyStateRules,
  'Finish' => \&main::FinishStateRules,
  'Head' => \&main::HeadStateRules,
  'Slime' => \&main::SlimeStateRules,
  'Solved' => \&main::SolvedStateRules,
  'Space' => \&main::SpaceStateRules,
  'Start' => \&main::StartStateRules,
  'Wall' => \&main::WallStateRules,

};

load_playfield($ARGV[0]);

display_playfield();

while (!$done)
{
  process_playfield();
  display_playfield();
}

exit(0);

### END ###