Je construis un tableau d'affichage de tournois multi-jeux, où de nombreux joueurs peuvent jouer à plusieurs jeux, plusieurs fois. Je veux attribuer des points aux joueurs par match en fonction de leur classement pour chaque jeu, pas de leur score réel.Attribuer des points par classement aux joueurs de plusieurs jeux
par exemple.
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
Tournoi Classement
Player1 - 1,999 Points
Player2 - 1,998 Points
Player3 - 1,997 Points
Alors Jusqu'à présent, j'ai le classement et les points calculs fonctionne très bien ...
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;
Mais je dois être en mesure d'attribuer des points par rang par match et un grand total de points pour chaque joueur que je peux puis montrer dans une liste.
Les premières données séparées de relations. Deuxièmement - les points attribués seront-ils toujours les mêmes de la 1ère place à la plus basse? Est donc déplacer cette logique métier vers le code. – JackTheKnife
oui les points sont toujours les mêmes par rang –
OK - donc éloignez ces données de DB car cela est redondant (ainsi que le rang par partie). Puis créez un tableau (hash map) pour chaque jeu à partir d'une requête avec un sort 'desc' sur la colonne Score (qui vous donnera le score le plus élevé comme rang 1 etc) où la clé est un rang et les valeurs seront un tableau (liste) de l'identifiant du joueur et du score. En faisant défiler ce type de tableau, vous pouvez créer des variables temporaires (ou un tableau à nouveau) avec des ID de joueur et leur attribuer des points de récompense. À la fin, vous devriez terminer avec le nombre total de points pour chaque ID de joueur. – JackTheKnife