![](/img/trans.png)
[英]How to connect javascript/angular.js game board to firebase database
[英]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.