X-Git-Url: https://git.realraum.at/?a=blobdiff_plain;f=dart%2Fdart-cricket.pl;h=55b4d02441e05673e021e3084e983cd5c874ce85;hb=050398149d26f27a0b19971cbcea990574d73a57;hp=de18e0ef1097f896df899809d8baf90fec2559f0;hpb=3311c2a78c87d6428b8aeca2b14e8d86f49505fd;p=svn42.git diff --git a/dart/dart-cricket.pl b/dart/dart-cricket.pl index de18e0e..55b4d02 100755 --- a/dart/dart-cricket.pl +++ b/dart/dart-cricket.pl @@ -6,12 +6,15 @@ our $sieb =1; # Spielmodus Zahlensieb $|=1; -my (@player) = @ARGV; +my ($shout_fifo, @player) = @ARGV; my $dart = new Dart(player_names=>\@player, + shout_fifo=>$shout_fifo, callbacks => { shoot=>\&shoot, next_player=>\&next_player, + before_shoot=>\&print_score, + init=>\&init, } ); exit $dart->run(); @@ -24,6 +27,37 @@ sub gueltig return $zahl>1; } +sub init +{ + my $self=shift; + for my $i (0..21) + { + for my $player_idx (0..($self->{player_count}-1)) + { + my $zahl = $i>20?25:$i; + next if $zahl > 0 and not gueltig($zahl); + $self->get_player($player_idx)->{score}->{$zahl}=0; + } + } +} + +sub win_condition +{ + my ($self) = @_; + for my $i (keys %{$self->get_current_player()->{score}}) + { + next if not $i; + return if $self->get_current_player()->{score}->{$i}<3; + } + my $score = $self->get_current_player()->{score}->{0}; + for my $player_idx (0..($self->{player_count}-1)) + { + next if not $self->get_player($player_idx)->{active}; + return if $score > $self->get_player($player_idx)->{score}->{0}; + } + return 1; +} + sub shoot { my $self=shift; @@ -71,37 +105,36 @@ sub shoot $self->shout_last_shoot() if ($scored || $self_scored); $self->shout("scored") if $scored; $self->shout("scho") if $scho && not $scored; - &print_score($self); + $self->win() if &win_condition($self); } sub next_player { my $self=shift; - &print_score($self); } sub print_score { my ($self)=@_; - printf STDERR "\n\n"; - printf STDERR "Runde\t%d\n\n",$self->{round}; + printf "\n\n"; + printf "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}; + printf "%s\t", ($player_idx == $self->{current_player})?"(".$self->get_player($player_idx)->{name}.")":$self->get_player($player_idx)->{name}; } - print STDERR "\n"; + print "\n"; for my $i (1..21) { for my $player_idx (0..($self->{player_count}-1)) { my $zahl = $i>20?25:$i; next if not gueltig($zahl); - printf STDERR ("%2d %s ",$zahl, '#' x $self->get_player($player_idx)->{score}->{$zahl}. '-' x (3-$self->get_player($player_idx)->{score}->{$zahl})); + printf ("%2d %s ",$zahl, '#' x $self->get_player($player_idx)->{score}->{$zahl}. '-' x (3-$self->get_player($player_idx)->{score}->{$zahl})); } - print STDERR "\n"; + print "\n"; } for my $player_idx (0..($self->{player_count}-1)) { - printf STDERR ("%3d\t", $self->get_player($player_idx)->{score}->{0}); + printf ("%3d\t", $self->get_player($player_idx)->{score}->{0}); } }