The repository contains a part of the third assignment of the Concurrent and Distributed Programming course (Master's Degree in CSE @ Unibo). Agar.io is a popular multiplayer online game where players control a circular cell in a 2D environment (see Wikipedia), where the primary goal is to grow larger by consuming two types of entities:
- Food Pellets: Small, static, randomly scattered pellets that increase a player's mass when consumed.
- Other Player Cells: Players can consume other, smaller player cells.
- The game is always active: players can join at any time and immediately start playing.
- Players can be located on different nodes (from akka's cluster perspective) and must be able to join or leave dynamically (distributed player management). Each player should have their own
LocalView
. - When a player consumes food, that food must be removed for all players in the system (distributed food management).
- Every player must have a consistent view of the world, including the positions of all players and food (consistent world view):
- No player should see another player or food that is not visible to others.
- No two players should see the same food in different positions.
- Food is generated randomly and distributed across nodes, and new food must be visible to all players (distributed food generation).
- The game ends when a player reaches a specific mass (e.g., 1000 units), and this end condition must be checked and enforced in a distributed way for all players (distributed game end condition).
Within the documentation directory, you will find a concise report (in Italian) detailing all the design and implementation decisions made during the development process. In particular:
- A brief analysis of the problem, focussing on the concurrent aspects.
- A description of the adopted design, strategy and architecture.