my @displacement = (
[-1, -1],
[-1, 0],
[-1, +1],
[ 0, -1],
[ 0, 0],
[ 0, +1],
[+1, -1],
[+1, 0],
[+1, +1],
[-1, -1],
);
sub check_coord {
my ($x, $y, $wall, $coord)= @_;
for($displacement[$coord - 1]) {
$x += $_->[0];
$y += $_->[1];
}
return
if $y < 0 or $x < 0
or not defined(
$map[$y]
or $map[$y][$x]
);
return $map[$y][$x] eq $wall;
}
####
if ((!&test2($xCur, $yCur, $wall) && !&test3($xCur, $yCur, $wall) && &test5($xCur, $yCur, $wall) && &test6($xCur, $yCur, $wall) && !&test9($xCur, $yCur, $wall))&& (!&test1($xCur, $yCur, $wall) && !&test7($xCur, $yCur, $wall) ) || (&test1($xCur, $yCur, $wall) && &test4($xCur, $yCur, $wall) && &test7($xCur, $yCur, $wall) && !&test8($xCur, $yCur, $wall)))
####
if(grep { check_coord($xCur, $yCur, $wall, $_) } 2..8) {