rm documents to github
[svn42.git] / dart / dart-cricket.pl
index 91431d9..55b4d02 100755 (executable)
@@ -6,13 +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();
@@ -25,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;
@@ -72,6 +105,7 @@ sub shoot
   $self->shout_last_shoot() if ($scored || $self_scored);
   $self->shout("scored") if $scored;
   $self->shout("scho") if $scho && not $scored;
+  $self->win() if &win_condition($self);
 }
 
 sub next_player
@@ -82,25 +116,25 @@ sub next_player
 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});
   }
 }