status update on changed ajar state
[svn42.git] / dart / Dart.pm
index 634f149..7adec4a 100644 (file)
@@ -25,6 +25,18 @@ sub new
 }
 
 
+sub get_color
+{
+  my $self=shift;
+  my ($mul,$zahl)=@_;
+  my @zahlen =  qw/20 1 18 4 13 6 10 15 2 17 3 19 7 16 8 11 14 9 12 5 25/;
+  my $counter=0;
+  $counter++ while($zahl != shift @zahlen and @zahlen);
+  $mul=0 if $mul >1;
+  my $result = ($counter+$mul )%2;
+  return $result;
+}
+
 sub init
 {
   my $self=shift;
@@ -81,6 +93,7 @@ sub run
     if ($mult =~/^\d$/)
     {
       die "Unexpected input" if not $number=~/^\d+$/;
+      next if not $self->{current_shoot_count} < $self->{max_shoots_per_player};
       $self->shoot($mult,$number);
     } elsif ($mult eq 'btn') {
       $self->next_player();
@@ -90,6 +103,11 @@ sub run
       $self->callback('undo');
     } elsif ($mult eq 'reset') {
       $self->reset_game();
+    } elsif ($mult eq 'quit') {
+      return;
+    } else {
+      # shitty input
+      next;
     }
     push @history, Clone::clone($self);
     $self->callback('before_shoot');
@@ -186,6 +204,12 @@ sub get_next_active_player
   return ($current_player,$new_round);
 }
 
+sub finish_player_round
+{
+  my $self=shift;
+  $self->{current_shoot_count} = $self->{max_shoots_per_player};
+}
+
 sub next_round
 {
   my $self=shift;
@@ -201,7 +225,8 @@ sub win
   if ($self->{active_player_count}==1)
   {
     $self->next_player();
-    $self->lose();
+    $self->shout('lose');
+    $self->deactivate_current_player($self->{player_count}-$self->{active_player_count}+1);
   }
 }
 
@@ -213,7 +238,8 @@ sub lose
   if ($self->{active_player_count}==1)
   {
     $self->next_player();
-    $self->win();
+    $self->shout('win');
+    $self->deactivate_current_player($self->{active_player_count});
   }
 }