Tricky problem with game scoring

Started by
6 comments, last by Opwiz 16 years, 3 months ago
Hello I have a tricky problem. I'm trying to find a good scoring system for my game. The game is similar to a racing game where the objective is to finish a course as fast as possible. The game also involves destroying objects along the way. Each successful destruction of an object is to be rewarded with a higher score. Courses in the game vary in length and contain different number of objects. I want to achieve a good balance between speed (finishing the course quickly) and accuracy (successfully destroying the objects). It's nice if the score of different courses can be compared (e.g. a player gets score 100 in course A and 50 in B and conclude that he has difficulties with course B). To make things worse, not destroying an object causes the player to collide and loose speed. So a course with a high density of objects has a higher correlation between objects destroyed and time it takes to finish the course. Any ideas on how to calculate a good balanced score in this game? Thanks /Opwiz

www.marklightforunity.com | MarkLight: Markup Extension Framework for Unity

Advertisement
Divide the number of objects destroyed by the time it took to finish the race. Then multiply by a big number for a cool looking score. This will give you a ratio, since the more objects you destroy, the more time it takes to complete the race and vice versa. They are directly proportionate to each other, and so their ratio should stay relatively constant.

Make sure number of objects defaults to 1 if the player actually hits none. Don;t want a score of 0, now do we?
bi-FreeSoftware
Quote:Original post by AdamGL
Divide the number of objects destroyed by the time it took to finish the race. Then multiply by a big number for a cool looking score. This will give you a ratio, since the more objects you destroy, the more time it takes to complete the race and vice versa. They are directly proportionate to each other, and so their ratio should stay relatively constant.

Make sure number of objects defaults to 1 if the player actually hits none. Don;t want a score of 0, now do we?


Thanks for the suggestion. I see one problem and that is that you can't compare different highscores from different courses by using that method.

I thought about it some more and came up with this:

(n / N + (T - t)/T) * C

n = objects destroyed
N = total number of objects in course
n/N = % objects destroyed
T = slowest possible time to complete course (not clear from my desription but there is such a number because the player speed is accelerated by the computer)
t = time it took to finish course
(T-t)/T = % difference between finishing time and worst time
C = some constant to make the score look good

Best possible score is (1 + 1) * C.

www.marklightforunity.com | MarkLight: Markup Extension Framework for Unity

Have you considered simply making the destroyed objects give you a boost in speed? That way you need only measure the time for the score; the fastest path is automatically the one that has the best balance between efficient racing line and object destruction. You find this idea in for instance the Burnout series; there are numerous ways to earn extra "points", like takedowns, near misses, drifting etc. but your reward for doing this is just a speed boost. That way it's easier for the player to work out how well he's doing without having to wait for it all to be tallied up at the end.
If failing to destroy objects penalizes the player by slowing them down, and destroying them allows the player to get a better time, then the time is going to be directly related to the objects destroyed. That means you probably don't need to make a score for the object destruction. I am assuming from your first post that you can't avoid the objects or anything like that.

I would just time the player and make the best 'score' to be the minimum time. I would also record the object destruction percentage, just for fun. To compare different courses, I would create certain time limits for a rank, e.g. A, B+, C- etc. where the limits are different for each course to compensate for the different course lengths and so on.
Quote:Original post by H4L
Have you considered simply making the destroyed objects give you a boost in speed? That way you need only measure the time for the score; the fastest path is automatically the one that has the best balance between efficient racing line and object destruction. You find this idea in for instance the Burnout series; there are numerous ways to earn extra "points", like takedowns, near misses, drifting etc. but your reward for doing this is just a speed boost. That way it's easier for the player to work out how well he's doing without having to wait for it all to be tallied up at the end.


Quote:Original post by Dr_Ian
If failing to destroy objects penalizes the player by slowing them down, and destroying them allows the player to get a better time, then the time is going to be directly related to the objects destroyed. That means you probably don't need to make a score for the object destruction. I am assuming from your first post that you can't avoid the objects or anything like that.

I would just time the player and make the best 'score' to be the minimum time. I would also record the object destruction percentage, just for fun.


Just keeping track of time simplifies things a bit. I think having time as primary score and show % destruction as a secondary score works fine if you don't want to be able to compare scores with different courses.

Quote:To compare different courses, I would create certain time limits for a rank, e.g. A, B+, C- etc. where the limits are different for each course to compensate for the different course lengths and so on.


I think this could work but it is kind of arbitrary how this ranking is calculated. It would be nice if this is done automaticly by using course length, object density, etc.

www.marklightforunity.com | MarkLight: Markup Extension Framework for Unity

Quote:Original post by Opwiz
I see one problem and that is that you can't compare different highscores from different courses by using that method.

I thought about it some more and came up with this:

(n / N + (T - t)/T) * C

n = objects destroyed
N = total number of objects in course
n/N = % objects destroyed
T = slowest possible time to complete course (not clear from my desription but there is such a number because the player speed is accelerated by the computer)
t = time it took to finish course
(T-t)/T = % difference between finishing time and worst time
C = some constant to make the score look good

Best possible score is (1 + 1) * C.


Maybe I'm just sleepy right now, but why wouldn't you be able to use that formula for comparisons between levels? Given that your formula gives a range between (0-2)*C on any given level it seems that if you kept C constant between levels your player would always see a score from 0-X (where X was some max value). Given your previous post you could just make C equal to 50 and then all levels would give the player a score between 0-100 (which seems to fit with what you wanted)

Quote:Original post by Deadpenguin
Quote:Original post by Opwiz
I see one problem and that is that you can't compare different highscores from different courses by using that method.

I thought about it some more and came up with this:

(n / N + (T - t)/T) * C

n = objects destroyed
N = total number of objects in course
n/N = % objects destroyed
T = slowest possible time to complete course (not clear from my desription but there is such a number because the player speed is accelerated by the computer)
t = time it took to finish course
(T-t)/T = % difference between finishing time and worst time
C = some constant to make the score look good

Best possible score is (1 + 1) * C.


Maybe I'm just sleepy right now, but why wouldn't you be able to use that formula for comparisons between levels? Given that your formula gives a range between (0-2)*C on any given level it seems that if you kept C constant between levels your player would always see a score from 0-X (where X was some max value). Given your previous post you could just make C equal to 50 and then all levels would give the player a score between 0-100 (which seems to fit with what you wanted)


I think this formula makes it possible to compare scores between levels :). My comments about not being able to compare referred to one of the other suggestions that have been made.

www.marklightforunity.com | MarkLight: Markup Extension Framework for Unity

This topic is closed to new replies.

Advertisement