ELO
This commit is contained in:
parent
f3cd4bd9f0
commit
3f0bae6d07
|
|
@ -177,6 +177,34 @@ function get_battles_history($game){
|
||||||
}
|
}
|
||||||
return $results;
|
return $results;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function ELO_get_k($elo){
|
||||||
|
if ($elo < 1000){
|
||||||
|
return 80;
|
||||||
|
}
|
||||||
|
if ($elo < 2000){
|
||||||
|
return 50;
|
||||||
|
}
|
||||||
|
if ($elo <= 2400){
|
||||||
|
return 30;
|
||||||
|
}
|
||||||
|
return 20;
|
||||||
|
}
|
||||||
|
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) * ($score - (1/ (1 + pow(10,(($elo1 - $elo2) / 400;)))))
|
||||||
|
);
|
||||||
|
}
|
||||||
function save_battle($game,$bot1,$bot2,$resultat){
|
function save_battle($game,$bot1,$bot2,$resultat){
|
||||||
//resultat: 0 match nul, 1 bot1 gagne 2 bot 2 gagne
|
//resultat: 0 match nul, 1 bot1 gagne 2 bot 2 gagne
|
||||||
|
|
||||||
|
|
@ -186,11 +214,12 @@ function save_battle($game,$bot1,$bot2,$resultat){
|
||||||
|
|
||||||
|
|
||||||
//chercher les id de bot 1 et bot2
|
//chercher les id de bot 1 et bot2
|
||||||
$rs=mysqli_query($lnMysql,"SELECT name,id FROM bots
|
$rs=mysqli_query($lnMysql,"SELECT name,id,ELO FROM bots
|
||||||
WHERE name='".mysqli_real_escape_string($lnMysql,$bot1)."'
|
WHERE name='".mysqli_real_escape_string($lnMysql,$bot1)."'
|
||||||
OR name='".mysqli_real_escape_string($lnMysql,$bot2)."'");
|
OR name='".mysqli_real_escape_string($lnMysql,$bot2)."'");
|
||||||
while($r=mysqli_fetch_row($rs)){
|
while($r=mysqli_fetch_row($rs)){
|
||||||
$bots[$r[0]]=$r[1];
|
$bots[$r[0]]=$r[1];
|
||||||
|
$actualELO[$r[0]]=$r[2];
|
||||||
}
|
}
|
||||||
|
|
||||||
if((!isset($bots[$bot1])) OR (!isset($bots[$bot2]))){
|
if((!isset($bots[$bot1])) OR (!isset($bots[$bot2]))){
|
||||||
|
|
@ -201,25 +230,41 @@ function save_battle($game,$bot1,$bot2,$resultat){
|
||||||
switch($resultat){
|
switch($resultat){
|
||||||
case 0:
|
case 0:
|
||||||
$field="nulCount";
|
$field="nulCount";
|
||||||
|
$eloScore = 0.5;
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
$field="player1_winsCount";
|
$field="player1_winsCount";
|
||||||
|
$eloScore = 1;
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
$field="player2_winsCount";
|
$field="player2_winsCount";
|
||||||
|
$eloScore = 0;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
error (500,"something impossible has happened");
|
error (500,"something impossible has happened");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
mysqli_query($lnMysql,
|
$newRanks = ELO_get_new_ranks($actualELO[$bot1],$actualELO[$bot2],$eloScore);
|
||||||
"INSERT INTO arena_history(game,player1_id,player2_id,".$field.") VALUES
|
|
||||||
|
mysqli_multi_query($lnMysql,
|
||||||
|
"
|
||||||
|
UPDATE bots
|
||||||
|
SET ELO='".$newRanks[0]."'
|
||||||
|
WHERE id='".$bots[$bot1]."';
|
||||||
|
|
||||||
|
UPDATE bots
|
||||||
|
SET ELO='".$newRanks[1]."'
|
||||||
|
WHERE id='".$bots[$bot2]."';
|
||||||
|
|
||||||
|
|
||||||
|
INSERT INTO arena_history(game,player1_id,player2_id,".$field.") VALUES
|
||||||
('".mysqli_real_escape_string($lnMysql,$game)."',
|
('".mysqli_real_escape_string($lnMysql,$game)."',
|
||||||
'".$bots[$bot1]."',
|
'".$bots[$bot1]."',
|
||||||
'".$bots[$bot2]."',
|
'".$bots[$bot2]."',
|
||||||
'1')
|
'1')
|
||||||
ON DUPLICATE KEY UPDATE ".$field." = ".$field." + 1;");
|
ON DUPLICATE KEY UPDATE ".$field." = ".$field." + 1;");
|
||||||
|
|
||||||
}
|
}
|
||||||
function get_unique_id(){
|
function get_unique_id(){
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user