mirror of
https://github.com/JeroenED/libpairtwo.git
synced 2024-11-21 22:17:41 +01:00
Merge branch 'task-combinedkashdan' into develop
This commit is contained in:
commit
f07ff9d173
@ -3,12 +3,13 @@
|
|||||||
## vx.y.z (Released: xx-yyy-zzzz)
|
## vx.y.z (Released: xx-yyy-zzzz)
|
||||||
* NEW FEATURE: Added clean-dist and clean-dev targets
|
* NEW FEATURE: Added clean-dist and clean-dev targets
|
||||||
* ENHANCEMENT: Better Docs generation
|
* ENHANCEMENT: Better Docs generation
|
||||||
* ENHANCEMENT: Resied logo in Doxygen for better fit
|
* ENHANCEMENT: Resized logo in Doxygen for better fit
|
||||||
* ENHANCEMENT: Doxygen takes branch name or version tag as `PROJECT_NUMBER`
|
* ENHANCEMENT: Doxygen takes branch name or version tag as `PROJECT_NUMBER`
|
||||||
* CHANGE: Version tag directly put in distribution filename
|
* CHANGE: Version tag directly put in distribution filename
|
||||||
* CHANGE: `Tournament::GameExists()` renamed to `Tournament::gameExists()`
|
* CHANGE: `Tournament::GameExists()` renamed to `Tournament::gameExists()`
|
||||||
* CHANGE: Updated composer metadata
|
* CHANGE: Updated composer metadata
|
||||||
* CHANGE: Some setters changed to fluent setters. (More info: 7aca35057c10d2b982f93a698499c0c01df2fdc5)
|
* CHANGE: Some setters changed to fluent setters. (More info: 7aca35057c10d2b982f93a698499c0c01df2fdc5)
|
||||||
|
* CHANGE: Kashdan and Soccer Kashdan are combined in 1 function
|
||||||
|
|
||||||
## v1.1 (Released: 20-jun-2019)
|
## v1.1 (Released: 20-jun-2019)
|
||||||
* NEW FEATURE: Libpairtwo distribution releases (use these if you don't have knowledge of composer or dependency management)
|
* NEW FEATURE: Libpairtwo distribution releases (use these if you don't have knowledge of composer or dependency management)
|
||||||
|
@ -351,11 +351,12 @@ class Tournament
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Sort by tiebreak
|
||||||
|
*
|
||||||
* @param Player $a
|
* @param Player $a
|
||||||
* @param Player $b
|
* @param Player $b
|
||||||
* @return Closure
|
* @return Closure
|
||||||
*/
|
*/
|
||||||
|
|
||||||
private function sortTiebreak(int $key): Closure
|
private function sortTiebreak(int $key): Closure
|
||||||
{
|
{
|
||||||
return function (Player $a, Player $b) use ($key) {
|
return function (Player $a, Player $b) use ($key) {
|
||||||
@ -368,6 +369,11 @@ class Tournament
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Calculates a specific tiebreak for $player
|
||||||
|
*
|
||||||
|
* @param Tiebreak $tiebreak
|
||||||
|
* @param Player $player
|
||||||
|
* @param int $tbkey
|
||||||
* @return float | null
|
* @return float | null
|
||||||
*/
|
*/
|
||||||
private function calculateTiebreak(Tiebreak $tiebreak, Player $player, int $tbkey = 0): ?float
|
private function calculateTiebreak(Tiebreak $tiebreak, Player $player, int $tbkey = 0): ?float
|
||||||
@ -416,10 +422,10 @@ class Tournament
|
|||||||
return $this->calculateSonneborn($player);
|
return $this->calculateSonneborn($player);
|
||||||
break;
|
break;
|
||||||
case Tiebreak::Kashdan:
|
case Tiebreak::Kashdan:
|
||||||
return $this->calculateKashdan($player);
|
return $this->calculateKashdan($player, ["Won" => 4, "Draw" => 2, "Lost" => 1, "NotPlayed" => 0]);
|
||||||
break;
|
break;
|
||||||
case Tiebreak::SoccerKashdan:
|
case Tiebreak::SoccerKashdan:
|
||||||
return $this->calculateSoccerKashdan($player);
|
return $this->calculateKashdan($player, ["Won" => 3, "Draw" => 1, "Lost" => 0, "NotPlayed" => -1]);
|
||||||
break;
|
break;
|
||||||
case Tiebreak::Cumulative:
|
case Tiebreak::Cumulative:
|
||||||
return $this->calculateCumulative($player);
|
return $this->calculateCumulative($player);
|
||||||
@ -467,6 +473,8 @@ class Tournament
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Points following keizer system
|
||||||
|
*
|
||||||
* @param Player $player
|
* @param Player $player
|
||||||
* @return float | null
|
* @return float | null
|
||||||
*/
|
*/
|
||||||
@ -477,6 +485,8 @@ class Tournament
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Points following american system
|
||||||
|
*
|
||||||
* @param Player $player
|
* @param Player $player
|
||||||
* @return float | null
|
* @return float | null
|
||||||
*/
|
*/
|
||||||
@ -487,6 +497,8 @@ class Tournament
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Number of points
|
||||||
|
*
|
||||||
* @param Player $player
|
* @param Player $player
|
||||||
* @return float | null
|
* @return float | null
|
||||||
*/
|
*/
|
||||||
@ -497,6 +509,8 @@ class Tournament
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Number of won games
|
||||||
|
*
|
||||||
* @param Player $player
|
* @param Player $player
|
||||||
* @return float | null
|
* @return float | null
|
||||||
*/
|
*/
|
||||||
@ -513,6 +527,8 @@ class Tournament
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Number of played games with black
|
||||||
|
*
|
||||||
* @param Player $player
|
* @param Player $player
|
||||||
* @return float | null
|
* @return float | null
|
||||||
*/
|
*/
|
||||||
@ -528,6 +544,8 @@ class Tournament
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Number of won games with black
|
||||||
|
*
|
||||||
* @param Player $player
|
* @param Player $player
|
||||||
* @return float | null
|
* @return float | null
|
||||||
*/
|
*/
|
||||||
@ -719,53 +737,27 @@ class Tournament
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 3 points for each, 1 for each draw and no for losing. -1 for not played games
|
* $points["Won"] points for each win, $points["Draw"] for each draw and $points["Lost"] point for losing. $points["NotPlayed"] points for not played games
|
||||||
*
|
*
|
||||||
* @param Player $player
|
* @param Player $player
|
||||||
|
* @param int[] $points
|
||||||
* @return float | null
|
* @return float | null
|
||||||
*/
|
*/
|
||||||
private function calculateSoccerKashdan(Player $player): ?float
|
private function calculateKashdan(Player $player, array $points): ?float
|
||||||
{
|
{
|
||||||
$tiebreak = 0;
|
$tiebreak = 0;
|
||||||
foreach ($player->getPairings() as $pairing) {
|
foreach ($player->getPairings() as $pairing) {
|
||||||
$toadd = 0;
|
$toadd = 0;
|
||||||
if (array_search($pairing->getResult(), Constants::Won) !== false) {
|
if (array_search($pairing->getResult(), Constants::Won) !== false) {
|
||||||
$toadd = 3;
|
$toadd = $points["Won"];
|
||||||
} elseif (array_search($pairing->getResult(), Constants::Draw) !== false) {
|
} elseif (array_search($pairing->getResult(), Constants::Draw) !== false) {
|
||||||
$toadd = 1;
|
$toadd = $points["Draw"];
|
||||||
} elseif (array_search($pairing->getResult(), Constants::Lost) !== false) {
|
} elseif (array_search($pairing->getResult(), Constants::Lost) !== false) {
|
||||||
$toadd = 0;
|
$toadd = $points["Lost"];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (array_search($pairing->getResult(), Constants::NotPlayed) !== false) {
|
if (array_search($pairing->getResult(), Constants::NotPlayed) !== false) {
|
||||||
$toadd = -1;
|
$toadd = $points["NotPlayed"];
|
||||||
}
|
|
||||||
$tiebreak += $toadd;
|
|
||||||
}
|
|
||||||
return $tiebreak; // - $player->getNoOfWins();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 4 points for each, 2 for each draw and 1 point for losing. 0 points for not played games
|
|
||||||
*
|
|
||||||
* @param Player $player
|
|
||||||
* @return float | null
|
|
||||||
*/
|
|
||||||
private function calculateKashdan(Player $player): ?float
|
|
||||||
{
|
|
||||||
$tiebreak = 0;
|
|
||||||
foreach ($player->getPairings() as $pairing) {
|
|
||||||
$toadd = 0;
|
|
||||||
if (array_search($pairing->getResult(), Constants::Won) !== false) {
|
|
||||||
$toadd = 4;
|
|
||||||
} elseif (array_search($pairing->getResult(), Constants::Draw) !== false) {
|
|
||||||
$toadd = 2;
|
|
||||||
} elseif (array_search($pairing->getResult(), Constants::Lost) !== false) {
|
|
||||||
$toadd = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (array_search($pairing->getResult(), Constants::NotPlayed) !== false) {
|
|
||||||
$toadd = 0;
|
|
||||||
}
|
}
|
||||||
$tiebreak += $toadd;
|
$tiebreak += $toadd;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user