Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Simulating sports matches in online game

In an online manager game (like Hattrick), I want to simulate matches between two teams.

A team consists of 11 players. Every player has a strength value between 1 and 100. I take these strength values of the defensive players for each team and calculate the average. That's the defensive quality of a team. Then I take the strengths of the offensive players and I get the offensive quality.

For each attack, I do the following:

$offFactor = ($attackerTeam_offensive-$defenderTeam_defensive)/max($attackerTeam_offensive, $defenderTeam_defensive);
$defFactor = ($defenderTeam_defensive-$attackerTeam_offensive)/max($defenderTeam_defensive, $attackerTeam_offensive);

At the moment, I don't know why I divide it by the higher one of both values. But this formula should give you a factor for the quality of offense and defense which is needed later.

Then I have nested conditional statements for each event which could happen. E.g.: Does the attacking team get a scoring chance?

if ((mt_rand((-10+$offAdditionalFactor-$defAdditionalFactor), 10)/10)+$offFactor >= 0) 
{ ... // the attack succeeds

These additional factors could be tactical values for example.

Do you think this is a good way of calculating a game? My users say that they aren't satisfied with the quality of the simulations. How can I improve them? Do you have different approaches which could give better results? Or do you think that my approach is good and I only need to adjust the values in the conditional statements and experiment a bit?

I hope you can help me. Thanks in advance!

like image 647
caw Avatar asked Sep 03 '09 17:09

caw


People also ask

What is a sport simulation game?

Teams played against one another in simulated games. The idea is to recreate the game as close to reality as possible, as well as give players the chance to act both as general manager and field manager. With the advances in technology, sports simulation games have become more sophisticated than ever.

What is an online simulation game?

Simulation games are a genre of games that are designed to mimic activities you'd see in the real world. The purpose of the game may be to teach you something. For example, you could learn how to fish. Others simulation games take on operating a business such as a farm or a theme park.

Is there a game that simulates real life?

Real Life Simulator will be a Simulation and Role Playing game. In this game you will be able to spend time in an imaginary world with real people online. You can come out of the real world and shape your character's life in an imaginary world.


2 Answers

Here is a way I would do it.

Offensive/Defensive Quality

First lets work out the average strength of the entire team:

Team.Strength = SUM(Players.Strength) / 11

Now we want to split out side in two, and work out the average for our defensive players, and our offensive players.]

Defense.Strength = SUM(Defensive_Players.Strength)/Defensive_Players.Count
Offense.Strength = SUM(Offense_Players.Strength)/Offense_Players.Count

Now, we have three values. The first, out Team average, is going to be used to calculate our odds of winning. The other two, are going to calculate our odds of defending and our odds of scoring.

A team with a high offensive average is going to have more chances, a team with a high defense is going to have more chance at saving.

Now if we have to teams, lets call them A and B.

Team A, have an average of 80, An offensive score of 85 and a defensive score of 60.

Team B, have an average of 70, An offensive score of 50 and a defensive score of 80.

Now, based on the average. Team A, should have a better chance at winning. But by how much?

Scoring and Saving

Lets work out how many times goals Team A should score:

A.Goals = (A.Offensive / B.Defensive) + RAND()
        = (85/80) + 0.8;
        = 1.666

I have assumed the random value adds anything between -1 and +1, although you can adjust this.

As we can see, the formula indicates team A should score 1.6 goals. we can either round this up/down. Or give team A 1, and calculate if the other one is allowed (random chance).

Now for Team B

B.Goals = (B.Offensive / A.Defensive) + RAND()
        = (50/60) + 0.2;
        = 1.03

So we have A scoring 1 and B scoring 1. But remember, we want to weight this in A's favour, because, overall, they are the better team.

So what is the chance A will win?

Chance A Will Win = (A.Average / B.Average)
                  = 80 / 70
                  = 1.14

So we can see the odds are 14% (.14) in favor of A winning the match. We can use this value to see if there is any change in the final score:

if Rand() <= 0.14 then Final Score  = A 2 - 1 B Otherwise A 1 - 1 B

If our random number was 0.8, then the match is a draw.

Rounding Up and Further Thoughts

You will definitely want to play around with the values. Remember, game mechanics are very hard to get right. Talk to your players, ask them why they are dissatisfied. Are there teams always losing? Are the simulations always stagnant? etc.

The above outline is deeply affected by the randomness of the selection. You will want to normalise it so the chances of a team scoring an extra 5 goals is very very rare. But a little randomness is a great way to add some variety to the game.

There are ways to edit this method as well. For example instead of the number of goals, you could use the Goal figure as the number of scoring chances, and then have another function that worked out the number of goals based on other factors (i.e. choose a random striker, and use that players individual stats, and the goalies, to work out if there is a goal)

I hope this helps.

like image 195
AAA Avatar answered Nov 15 '22 11:11

AAA


The most basic tactical decision in football is picking formation, which is a set of three numbers which assigns the 10 outfield players to defence, midfield and attack, respectively, e.g. 4/4/2.

If you use average player strength, you don't merely lose that tactic, you have it going backwards: the strongest defence is one with a single very good player, giving him any help will make it more likely the other team score. If you have one player with a rating of 10, the average is 10. Add another with rating 8, and the average drops (to 9). But assigning more people to defence should make it stronger, not weaker.

So first thing, you want to make everything be based on the total, not the average. The ratio between the totals is a good scale-independent way of determining which teams is stronger and by how much. Ratios tend to be better than differences, because they work in a predictable way with teams of any range of strengths. You can set up a combat results table that says how many goals are scored (per game, per half, per move, or whatever).

The next tactical choice is whether it is better to have one exceptional player, or several good ones. You can make that matter that by setting up scenarios that represent things that happen in game, e.g. a 1 on 1, a corner, or a long ball. The players involved in a scenario are first randomly chosen, then the result of the scenario is rolled for. One result can be that another scenario starts (midfield pass leads to cross leads to header chance).

The final step, which would bring you pretty much up to the level of actual football manager games, is to give players more than one type of strength rating, e.g., heading, passing, shooting, and so on. Then you use the strength rating appropriate to the scenario they are in.

like image 21
soru Avatar answered Nov 15 '22 09:11

soru