This project was given to the students of the 2006 class. At the end of that project, the students felt that it still had room for further development of the ideas. So we're going to re-use the same project, with the bonus that the 2007 class will get to see the 2006 reports and submitted code on courseworks, and be able to build on the previous work. Of course, you're welcome to start from scratch if you think you have a new way of approaching the problem. (An advantage of starting with a previous problem is that it is easier to learn the mechanics of working with the provided programming interface.)
Directly building on the code from last year is acceptable, but keep the following points in mind:
Here's the 2006 description:
Parallel Football is a team game played by four teams on a common 32x32 grid. Each team has players, each of whom occupies a cell on the grid. Cells can have multiple players on them.
Each team has a home cell that is a corner of the grid. Every cell except the four home cells starts with a football occupying the cell. Thus, there are 1020 footballs in total. The aim of each team is to kick as many of these balls to the team's home cell as possible.
Before the game starts, each team selects starting positions for each of the team's players. The starting positions may be anywhere on the grid.
On a single turn, a player may move one cell in any direction, including diagonally, or stay put. Alternatively, if the cell contains a football, the player may choose to remain in the cell and kick a football. Players have a range of cells for their kicks, where is an integer between 1 and 46 (why 46?). A player can kick the ball to any cell within a Euclidean radius of of the player's cell, measuring from the center of the source and target cells. The ball lands in the target cell and stays there (the players are very accurate, and the balls hardly roll). Cells can accumulate an arbitrary number of balls, but a player can only kick one ball at a time.
If a ball lands at a team's home cell, the ball is immediately removed from the game and the team scores a point. While nearby balls can be kicked to the home cell with one kick, many (the precise number depends on ) will need multiple kicks. Other teams are also competing for the same balls, and it is possible that some balls will be shuffled backwards and forwards several times by opposing teams.
If there are multiple players on a cell trying to kick a football, they can all succeed if there are enough footballs for all of them. If a cell contains fewer footballs than players attempting to kick, then the simulator will assign the remaining footballs to players at random. A player who misses out on a football in this situation simply stays put.
Your job is to write a program to coordinate the actions of your players. You will have access to complete information about the state of the game (where all the players and footballs are, and the current score), and are expected to generate a set of instructions for your players. All teams' orders are revealed and processed simultaneously.
The game ends when there are no footballs remaining on the field. We will also include a time-out so that if the game seems to be going on forever (e.g., a football gets stuck in an infinite loop being kicked backwards and forwards between two players) it is stopped after a large number of moves.
For the tournament, the scores of the teams will be accumulated over many games played against a variety of opponents. Teams will be ranked by average score. We'll run a sub-tournament for several combinations of and to be chosen in class discussions.
Some things to think about: