diff options
author | Jesse Luehrs <doy@tozt.net> | 2014-10-22 15:56:25 -0400 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2014-10-22 15:57:14 -0400 |
commit | 42a04c8fa8f62017a668299e42d71b316a8bcbdc (patch) | |
tree | af5496d0afb405438bb6de275ce2a46b3c09cce7 /lib/Bot | |
parent | cd4c85d1a68c8a943672d12ce816e2b8d74d13ee (diff) | |
download | Bot-Zulip-Chess-42a04c8fa8f62017a668299e42d71b316a8bcbdc.tar.gz Bot-Zulip-Chess-42a04c8fa8f62017a668299e42d71b316a8bcbdc.zip |
keep track of the players too
Diffstat (limited to 'lib/Bot')
-rw-r--r-- | lib/Bot/Zulip/Chess.pm | 34 |
1 files changed, 28 insertions, 6 deletions
diff --git a/lib/Bot/Zulip/Chess.pm b/lib/Bot/Zulip/Chess.pm index 6960a10..2263e15 100644 --- a/lib/Bot/Zulip/Chess.pm +++ b/lib/Bot/Zulip/Chess.pm @@ -82,8 +82,13 @@ has _chessboard => ( my $board = Chess::Rep->new; my $record = $self->_record_file; if (-e $record) { - for my $move (split ' ', $record->slurp) { - $board->go_move($move); + my @lines = $record->slurp; + $self->white_player(shift @lines); + $self->black_player(shift @lines); + for my $turn (@lines) { + my ($white, $black) = split ' ', $turn; + $board->go_move($white) if $white; + $board->go_move($black) if $black; } } $board @@ -98,6 +103,12 @@ has _record_file => ( default => sub { file('current.game') }, ); +has _temp_moves => ( + is => 'ro', + isa => 'ArrayRef[Str]', + default => sub { [] }, +); + sub run ($self) { while (1) { $self->step @@ -143,10 +154,16 @@ sub handle_move ($self, $player, $move) { return try { my $res = $self->_chessboard->go_move($move); - $self->_record_file->spew( - iomode => 'a', - $res->{san} . ($self->_chessboard->to_move ? " " : "\n") - ); + my $parsed_move = $res->{san}; + if ($self->needs_new_player) { + push $self->_temp_moves->@*, $parsed_move; + } + else { + $self->_record_file->spew( + iomode => 'a', + $parsed_move . ($self->_chessboard->to_move ? " " : "\n") + ); + } $self->draw_state; } catch { @@ -167,6 +184,11 @@ sub set_new_player ($self, $player) { elsif (!$self->has_black_player) { warn "$player is now playing Black"; $self->black_player($player); + $self->_record_file->spew( + $self->white_player . "\n" + $self->black_player . "\n" + $self->_temp_moves->[0] . " " . $self->_temp_moves->[1] . "\n" + ); } else { die "Both players are already full"; |