0
\$\begingroup\$

I'm trying to determine how good a player is getting throughout his gameplay and hopefully adapt the level of the game to his expertise. Currently I have a scoring system. For example, if the player collects tokens he gets scores, if he's hit by a monster he looses score etc.

I'd like to log this score based on time(time = the amount of time passed since player started playing), and compare previous plays to the current gameplay score at any given time. If i see that the player's score is much higher than usual I'll adapt the gameplay to challenge him, and the other way around of course.

As to the question. I'm trying to understand what module would be best for:

  1. Building the previous score per time values. For each gameplay I'll have to update the previous score per time with the new score with some mean. I'm just not sure which one I should use? (should I keep separate values of last two game plays and all the rest, and then give more weight for last games when calculating the means?)
  2. How should I detect significants? What would be the best way to detect player is playing much better or worse?

Also, if anyone could refer me to good tutorials, essays, etc. I will be very greatful.

Thanks

\$\endgroup\$
3
  • \$\begingroup\$ (This is not from a proffessional view, But a gamers and slight programmer.) You could keep your headime system. Get hit by a monster, time increases X seconds, collect a coin and time freezes for a second or decreases...ect This should develop a simple and easy scoring system that can judge how well a player is doing. \$\endgroup\$ Oct 22, 2014 at 6:49
  • \$\begingroup\$ I don't know what kind of game you are trying to make so i can't gaurantee if my answer would be accurate for you. I will just give you an idea, so you can craft it the way you like it. Everytime the player plays, you can calculate the time taken for it to complete level, how many bonuses he collected, how much health he lost. You can do this for the last 3 or 5 games he played and then you can compare it to see how it got changed. In this way, you will know exactly in which aspect he is getting better or worse and you can change it accordingly. \$\endgroup\$ Oct 22, 2014 at 11:14
  • \$\begingroup\$ We can't really tell you what game you should be making, since it's pretty personal. Is there something specific and objective about the decision of "what scoring system should I use use" that you're stuck on? \$\endgroup\$
    – Anko
    Oct 22, 2014 at 13:07

1 Answer 1

3
\$\begingroup\$

I think what you are looking for is Statistical Change Detection.

I remember we studied such things in our Bachelor degree, for applications such as detecting when a machine is behaving slower than usual.

Although I have been unable to find any paper explaining our method, it would work like this:

In order to detect an statistical relevant change in a process, you keep a record of the last X measures of your process (on this case score). Then, you compare the value of the last measure with the average of all of them. If this value is above or below 2 times the standard deviation of the series, then an statistical change has occurred.

The problem with this method is that it is very sensible to anomalies. Just let your friend play one game and you can suddenly jump in difficulty. In order to avoid this, it is advisable to compare the average of the last Y values, with Y significantly smaller than X, with the total average.

To put a concrete example, you could store the last 20 scores obtained by your player. Then, you compute the average and the standard deviation. Finally, you compute the average of the last 3 played games. If this average is more than 2 times the standard deviation from the total, you can safely deduce that your player has improved significantly, and then increase difficulty.

Playing around with the parameters such as the number of scores stores, the number of last scores used for the measure and how many standard deviations to use for the comparison can be used to tune the sensitivity of the system.

\$\endgroup\$

Not the answer you're looking for? Browse other questions tagged .