kelioDev/glicko2

PHP 实现的 Glicko2 评级系统

1.0.2 2019-12-05 02:44 UTC

This package is not auto-updated.

Last update: 2024-09-20 21:55:55 UTC


README

--------------------------------------------------------------------------------------------------------------

这是对 Match 类进行重命名以 MatchGame 的分支,因为在 PHP 8.0 中 "match" 是一个保留关键字

--------------------------------------------------------------------------------------------------------------

License Latest Stable Version Total Downloads

PHP 实现的 Glicko2 评级系统

安装

Composer

通过 Composer 安装此扩展是首选方式。

运行以下命令之一

php composer.phar require KelioDev/glicko2 "~1.0.0"

"KelioDev/glicko2": "~1.0.0"

将以下内容添加到您的 composer.json 的 require 部分中

使用方法

为了便于理解,以 ActiveRecord 模式为例。

在某个地方创建对象。属性名称可以是任意的

use keliodev\glicko2\Player;
// ...
public function createUserRating(int $userId)
{
    $userRating = new UserRating();
    $userRating->user_id = $userId;
    $player = new Player();
    $userRating->rating = $player->getRating();
    $userRating->rating_deviation = $player->getRatingDeviation();
    $userRating->rating_volatility = $player->getRatingVolatility();

    $userRating->insert();
    
    return $userRating;
}

好,让我们开始吧

use keliodev\glicko2\MatchGame;
use keliodev\glicko2\MatchCollection;
use keliodev\glicko2\Player;

$player1 = new Player($userRating1->rating, $userRating1->rating_deviation, $userRating1->rating_volatility);
$player2 = new Player($userRating2->rating, $userRating2->rating_deviation, $userRating2->rating_volatility);

// match chain
$match1 = new MatchGame($player1, $player2, 1, 0);
$match1->calculate();

$match2 = new MatchGame($player1, $player2, 3, 2);
$match2->calculate();

// or match collection
$matchCollection = new MatchCollection();
$matchCollection->addMatch(new MatchGame($player1, $player2, 1, 0));
$matchCollection->addMatch(new MatchGame($player1, $player2, 3, 2));
$matchCollection->calculate();

$newPlayer1Rating = $player1->getRating();
$newPlayer2Rating = $player2->getRating();

// for example, save in DB

$userRating1->rating = $player1->getRating();
$userRating1->rating_deviation = $player1->getRatingDeviation();
$userRating1->rating_volatility = $player1->getRatingVolatility();
$userRating1->update();

// similarly save the second player

作者

Aleksandr Zelenin,电子邮件:aleksandr@zelenin.me

Vlad Varlamov,电子邮件:work@laxity.ru