MNU.pm - added save, load and parse
This commit is contained in:
parent
11a2806dbd
commit
b0ec1b2d42
3
.gitignore
vendored
3
.gitignore
vendored
@ -2,4 +2,5 @@
|
||||
p[0-9].pl
|
||||
p[0-9][0-9].pl
|
||||
notes.txt
|
||||
#*
|
||||
#*
|
||||
save.txt
|
91
MNU.pm
91
MNU.pm
@ -1,5 +1,7 @@
|
||||
#!/usr/bin/perl
|
||||
|
||||
package MNU;
|
||||
|
||||
use warnings;
|
||||
use strict;
|
||||
|
||||
@ -7,23 +9,96 @@ use lib "./";
|
||||
use NTVL;
|
||||
use LPST;
|
||||
|
||||
package MNU;
|
||||
use Try::Tiny;
|
||||
|
||||
sub prompt(){
|
||||
my $SAVE_FN = "save.txt";
|
||||
|
||||
sub roll_back($){
|
||||
my @arr;
|
||||
my $game_str = shift;
|
||||
|
||||
@arr = split(/\n/, $game_str);
|
||||
|
||||
if(scalar @arr == 1){
|
||||
return "";
|
||||
}
|
||||
return join("\n", splice(@arr, 0, -1))."\n";
|
||||
}
|
||||
|
||||
sub eval_game_str($$){
|
||||
my ($b, $game_str) = (shift, shift);
|
||||
try {
|
||||
NTVL->f1($b, $game_str);
|
||||
disp_board($b);
|
||||
} catch {
|
||||
warn "invalid move: $_";
|
||||
$game_str = roll_back($game_str);
|
||||
};
|
||||
return $game_str;
|
||||
}
|
||||
|
||||
sub disp_board($){
|
||||
my $b = shift;
|
||||
$b->disp_board();
|
||||
}
|
||||
|
||||
sub load(){
|
||||
my $game_str;
|
||||
|
||||
$game_str = "";
|
||||
open FILE, "<".$SAVE_FN or die "couldn't open save file";
|
||||
while(<FILE>){
|
||||
$game_str .= $_;
|
||||
}
|
||||
close FILE;
|
||||
|
||||
return $game_str;
|
||||
}
|
||||
|
||||
sub save($){
|
||||
my $game_str = shift;
|
||||
open FILE, ">".$SAVE_FN or die "couldn't open save file";
|
||||
printf FILE "%s", $game_str;
|
||||
close FILE;
|
||||
|
||||
return $game_str;
|
||||
}
|
||||
|
||||
sub parse_cmd($){
|
||||
my $in = shift;
|
||||
return -1 if $in =~ /^q(uit)?$/i;
|
||||
return 1 if($in =~ /^save$/i);
|
||||
return 2 if($in =~ /^load$/i);
|
||||
return 0;
|
||||
}
|
||||
|
||||
sub prompt($){
|
||||
my $game_str = shift;
|
||||
|
||||
printf("> ");
|
||||
my $in;
|
||||
$in = <STDIN>;
|
||||
chomp $in;
|
||||
|
||||
return $in;
|
||||
return "QUIT" if(parse_cmd($in) == -1);
|
||||
return save($game_str) if parse_cmd($in) == 1;
|
||||
return load() if parse_cmd($in) == 2;
|
||||
|
||||
$game_str .= $in."\n";
|
||||
return $game_str;
|
||||
}
|
||||
|
||||
sub loop(){
|
||||
my $in = prompt();
|
||||
|
||||
return 0 unless $in;
|
||||
return 0 if $in eq "quit";
|
||||
return 1;
|
||||
sub loop($$){
|
||||
my ($class, $game_str) = (shift, shift);
|
||||
my $in;
|
||||
|
||||
$b = LPST->new();
|
||||
$game_str = eval_game_str($b, $game_str);
|
||||
printf("%s\n", $game_str);
|
||||
|
||||
$game_str = prompt($game_str);
|
||||
return $game_str;
|
||||
}
|
||||
|
||||
return 1;
|
||||
|
3
NTVL.pm
3
NTVL.pm
@ -1,6 +1,6 @@
|
||||
#!/usr/bin/perl
|
||||
|
||||
package main;
|
||||
package NTVL;
|
||||
|
||||
use warnings;
|
||||
use strict;
|
||||
@ -17,7 +17,6 @@ my $SACRIFICE = 0b00001000;
|
||||
my $DRAW = 0b00010000;
|
||||
my $FT = 0b00100001;
|
||||
|
||||
package NTVL;
|
||||
|
||||
sub is_summon($){
|
||||
return $_[0] =~ /\*/ ? $SUMMON : 0;
|
||||
|
8
drv.pl
8
drv.pl
@ -6,7 +6,11 @@ use strict;
|
||||
use lib "./";
|
||||
use MNU;
|
||||
|
||||
while(MNU->loop()){
|
||||
|
||||
my $game_str;
|
||||
|
||||
$game_str = "";
|
||||
|
||||
while(($game_str = MNU->loop($game_str)) ne "QUIT"){
|
||||
# printf("XXXX%s\n", $game_str);
|
||||
}
|
||||
|
||||
|
58
test.pl
58
test.pl
@ -9,25 +9,49 @@ use LPST;
|
||||
|
||||
my $ns0;
|
||||
|
||||
# $ns0 = "";
|
||||
# $ns0 .= "A I Im Au H\n";
|
||||
# $ns0 .= "A S Im Rc It\n";
|
||||
# $ns0 .= "Aa1*, Ab1*, Ac1*, Ad1*, Ae1*, Qf1*, Ag1*, Ah1*, Ai1*, Aj1*, Ak1*, Ad2*, Ai2*, Aj2*, Ak2*, Ad3*\n";
|
||||
# $ns0 .= "Aa11*, Ab11*, Ac11*, Ad11*, Ae11*, Qf11*\n";
|
||||
# $ns0 .= "Aa1a2\n";
|
||||
# $ns0 .= "Qf11g11\n";
|
||||
# $ns0 .= "Aa2a3\n";
|
||||
# $ns0 .= "Qg11f10\n";
|
||||
# $ns0 .= "Aa3a4\n";
|
||||
# $ns0 .= "Qf10e10\n";
|
||||
# $ns0 .= "Aa4a5\n";
|
||||
# $ns0 .= "Qe10d10\n";
|
||||
# $ns0 .= "Aa5a6\n";
|
||||
# # $ns0 .= "Qd10e9\n";
|
||||
|
||||
|
||||
$ns0 = "";
|
||||
$ns0 .= "A I Im Au H\n";
|
||||
$ns0 .= "A S Im Rc It\n";
|
||||
$ns0 .= "Aa1*, Ab1*, Ac1*, Ad1*, Ae1*, Qf1*, Ag1*, Ah1*, Ai1*, Aj1*, Ak1*, Ad2*, Ai2*, Aj2*, Ak2*, Ad3*\n";
|
||||
$ns0 .= "Aa11*, Ab11*, Ac11*, Ad11*, Ae11*, Qf11*\n";
|
||||
$ns0 .= "Aa1a2\n";
|
||||
$ns0 .= "Qf11g11\n";
|
||||
$ns0 .= "Aa2a3\n";
|
||||
$ns0 .= "Qg11f10\n";
|
||||
$ns0 .= "Aa3a4\n";
|
||||
$ns0 .= "Qf10e10\n";
|
||||
$ns0 .= "Aa4a5\n";
|
||||
$ns0 .= "Qe10d10\n";
|
||||
$ns0 .= "Aa5a6\n";
|
||||
# $ns0 .= "Qd10e9\n";
|
||||
$ns0 .= "A I H It N\n";
|
||||
$ns0 .= "A I H It N\n";
|
||||
$ns0 .= "Ac3*, Qd3*\n";
|
||||
$ns0 .= "Ac11*, Qd11*\n";
|
||||
|
||||
|
||||
|
||||
sub roll_back($){
|
||||
my @arr;
|
||||
my $game_str = shift;
|
||||
|
||||
@arr = split(/\n/, $game_str);
|
||||
|
||||
if(scalar @arr == 1){
|
||||
return "";
|
||||
}
|
||||
return join("\n", splice(@arr, 0, -1))
|
||||
}
|
||||
|
||||
# printf("%s\n", $ns0);
|
||||
# $ns0 = roll_back($ns0);
|
||||
# printf("%s\n", $ns0);
|
||||
|
||||
$b = LPST->new();
|
||||
|
||||
NTVL->f1($b, $ns0);
|
||||
|
||||
$b->shade_all_p2_mvmt();
|
||||
$b->disp_board();
|
||||
# $b->shade_all_p2_mvmt();
|
||||
# $b->disp_board();
|
||||
|
Loading…
Reference in New Issue
Block a user