X-Git-Url: https://git.realraum.at/?a=blobdiff_plain;ds=sidebyside;f=dart%2FDart.pm;h=7adec4a41fc72980caee0df5cdf1957f6ba5f4fb;hb=da910f7d4d8727251856247e0653d18be917a425;hp=3919110b1b50de7b0e7c261dbc2b1293f02103bd;hpb=e2babe3999a68a8a7fc77dd9260a8c88bd737ccb;p=svn42.git diff --git a/dart/Dart.pm b/dart/Dart.pm index 3919110..7adec4a 100644 --- a/dart/Dart.pm +++ b/dart/Dart.pm @@ -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; @@ -40,7 +52,7 @@ sub init sub reset_game { my $self=shift; - my @sort_player = sort { $a->{rank} <=> $b->{rank} } @{$self->{player}}; + my @sort_player = sort { $b->{rank} <=> $a->{rank} } @{$self->{player}}; $self->{player}=[]; for my $player (@sort_player) { @@ -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'); @@ -182,10 +200,16 @@ sub get_next_active_player $new_round=1; } } - while (not $players_ref->[$current_player]{active}); + while (not $self->{player}->[$current_player]{active}); 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; @@ -196,28 +220,26 @@ sub next_round sub win { my $self=shift; - $self->deactivate_current_player($self->{player_count}-$self->{active_player_count}+1); $self->shout('win'); + $self->deactivate_current_player($self->{player_count}-$self->{active_player_count}+1); if ($self->{active_player_count}==1) { $self->next_player(); - $self->lose(); - } elsif (not $self->{active_player_count}) { - $self->end_game(); + $self->shout('lose'); + $self->deactivate_current_player($self->{player_count}-$self->{active_player_count}+1); } } sub lose { my $self=shift; - $self->deactivate_current_player($self->{active_player_count}); $self->shout('lose'); + $self->deactivate_current_player($self->{active_player_count}); if ($self->{active_player_count}==1) { $self->next_player(); - $self->win(); - } elsif (not $self->{active_player_count}) { - $self->end_game(); + $self->shout('win'); + $self->deactivate_current_player($self->{active_player_count}); } }