Develop a classic soccer management game using test-driven development (TDD).
Continuously refactor your code applying the SOLID, DRY, Tell-don't-ask and KISS design principles.
The game should have the following features:
-
Play as the manager of a team in a 10-team league.
-
Teams play a game once per week.
-
Teams play each other twice over the course of a season.
-
Each team has 11 players. Individual players have a skill rating (which is randomly assigned).
-
A team's chance of scoring a goal is proportional to the total of their player skill points.
-
The winning team scores more goals than their opposing team in a game.
-
Three points are awarded to a team for a win. One point is awarded for a draw to each team. No points are awarded to losing teams.
-
The league table is recalculated each week.
If time permits, here are some suggestions for more advanced features:
-
More than one league with promotion and relegation for teams at the end of each season.
-
Players have a 0-5% chance of receiving an injury in a game which affects their skill rating by 10%-80%.