X-Git-Url: https://git.realraum.at/?p=svn42.git;a=blobdiff_plain;f=dart%2Fdart-cricket.pl;fp=dart%2Fdart-cricket.pl;h=0000000000000000000000000000000000000000;hp=55b4d02441e05673e021e3084e983cd5c874ce85;hb=8e8f26d01ab21db191f62f2732808dcb75e8a74f;hpb=050398149d26f27a0b19971cbcea990574d73a57 diff --git a/dart/dart-cricket.pl b/dart/dart-cricket.pl deleted file mode 100755 index 55b4d02..0000000 --- a/dart/dart-cricket.pl +++ /dev/null @@ -1,140 +0,0 @@ -#!/usr/bin/perl -use strict; -use Dart; - -our $sieb =1; # Spielmodus Zahlensieb - - -$|=1; -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(); - -### =============================== - -sub gueltig -{ - my ($zahl,$mult) = @_; - 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; - my ($mult,$zahl)=@_; - $self->get_current_player()->{score} = {} if not $self->get_current_player()->{score}; - my $score=$self->get_current_player()->{score}; - - if (not gueltig($zahl,$mult)) - { - $self->shout("miss"); - return; - } - my ($scho,$scored,$self_scored); - while($mult--) - { - - if ($score->{$zahl}<3) - { - $score->{$zahl}++; - $self_scored++; - if ($main::sieb && ($score->{$zahl} == 3)) - { - for my $count (2..21) - { - $count = 25 if $count ==21; - if ( ($count % $zahl) == 0) - { - $score->{$count} = 3; - } - } - } - } else { - $scho++; - for my $player_idx (0..($self->{player_count}-1)) - { - next if not $self->get_player($player_idx)->{active}; - if ($self->get_player($player_idx)->{score}->{$zahl}<3) - { - $self->get_player($player_idx)->{score}->{0}+=$zahl; - $scored++; - } - } - } - } - $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 -{ - my $self=shift; -} - -sub print_score -{ - my ($self)=@_; - printf "\n\n"; - printf "Runde\t%d\n\n",$self->{round}; - for my $player_idx (0..($self->{player_count}-1)) - { - printf "%s\t", ($player_idx == $self->{current_player})?"(".$self->get_player($player_idx)->{name}.")":$self->get_player($player_idx)->{name}; - } - 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 ("%2d %s ",$zahl, '#' x $self->get_player($player_idx)->{score}->{$zahl}. '-' x (3-$self->get_player($player_idx)->{score}->{$zahl})); - } - print "\n"; - } - for my $player_idx (0..($self->{player_count}-1)) - { - printf ("%3d\t", $self->get_player($player_idx)->{score}->{0}); - } -}