
Advertisement
This topic is 2348 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.
If you intended to correct an error in the post then please contact us.
Advertisement
Opwiz 348
I'd suggest something like the following:
1. Get the best score achieved for each level and square them.
2. Add all those together.
3. Square root it.
Nice. Simple and at first glance it seems to work well.
0
Opwiz 348
Hmm, good question. It's really got to be a compromise between fairness and player satisfaction. You want perfection to have a higher effect than levels played.
Experimented with some numbers (scores between 11000):
[Score1, Score2, ...] = Player Score
[500, 500] = 707
[1000] = 1000
[1000, 1000, 1000, 500] = 1802
[1000, 1000, 1000, 500, 500] = 1870
[1000, 1000, 1000, 500, 500, 500] = 1936
[1000, 1000, 1000, 500, 500, 500, 500, 500] = 2061
[1000, 1000, 1000, 1000] = 2000
sqrt (1000^2*99 + 500^2) = 9962
sqrt (1000^2*100) = 10000
sqrt (1000^2*99 + 500^2*5) = 10012
I'd say it works pretty well. Improving an average score to a perfect score is worth about the same as adding 4 average scores. IMO doubling your score should be worth more so I'll try to tweak it.
Just need to understand the algoritm . So I found it's called RSS (rootsum square). What does it mean to take the RSS of the scores in this case? Any tips on how it can be tweaked? Edited by Opwiz
1
Legendre 985
I am planning to implement some kind of ranking for my game too. What I intend to do is to google for discussions about chess ranking systems. In my humble opinion, this topic should be pretty well discussed and researched in chess, and so it is the best place to "free ride".
0
Opwiz 348
I am planning to implement some kind of ranking for my game too. What I intend to do is to google for discussions about chess ranking systems. In my humble opinion, this topic should be pretty well discussed and researched in chess, and so it is the best place to "free ride".
Chess uses the ELOrating system (and many other games). It works really well in PvP games with matchmaking  the rating is accurate in reflecting the players relative skill compared to other players. As I've stated in OP though, the ELOrating system is not really what I'm looking for.
0
Hodgman 52289
Seeing [font=courier new,courier,monospace]sqrt(x)[/font] is the same as [font=courier new,courier,monospace]pow(x, 1/2)[/font] (i.e. the inverse of [font=courier new,courier,monospace]pow(x,2)[/font]), you can try tweaking that hardcoded 2 with different values, e.g. what you've got now is the same as this, so replace 2.0f with a variable and see what happens:
Any tips on how it can be tweaked?
int sum=0;
for( int i=0; i!=count; ++i )
sum += pow( scores, 2.0f );
score = pow( sum, 1/2.0f );
I guess larger numbers give more weight to perfectionists, and smaller numbers are closer to a regular average.
Edited by Hodgman
3
Opwiz 348
Seeing [font=courier new,courier,monospace]sqrt(x)[/font] is the same as [font=courier new,courier,monospace]pow(x, 1/2)[/font] (i.e. the inverse of [font=courier new,courier,monospace]pow(x,2)[/font]), you can try tweaking that hardcoded 2 with different values, e.g. what you've got now is the same as this, so replace 2.0f with a variable and see what happens:
[quote name='Opwiz' timestamp='1336810822' post='4939521']
Any tips on how it can be tweaked?
int sum=0;
for( int i=0; i!=count; ++i )
sum += pow( scores, 2.0f );
score = pow( sum, 1/2.0f );
I guess larger numbers give more weight to perfectionists, and smaller numbers are closer to a regular average.[/quote]
Thanks for the suggestion.
0
jefferytitan 2525
As Hodgman said, it can be tweaked by changing the powers involved, e.g. use cubes instead of squares to emphasize perfectionism.
The other thing to consider is that you can choose to use a similar formula for calculating the score for an individual level if you wish, e.g. sum((score(k=1..n)^p) / n) ^ (1/p). The higher p is, the closer it is to max(score(k=1..n)). When p=1 it's an average. The downside being that scores could go down if they do many bad replays. Or you could perhaps make it the sum of their best 3 scores so they can improve their score without beating their best score for a level.
The other thing to consider is that you can choose to use a similar formula for calculating the score for an individual level if you wish, e.g. sum((score(k=1..n)^p) / n) ^ (1/p). The higher p is, the closer it is to max(score(k=1..n)). When p=1 it's an average. The downside being that scores could go down if they do many bad replays. Or you could perhaps make it the sum of their best 3 scores so they can improve their score without beating their best score for a level.
0
Stroppy Katamari 1416
There is still the question of how you translate time on a given level to ranking points.
I would recommend the system used in IPSC competition, where the best competitor gets max points per stage (= level in your game), and the rest get points scaled according to how well they did in comparison; this is robust and there is no need to estimate a theoretical "best" or "par" time.
This conflicts with your requirements in that points can go down. That said, it only happens when someone beats the track record, the negative effect on points is small and gets smaller over time (because the record can't be improved by that much). For example, when track record improves from 82 to 80 seconds on a level with 100 max points, someone whose personal record time was 94 seconds and had 87 ranking points from the level will still have 85 ranking points afterwards.
I would recommend the system used in IPSC competition, where the best competitor gets max points per stage (= level in your game), and the rest get points scaled according to how well they did in comparison; this is robust and there is no need to estimate a theoretical "best" or "par" time.
This conflicts with your requirements in that points can go down. That said, it only happens when someone beats the track record, the negative effect on points is small and gets smaller over time (because the record can't be improved by that much). For example, when track record improves from 82 to 80 seconds on a level with 100 max points, someone whose personal record time was 94 seconds and had 87 ranking points from the level will still have 85 ranking points afterwards.
0
Sign in to follow this
Followers
0

Advertisement
I'd suggest something like the following:
1. Get the best score achieved for each level and square them.
2. Add all those together.
3. Square root it.
Therefore someone who achieved 100 at 2 levels would get 141 (rounded), and someone who achieved 50 at 4 levels would get 100.
The pros:
 Score never goes down.
 Score goes up if you play levels you never played OR beat your high score at an already played level.
 Rewards perfectionists
The cons:
 Hard to understand the scoring system.
 Numbers aren't nice and round.
 Score doesn't move if you fail to beat your own high scores.
Share this post
Link to post
Share on other sites