簡體   English   中英

在線angular.js游戲的評分系統

[英]Ratings system for online angular.js game

我正在使用Angular js構建的在線游戲門戶。 我希望我的玩家在贏得/輸掉一場比賽時獲得更高的評分。 我該如何實施? 如果可以在純JS中運行,那么我認為它可以使其適應我的應用程序。 素描我想要的東西:

var players = [
{
id: 1,
name: "James",
rating: 100  
},
{
id: 2,
name: "Matt",
rating: 200
},
{
id: 3,
name: "Tara"
rating: 300
]
UpdateRating = function(winnerId, LoserId){
   //changes these players ratings
}

循環播放您的玩家。 如果ID與給定ID之一匹配,請更新評分。

function updateRating(winnerId, loserId) {
    for (var i = 0; i < players.length; i++) {
        var p = players[i];
        if (p.id == winnerId) {
            p.rating++;
        } else if (p.id == loserId) {
            p.rating--;
        }
    }
}

如果您做了這將是簡單players一個對象,它的鍵是玩家的ID,或使用的玩家ID為索引到數組。 然后,您將不需要循環。

怎么樣:

players = {James: 100, Matt: 200, Tara: 300}

function updateScores(winner, loser) {
  players[winner]++;
  players[loser]--;
}

updateScores("James", "Tara");

只需遍歷players數組並為匹配的用戶更新屬性rating

   UpdateRating = function(winnerId, LoserId){
       for(var i = 0; players.length; i++){
            if(players[i].id === winnerId)
                players[i].rating = players[i].rating + 10;
            else if(players[i].id === LoserId)
                players[i].rating = players[i].rating - 10;
       }
   }

ELO評級系統將在這里成為可能。 這樣做的好處是,玩家的分數變化將基於兩個玩家之間的分數差異而變化。

http://en.wikipedia.org/wiki/Elo_rating_system

玩家A在玩B時的獲勝期望為:E_A = 1 /(1 + 10 ^((R_B-R_A)/ 400))。 (根據初始等級差異,此范圍介於0和1之間)。 如果B獲勝,那么他們的等級將以您選擇的“ k因子”(您希望玩家的等級調整的速度)*以此期望值提高,而A的等級將相應減少。 我實際上是在JS游戲網站上實現的。 玩家可以畫你的游戲嗎? 如果沒有,這是我的代碼適合您的示例。

var kFactor = 15; (adjust this according to how quickly you want ratings to adapt, lower number --> adapts more quickly).
function EloRatingCalc(winner, loser, players) {
    var winElo = winner.rating;
    var loseElo = loser.rating;
    var qw = Math.pow(10,(winElo/400));
    var ql = Math.pow(10,(loseElo/400)); 
    var lossExpectation = ql/(ql+qw);
    winner.rating += parseInt(kFactor*lossExpectation);
    loser.rating -= parseInt(kFactor*lossExpectation);
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM