2019-02-06 17:23:37 +01:00
|
|
|
<?php
|
2020-08-02 21:51:59 +02:00
|
|
|
|
2019-02-06 17:23:37 +01:00
|
|
|
/**
|
2019-06-19 19:49:39 +02:00
|
|
|
* Class Games
|
|
|
|
*
|
|
|
|
* Class for a game of the tournament
|
|
|
|
*
|
2020-08-02 21:51:59 +02:00
|
|
|
* @author Jeroen De Meerleer <schaak@jeroened.be>
|
|
|
|
* @category Main
|
|
|
|
* @package Libpairtwo
|
|
|
|
* @copyright Copyright (c) 2018-2019 Jeroen De Meerleer <schaak@jeroened.be>
|
2019-02-06 17:23:37 +01:00
|
|
|
*/
|
|
|
|
|
|
|
|
namespace JeroenED\Libpairtwo;
|
|
|
|
|
2019-03-20 12:46:46 +01:00
|
|
|
use JeroenED\Libpairtwo\Enums\Gameresult;
|
2019-02-06 17:23:37 +01:00
|
|
|
|
2019-06-19 19:49:39 +02:00
|
|
|
/**
|
|
|
|
* Class Games
|
|
|
|
*
|
|
|
|
* Class for a game of the tournament
|
|
|
|
*
|
2020-08-02 21:51:59 +02:00
|
|
|
* @author Jeroen De Meerleer <schaak@jeroened.be>
|
|
|
|
* @category Main
|
|
|
|
* @package Libpairtwo
|
|
|
|
* @copyright Copyright (c) 2018-2019 Jeroen De Meerleer <schaak@jeroened.be>
|
2019-06-19 19:49:39 +02:00
|
|
|
*/
|
|
|
|
class Game
|
2019-02-06 17:23:37 +01:00
|
|
|
{
|
2019-11-17 01:20:15 +01:00
|
|
|
/**
|
2020-11-22 17:13:13 +01:00
|
|
|
* The pairing for this games as seen from black's side
|
2019-11-17 01:20:15 +01:00
|
|
|
*
|
|
|
|
* @var Pairing | null
|
|
|
|
*/
|
2020-11-22 17:13:13 +01:00
|
|
|
public $Black;
|
2019-06-19 19:49:39 +02:00
|
|
|
|
2019-11-17 01:20:15 +01:00
|
|
|
/**
|
2020-11-22 17:13:13 +01:00
|
|
|
* The board where this game is held
|
2019-11-17 01:20:15 +01:00
|
|
|
*
|
2020-11-22 17:13:13 +01:00
|
|
|
* @var int
|
2019-11-17 01:20:15 +01:00
|
|
|
*/
|
2020-11-22 17:13:13 +01:00
|
|
|
public $Board;
|
2019-06-19 19:49:39 +02:00
|
|
|
|
2019-11-17 01:20:15 +01:00
|
|
|
/**
|
|
|
|
* The calculated game result
|
|
|
|
*
|
|
|
|
* @var GameResult | null
|
|
|
|
*/
|
2019-11-15 17:16:38 +01:00
|
|
|
private $CalculatedResult;
|
2019-06-19 19:49:39 +02:00
|
|
|
|
2019-11-17 01:20:15 +01:00
|
|
|
/**
|
2020-11-22 17:13:13 +01:00
|
|
|
* The pairing for this games as seen from white's side
|
2019-11-17 01:20:15 +01:00
|
|
|
*
|
2020-11-22 17:13:13 +01:00
|
|
|
* @var Pairing | null
|
2019-11-17 01:20:15 +01:00
|
|
|
*/
|
2020-11-22 17:13:13 +01:00
|
|
|
public $White;
|
2019-11-15 17:16:38 +01:00
|
|
|
|
2019-11-17 01:20:15 +01:00
|
|
|
/**
|
|
|
|
* Returns fields that were not directly assigned.
|
|
|
|
* Class Game contains the special field Result containing the result of the game
|
2020-08-02 21:51:59 +02:00
|
|
|
*
|
2020-11-22 17:13:13 +01:00
|
|
|
* @param string $key
|
|
|
|
*
|
2019-11-17 01:20:15 +01:00
|
|
|
* @return Gameresult
|
|
|
|
*/
|
2019-11-16 14:43:12 +01:00
|
|
|
public function __get(string $key)
|
2019-11-15 17:16:38 +01:00
|
|
|
{
|
2019-11-16 14:43:12 +01:00
|
|
|
if ($key == 'Result') {
|
2019-11-15 17:16:38 +01:00
|
|
|
return $this->calculateResult();
|
|
|
|
}
|
2020-11-22 17:13:13 +01:00
|
|
|
|
2019-11-17 01:20:15 +01:00
|
|
|
return null;
|
2019-11-15 17:16:38 +01:00
|
|
|
}
|
2019-09-28 20:17:38 +02:00
|
|
|
|
2019-03-20 12:46:46 +01:00
|
|
|
/**
|
2019-11-17 01:20:15 +01:00
|
|
|
* Returns the result for the game.
|
|
|
|
* This method needs to be called from $Game->Result
|
2019-06-19 19:49:39 +02:00
|
|
|
*
|
|
|
|
* @return Gameresult
|
2019-03-20 12:46:46 +01:00
|
|
|
*/
|
2019-11-15 17:16:38 +01:00
|
|
|
private function calculateResult(): Gameresult
|
2019-03-20 12:46:46 +01:00
|
|
|
{
|
2019-11-15 17:16:38 +01:00
|
|
|
if (!is_null($this->CalculatedResult)) {
|
|
|
|
return $this->CalculatedResult;
|
2019-03-20 12:46:46 +01:00
|
|
|
}
|
|
|
|
|
2019-11-15 17:16:38 +01:00
|
|
|
$whiteResult = $this->White->Result;
|
|
|
|
$blackResult = $this->Black->Result;
|
2019-03-20 12:46:46 +01:00
|
|
|
|
|
|
|
$whitesplit = explode(" ", $whiteResult);
|
|
|
|
$blacksplit = explode(" ", $blackResult);
|
|
|
|
|
2020-08-02 21:51:59 +02:00
|
|
|
$special = '';
|
2020-11-22 17:13:13 +01:00
|
|
|
if (isset($whitesplit[ 1 ]) && $whitesplit[ 1 ] != 'Bye') {
|
|
|
|
$special = ' ' . $whitesplit[ 1 ];
|
2019-03-20 12:46:46 +01:00
|
|
|
}
|
2020-11-22 17:13:13 +01:00
|
|
|
if (isset($blacksplit[ 1 ]) && $blacksplit[ 1 ] != 'Bye') {
|
|
|
|
$special = ' ' . $blacksplit[ 1 ];
|
2019-03-20 12:46:46 +01:00
|
|
|
}
|
2020-11-22 17:13:13 +01:00
|
|
|
if ($whitesplit[ 0 ] == '*') {
|
|
|
|
$whitesplit[ 0 ] = '';
|
2019-05-28 10:07:40 +02:00
|
|
|
}
|
2020-11-22 17:13:13 +01:00
|
|
|
if ($blacksplit[ 0 ] == '*') {
|
|
|
|
$blacksplit[ 0 ] = '';
|
2019-05-28 10:07:40 +02:00
|
|
|
}
|
2020-11-22 17:13:13 +01:00
|
|
|
$result = new Gameresult($whitesplit[ 0 ] . '-' . $blacksplit[ 0 ] . $special);
|
2019-11-15 17:16:38 +01:00
|
|
|
$this->CalculatedResult = $result;
|
2019-03-20 12:46:46 +01:00
|
|
|
|
2019-03-20 17:33:09 +01:00
|
|
|
return $result;
|
2019-03-20 12:46:46 +01:00
|
|
|
}
|
2019-11-10 09:37:13 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Checks if 2 games are equal
|
|
|
|
*
|
2020-11-22 17:13:13 +01:00
|
|
|
* @param Game $game
|
|
|
|
*
|
2019-11-10 09:37:13 +01:00
|
|
|
* @return bool
|
|
|
|
*/
|
|
|
|
public function equals(Game $game): bool
|
|
|
|
{
|
|
|
|
return (
|
|
|
|
$this->White->Player === $game->White->Player &&
|
|
|
|
$this->Black->Player === $game->Black->Player &&
|
2020-08-02 21:51:59 +02:00
|
|
|
$this->Result->getKey() == $game->Result->getKey());
|
2019-11-10 09:37:13 +01:00
|
|
|
}
|
2019-02-11 17:37:30 +01:00
|
|
|
}
|