You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

71 lines
1.7 KiB
PHP

<?php
class DUEL{
public $rank1;
public $rank2;
private $factor = 400;
public function __construct($r1,$r2){
$this->rank1 = $r1;
$this->rank2 = $r2;
}
private function get_k($rank){
if ($rank < 1000) return 80;
if ($rank < 2000) return 50;
if ($rank <= 2400) return 30;
return 20;
}
private function changeScores($score){
$this->rank1 = $this->rank1 + $this->get_k($this->rank1) * ($score - (1/ (1 + pow(10,(($this->rank2 - $this->rank1) / $this->factor)))));
$this->rank2 = $this->rank2 + $this->get_k($this->rank2) * (1 - $score - (1/ (1 + pow(10,(($this->rank1 - $this->rank2) / $this->factor)))));
}
public function oneWinsAgainstTwo(){
$this->changeScores(1);
}
public function twoWinsAgainstOne(){
$this->changeScores(0);
}
public function drawGame(){
$this->changeScores(0.5);
}
}
class ELO
{
public $rank = 1500; //default rank
public function __construct($v=1500) {
$this->rank = $v;
}
private function ELO_get_new_ranks($elo1,$elo2,$score){
/*
* return an array containing new ELO scores after a battle
* $score : 0 player 2 won
* 0.5 draws
* 1 player 1 won
*/
//good luck for understanding it
//(see https://blog.antoine-augusti.fr/2012/06/maths-et-code-le-classement-elo/)
return array(
$elo1 + ELO_get_k($elo1) * ($score - (1/ (1 + pow(10,(($elo2 - $elo1) / 400))))),
$elo2 + ELO_get_k($elo2) * (1 - $score - (1/ (1 + pow(10,(($elo1 - $elo2) / 400)))))
);
}
public function looseAgainst(ELO $winer){
}
public function winAgainst(ELO $looser){
}
public function drawAgainst(ELO $drawPlayer){
}
}