clear screen works now
[svn42.git] / dart / dart-red-x01.pl
index 56b4cb2..b06b8a6 100755 (executable)
@@ -5,16 +5,19 @@ use Dart;
 $|=1;
 my $maxScore = $0;
 $maxScore =~ s/.*\-(\d+).pl$/\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,
+                      end_game=>\&Dart::plot_trace_shoot,
                     }
                   );
+$dart->trace_shoot('score');
 exit $dart->run();
 
 ### ===============================
@@ -22,7 +25,6 @@ exit $dart->run();
 sub init
 {
   my $self=shift;
-
   for my $player_idx (0..($self->{player_count}-1))
   {
     $self->get_player($player_idx)->{score} = $maxScore;
@@ -39,19 +41,16 @@ 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
+  my $color = $self->get_color($mult,$zahl)?1:-1; 
+  if ($color <0)
   {
-    $self->shout("miss");
-    $self->get_current_player()->{score} = $self->get_current_player()->{last_score};
-    $self->finish_player_round();
+    $self->shout("plus");
+  }else{
+    $self->shout("minus");
   }
+  $self->get_current_player()->{score} -= $color *$mult * $zahl;
+  $self->shout_last_shoot();
+  $self->win() if &win_condition($self);
 }
 
 sub next_player
@@ -63,16 +62,16 @@ 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 $player_idx (0..($self->{player_count}-1))
   {
-    printf STDERR "%s\t", $self->get_player($player_idx)->{score};
+    printf "%s\t", $self->get_player($player_idx)->{score};
   }
-  print STDERR "\n";
+  print "\n";
 }