按等级为多个游戏的玩家分配点数

时间:2017-04-18 17:47:48

标签: php mysql rank

我正在建立一个多游戏锦标赛记分牌,许多玩家可以多次玩很多游戏。我想根据每场比赛的得分,而不是他们的实际得分,为每场比赛的球员分配积分。

e.g。

Donkey Kong

Rank | Player  | Score  | Points Awarded    
1    | Player2 | 34,000 | 1,000    
2    | Player1 | 32,000 | 999    
3    | Player3 | 29,000 | 998

Robotron游戏

Rank | Player  | Score  | Points Awarded    
1    | Player1 | 39,000 | 1,000    
2    | Player3 | 32,000 | 999    
3    | Player2 | 21,000 | 998

锦标赛排名

Player1 - 1,999 Points

Player2 - 1,998 Points

Player3 - 1,997 Points

到目前为止,我的排名和积分计算工作得很好......

SELECT 
    `id`, 
    `userID`, 
    `gameID`, 
    `gamescore`, 
    `rank`, 
    1001.0 - (rank) AS points
FROM (
    SELECT 
        `id`, 
        `userID`, 
        `gameID`, 
        `gamescore`, 
        @curr_rank := IF(@prev_rank = id, @curr_rank, @curr_rank + 1) AS rank, 
        @prev_rank := id
    FROM
        `submit_score`, 
        (SELECT @curr_rank := 0) y, 
        (SELECT @prev_rank := NULL) z
    WHERE `submit_score`.`tournID` = 2
    ORDER BY `gamescore` DESC 
) ranked_game;

但是我需要能够按照每场比赛的等级分配分数,然后为每个玩家分配一个总积分,然后我可以在列表中显示。

1 个答案:

答案 0 :(得分:0)

您的数据库应该看起来像

<强>球员

ID | Player Nickname
1  | Player1
2  | Player2
3  | Player3

Donkey Kong

PlayerID  | Score  
Player2ID | 34,000 
Player1ID | 32,000 
Player3ID | 29,000 

<强> Robotron游戏

PlayerID  | Score 
Player1ID | 39,000
Player3ID | 32,000
Player2ID | 21,000

DB应仅用于存储数据。排名和奖励积分应该移动到代码中,因为它们是多余的部分。

然后使用desc排序分数列查询每个表。这将创建排名表与最高得分者为#1等。使用Key-&gt;值检索每个游戏的数组中的数据存储,其中Key为排名#(1+增量),值可以是存储玩家数据的其他数组(加入后)和得分或字符串类似于PlayerX |分数#如果您需要任何分数数据​​,因为实际上您只需要玩家数据对每场比赛的分数进行排序。

之后,您需要循环播放器表并创建一个玩家阵列,您将存储从循环每个游戏阵列中检索到的锦标赛点数,并减少每个等级上的锦标赛积分并分配给合适的玩家。

希望有所帮助

PS。 对于现有数据,我将创建类似

的视图
set @max_points=1000;
select Rank, Player, 
@current_points := IF(Rank = 1, @max_points, @current_points-1) AS points
from DonkeyKong

每场比赛

然后做最后的观点来总结所有锦标赛分数

select dk.Player AS Player,(dk.Points + ro.Points) AS Total 
from RO_view AS ro 
left join DK_view AS dk 
on dk.Player = ro.Player