I'm looking for a formula to be applied on a game

81 Views Asked by At

I've been working on a game and I need to implement a feature, but I still haven't found a good formula for it. The problem is the following:

Each team has X points, and all teams are able to challenge each other. When a weak team (few points) is defeated by a stronger team (which has more points), he will not lose a large number of points because the opponent was stronger. However, if the weak team defeats the stronger team, he should receive a large number of points, while the stronger team should lose a larger number of points, because a weaker team defeated him.

A rule must be applied also when a draw occurs. When 2 teams tie, the weaker one must receive more points than the stronger one, while the stronger must lose points if the weak team has way less points than the stronger.

1

There are 1 best solutions below

0
On

I'd maybe post this as a comment, but I don't have the necessary rep to do so. A simple formula you might use is as follows.

For a given match, let $X_L$ represent the score of the lower-ranked opponent (going in) and let $X_H$ represent the rank of the higher-ranked opponent. Let $\Delta=X_H-X_L$ represent the difference between opponents ranks. Primes are added to denote the new rank after updating following the match.

If the lower-rank wins: $X_L^\prime = X_L + a\Delta +b$ and $ X_H^\prime = X_H -a\Delta-b $

If the higher-rank wins: $X_H^\prime = X_H + \frac{X_H-\Delta}{X_H}b$ and $X_L^\prime = X_L - \frac{X_H-\Delta}{X_H}$

If the two people players have the same rank beforehand, then you can use either formula - the one who wins gets $b$ and the one loses loses $b$ either way.

Advantages of a system like this are as follows:

  • It's pretty simple.
  • The total number of points in the league is constant (it's budget balanced, you could say)
  • You can chooses $a$ and $b$ as you wish to make the league rankings very volatile and reflect changes in performance quickly or quite constant. If the average points are 1000 or so, I would probably set $b=50$ or so and set $a=0.1$.
  • Players get more from beating better players, whether or not they are the higher-ranked or not.