Re!
Solele, letzten Denkfehler ausgebügelt. Ich hatte vergessen, dass nach der ersten Elfmeterschießen-Runde nur noch »paarweise« (also je ein Spieler von jeder Mannschaft, immer ein anderer) antreten, so dass der Punktestand dann nur noch um max. ein Punkt erhöht wird.
Alles zusammen ergibt sich jetzt folgenden Code, den unsere Experten sicher noch performanter machen können:
my ($krautsr, $tuerksr, $krautsv, $tuerksv); # Für Speichern vom Stand reg. Zeit
# und Stand Verl. bei jeweiliger Gleichheit
# dass eine Mannschaft mehr als vier Tore erzielt, halte ich für unwahrscheinlich
sub em_halbfinale {
my ($krauts, $tuerks) = map { $_ = int rand(4) } 0..1;
if ($krauts == $tuerks) { verlaengerung ($krauts,$tuerks); }
else { return "Das Spielt endet nach der regulaeren Spielzeit mit: ".$krauts.":".$tuerks; }
}
# Bei Gleicheit gibt's Verlängerung
sub verlaengerung {
my @reg = ($krautsr, $tuerksr) = @_;
# in 30mn Verlängerung mehr als drei Toren zu schießen, ebenso
($krautsv, $tuerksv) = map { $_ + int rand(3) } @reg;
if ($krautsv == $tuerksv) { elfmeterschiessen ($krautsv,$tuerksv); }
else { return "Das Spielt endet nach Verlaengerung mit: "
.$krautsv.":".$tuerksv." (reg. Spielzeit: ".$krautsr.":".$tuerksr.")\n"; }
}
# und wenn immer noch Gleichheit gibt's Elfmeterschießen...
sub elfmeterschiessen {
my @ver = @_;
my @elf = map { $_ = int rand(5) } 0..1; # maximale Anzahl Treffen bei der Elfmeterschießen-Runde
$elf[0]-- if ($elf[0] - $elf[1] > 3); # mehr als drei Tore Differenz bedeutet: schon gewonnen
$elf[1]-- if ($elf[1] - $elf[0] > 3); # dito für die anderen
my ($score_krauts, $score_tuerks) = map { $ver[$_] + $elf[$_] } 0..1;
if ($score_krauts == $score_tuerks) { weiterschiessen ($score_krauts, $score_tuerks); }
else { return "Das Spiel endet nach Elfmeterschiessen mit: "
.$score_krauts.":".$score_tuerks." (reg. Spielzeit: "
.$krautsr.":".$tuerksr.", Verlaengerung: ".$krautsv.":".$tuerksv.")\n"; }
}
# und dann wird weitergeschossen, jeweils ein Spieler
# von jeder Mannschaft, so dass der Score max. um 1 erhöht wird
sub weiterschiessen {
my @weiter = @_;
my ($score_krauts, $score_tuerks) = map { $_ + int rand(1.5) } @weiter;
# ab hier gibt's u.U. rekursives 11-m-Schießen bis zur Ewigkeit ;)
if ($score_krauts == $score_tuerks) { weiterschiessen ($score_krauts, $score_tuerks); }
else { return "Das Spiel endet nach Elfmeterschiessen mit: "
.$score_krauts.":".$score_tuerks." (reg. Spielzeit: "
.$krautsr.":".$tuerksr.", Verlaengerung: ".$krautsv.":".$tuerksv.")\n"; }
}
my $score = em_halbfinale;
Mein letzter Aufruf ergab: 2:1 für D in der regulären Spielzeit. Dabei bleibe ich :)
Viele Grüße aus Frankfurt/Main,
Patrick
--
_ - jenseits vom delirium - _
[link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
Nichts ist unmöglich? Doch!
Heute schon gegökt?
_ - jenseits vom delirium - _
[link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
Nichts ist unmöglich? Doch!
Heute schon gegökt?