X-Git-Url: https://git.realraum.at/?a=blobdiff_plain;f=dart%2Fdart-red-x01.pl;fp=dart%2Fdart-red-x01.pl;h=56b4cb28a3e75178dbbd90c71b2cecd0fd03b985;hb=0e5aa9dd0b200a8bd5d9b886debfd9b44c451b0f;hp=0000000000000000000000000000000000000000;hpb=be36f505b0e07738a8d38d9c57c588367307b847;p=svn42.git diff --git a/dart/dart-red-x01.pl b/dart/dart-red-x01.pl new file mode 100755 index 0000000..56b4cb2 --- /dev/null +++ b/dart/dart-red-x01.pl @@ -0,0 +1,78 @@ +#!/usr/bin/perl +use strict; +use Dart; + +$|=1; +my $maxScore = $0; +$maxScore =~ s/.*\-(\d+).pl$/\1/; +my (@player) = @ARGV; + +my $dart = new Dart(player_names=>\@player, + callbacks => { + shoot=>\&shoot, + next_player=>\&next_player, + before_shoot=>\&print_score, + init=>\&init, + } + ); +exit $dart->run(); + +### =============================== + +sub init +{ + my $self=shift; + + for my $player_idx (0..($self->{player_count}-1)) + { + $self->get_player($player_idx)->{score} = $maxScore; + } +} + +sub win_condition +{ + my ($self) = @_; + return $self->get_current_player()->{score} == 0; +} + +sub shoot +{ + my $self=shift; + my ($mult,$zahl)=@_; + my $color = $self->get_color($mult,$zahl)?1:-1; + if ($self->get_current_player()->{score} >= $mult * $zahl) + { + $self->get_current_player()->{score} -= $color *$mult * $zahl; + $self->shout_last_shoot(); + $self->win() if &win_condition($self); + } + else + { + $self->shout("miss"); + $self->get_current_player()->{score} = $self->get_current_player()->{last_score}; + $self->finish_player_round(); + } +} + +sub next_player +{ + my $self=shift; + $self->get_current_player()->{last_score} = $self->get_current_player()->{score}; +} + +sub print_score +{ + my ($self)=@_; + printf STDERR "\n\n"; + printf STDERR "Runde\t%d\n\n",$self->{round}; + for my $player_idx (0..($self->{player_count}-1)) + { + printf STDERR "%s\t", ($player_idx == $self->{current_player})?"(".$self->get_player($player_idx)->{name}.")":$self->get_player($player_idx)->{name}; + } + print STDERR "\n"; + for my $player_idx (0..($self->{player_count}-1)) + { + printf STDERR "%s\t", $self->get_player($player_idx)->{score}; + } + print STDERR "\n"; +}