mirror of
https://github.com/JeroenED/libpairtwo.git
synced 2024-11-22 06:26:57 +01:00
Added some tiebreaks
This commit is contained in:
parent
865893b30f
commit
6d61d2a650
@ -3,43 +3,111 @@
|
|||||||
|
|
||||||
namespace JeroenED\Libpairtwo;
|
namespace JeroenED\Libpairtwo;
|
||||||
|
|
||||||
|
use JeroenED\Libpairtwo\Enums\Color;
|
||||||
use JeroenED\Libpairtwo\Models\Tournament;
|
use JeroenED\Libpairtwo\Models\Tournament;
|
||||||
|
use JeroenED\Libpairtwo\Enums\Result;
|
||||||
|
|
||||||
abstract class Tiebreaks extends Tournament
|
abstract class Tiebreaks extends Tournament
|
||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param int $key
|
* @param int $key
|
||||||
|
* @param Player $player
|
||||||
|
* @return float
|
||||||
*/
|
*/
|
||||||
protected function calculateKeizer(int $key)
|
protected function calculateKeizer(int $key, Player $player): float
|
||||||
{
|
{
|
||||||
foreach ($this->getPlayers() as $player) {
|
|
||||||
$currentTiebreaks = $player->getTiebreaks();
|
$currentTiebreaks = $player->getTiebreaks();
|
||||||
$currentTiebreaks[$key] = $player->getBinaryData('ScoreAmerican');
|
$currentTiebreaks[$key] = $player->getBinaryData('ScoreAmerican');
|
||||||
$player->setTiebreaks($currentTiebreaks);
|
$player->setTiebreaks($currentTiebreaks);
|
||||||
}
|
return $currentTiebreaks[$key];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param int $key
|
* @param int $key
|
||||||
|
* @param Player $player
|
||||||
|
* @return float
|
||||||
*/
|
*/
|
||||||
protected function calculateAmerican(int $key)
|
protected function calculateAmerican(int $key, Player $player): float
|
||||||
{
|
{
|
||||||
foreach ($this->getPlayers() as $player) {
|
|
||||||
$currentTiebreaks = $player->getTiebreaks();
|
$currentTiebreaks = $player->getTiebreaks();
|
||||||
$currentTiebreaks[$key] = $player->getBinaryData('ScoreAmerican');
|
$currentTiebreaks[$key] = $player->getBinaryData('ScoreAmerican');
|
||||||
$player->setTiebreaks($currentTiebreaks);
|
$player->setTiebreaks($currentTiebreaks);
|
||||||
|
return $currentTiebreaks[$key];
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param int $key
|
* @param int $key
|
||||||
|
* @param Player $player
|
||||||
|
* @return float
|
||||||
*/
|
*/
|
||||||
protected function calculatePoints(int $key)
|
protected function calculatePoints(int $key, Player $player): float
|
||||||
{
|
{
|
||||||
foreach ($this->getPlayers() as $player) {
|
|
||||||
$currentTiebreaks = $player->getTiebreaks();
|
$currentTiebreaks = $player->getTiebreaks();
|
||||||
$currentTiebreaks[$key] = $player->getBinaryData('Points');
|
$currentTiebreaks[$key] = $player->getBinaryData('Points');
|
||||||
$player->setTiebreaks($currentTiebreaks);
|
$player->setTiebreaks($currentTiebreaks);
|
||||||
|
return $currentTiebreaks[$key];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param int $key
|
||||||
|
* @param Player $player
|
||||||
|
* @return float
|
||||||
|
*/
|
||||||
|
protected function calculateBaumbach(int $key, Player $player): float
|
||||||
|
{
|
||||||
|
$wonArray = [Result::won, Result::wonadjourned, Result::wonbye, Result::wonforfait];
|
||||||
|
$totalwins = 0;
|
||||||
|
foreach ($player->getPairings() as $pairing) {
|
||||||
|
if (array_search($pairing->getResult(), $wonArray) !== false) {
|
||||||
|
$totalwins++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$currentTiebreaks = $player->getTiebreaks();
|
||||||
|
$currentTiebreaks[$key] = $totalwins;
|
||||||
|
$player->setTiebreaks($currentTiebreaks);
|
||||||
|
return $currentTiebreaks[$key];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param int $key
|
||||||
|
* @param Player $player
|
||||||
|
* @return float
|
||||||
|
*/
|
||||||
|
protected function calculateBlackPlayed(int $key, Player $player): float
|
||||||
|
{
|
||||||
|
$blackArray = [Color::black];
|
||||||
|
$totalwins = 0;
|
||||||
|
foreach ($player->getPairings() as $pairing) {
|
||||||
|
if (array_search($pairing->getColor(), $blackArray) !== false) {
|
||||||
|
$totalwins++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$currentTiebreaks = $player->getTiebreaks();
|
||||||
|
$currentTiebreaks[$key] = $totalwins;
|
||||||
|
$player->setTiebreaks($currentTiebreaks);
|
||||||
|
return $currentTiebreaks[$key];
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @param int $key
|
||||||
|
* @param Player $player
|
||||||
|
* @return float
|
||||||
|
*/
|
||||||
|
protected function calculateBlackWin(int $key, Player $player): float
|
||||||
|
{
|
||||||
|
$wonArray = [Result::won, Result::wonadjourned, Result::wonbye, Result::wonforfait];
|
||||||
|
$blackArray = [Color::black];
|
||||||
|
$totalwins = 0;
|
||||||
|
foreach ($player->getPairings() as $pairing) {
|
||||||
|
if (array_search($pairing->getColor(), $blackArray) !== false && array_search($pairing->getResult(), $wonArray) !== false) {
|
||||||
|
$totalwins++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$currentTiebreaks = $player->getTiebreaks();
|
||||||
|
$currentTiebreaks[$key] = $totalwins;
|
||||||
|
$player->setTiebreaks($currentTiebreaks);
|
||||||
|
return $currentTiebreaks[$key];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -206,7 +206,6 @@ class Tournament extends Tiebreaks
|
|||||||
*/
|
*/
|
||||||
public function getRanking()
|
public function getRanking()
|
||||||
{
|
{
|
||||||
$this->calculateTiebreaks();
|
|
||||||
$players = $this->getPlayers();
|
$players = $this->getPlayers();
|
||||||
|
|
||||||
usort($players, array($this, "SortTiebreak"));
|
usort($players, array($this, "SortTiebreak"));
|
||||||
@ -221,28 +220,41 @@ class Tournament extends Tiebreaks
|
|||||||
*/
|
*/
|
||||||
private function sortTiebreak(Player $a, Player $b)
|
private function sortTiebreak(Player $a, Player $b)
|
||||||
{
|
{
|
||||||
return $b->getTiebreaks()[0] - $a->getTiebreaks()[0];
|
$result = 0;
|
||||||
|
foreach ($this->getTiebreaks() as $key=>$tiebreak) {
|
||||||
|
$result = $this->CalculateTiebreak($key, $b, $a) - $this->CalculateTiebreak($key, $a, $b);
|
||||||
|
if ($result != 0) {
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return Tournament
|
* @return float
|
||||||
*/
|
*/
|
||||||
private function calculateTiebreaks(): Tournament
|
private function calculateTiebreak(int $key, Player $player, Player $opponent): float
|
||||||
{
|
{
|
||||||
foreach ($this->getTiebreaks() as $key=>$tiebreak) {
|
$tiebreak = $this->getTiebreaks()[$key];
|
||||||
switch ($tiebreak) {
|
switch ($tiebreak) {
|
||||||
case Tiebreak::Keizer:
|
case Tiebreak::Keizer:
|
||||||
$this->calculateKeizer($key);
|
return $this->calculateKeizer($key, $player);
|
||||||
break;
|
break;
|
||||||
case Tiebreak::American:
|
case Tiebreak::American:
|
||||||
$this->calculateAmerican($key);
|
return $this->calculateAmerican($key, $player);
|
||||||
break;
|
break;
|
||||||
case Tiebreak::Points:
|
case Tiebreak::Points:
|
||||||
$this->calculatePoints($key);
|
return $this->calculatePoints($key, $player);
|
||||||
|
break;
|
||||||
|
case Tiebreak::Baumbach:
|
||||||
|
return $this->calculateBaumbach($key, $player);
|
||||||
|
break;
|
||||||
|
case Tiebreak::BlackPlayed:
|
||||||
|
return $this->calculateBlackPlayed($key, $player);
|
||||||
|
break;
|
||||||
|
case Tiebreak::BlackWin:
|
||||||
|
return $this->calculateBlackWin($key, $player);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -74,5 +74,5 @@ echo "Tiebreak 1: " . $sws->getTournament()->getTiebreaks()[0]->getValue() . P
|
|||||||
echo "Tiebreak 2: " . $sws->getTournament()->getTiebreaks()[1]->getValue() . PHP_EOL;
|
echo "Tiebreak 2: " . $sws->getTournament()->getTiebreaks()[1]->getValue() . PHP_EOL;
|
||||||
echo "Tiebreak 3: " . $sws->getTournament()->getTiebreaks()[2]->getValue() . PHP_EOL;
|
echo "Tiebreak 3: " . $sws->getTournament()->getTiebreaks()[2]->getValue() . PHP_EOL;
|
||||||
foreach ($sws->getTournament()->getRanking() as $player) {
|
foreach ($sws->getTournament()->getRanking() as $player) {
|
||||||
echo $player->getName() . ' ' . $player->getTiebreaks()[0] . PHP_EOL;
|
echo $player->getName() . ' ' . implode(' ', $player->getTiebreaks()) . PHP_EOL;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user