added reset game
[svn42.git] / dart / dart-cricket.pl
index 91431d9..c319999 100755 (executable)
@@ -13,6 +13,7 @@ my $dart = new Dart(player_names=>\@player,
                       shoot=>\&shoot,   
                       next_player=>\&next_player,
                       before_shoot=>\&print_score,
+                      init=>\&init,
                     }
                   );
 exit $dart->run();
@@ -25,6 +26,36 @@ 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))
+  {
+    return if $score > $self->get_player($player_idx)->{score}->{0};
+  }
+  return 1;
+}
+
 sub shoot
 {
   my $self=shift;
@@ -72,6 +103,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