#!/usr/bin/perl
-# use strict;
+use strict;
use Dart;
+our $sieb =1; # Spielmodus Zahlensieb
$|=1;
callbacks => {
shoot=>\&shoot,
next_player=>\&next_player,
+ before_shoot=>\&print_score,
+ init=>\&init,
}
);
-exit $dart->run(STDIN,STDOUT);
+exit $dart->run();
### ===============================
-my $sieb =1; # Spielmodus Zahlensieb
sub gueltig
{
my ($zahl,$mult) = @_;
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;
{
$score->{$zahl}++;
$self_scored++;
- if ($sieb && ($score->{$zahl} == 3))
+ if ($main::sieb && ($score->{$zahl} == 3))
{
for my $count (2..21)
{
$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