This project simulates the movement of one or more rovers exploring the surface of Mars.
Each rover is defined by:
- an initial position (
x,y, and orientation), - and a list of commands (
LEFT,RIGHT,MOVE).
The simulator:
- Reads a YAML configuration file (
config.yml) - Executes the rover commands on the grid
- Produces an output YAML file (
output.yml) containing:- the final positions and orientations,
- destroyed rovers,
- and the percentage of explored surface.
- Supports multiple rovers operating simultaneously.
- Two grid types:
- Rectangular: finite grid with boundaries.
- Toroidal: wraps around like a donut.
- Obstacles: rovers are destroyed upon collision.
- Exploration radius:
0: default — only visited cells.1: includes adjacent cells.2+: explores all cells within a Manhattan distance.
- Simulation observer for real-time tracking (used for GUI creation).
- Final output includes:
- percentage of explored surface,
- final state of each rover,
- full list of explored coordinates.
- Java 17 or later
- Gradle installed
- A valid
config.ymlfile placed in the project root
1. Build the project:
gradle build2. Run the simulator:
gradle runThe program automatically reads config.yml and generates output.yml in the same directory.
#💡 Summary This project demonstrates:
- modular Java architecture,
- clean input/output data management using YAML,
- and extensible design suitable for visualization or GUI simulation. | 🪐 A complete Mars exploration simulator built with clarity, modularity, and robustness in mind.
- Abdelhakim NAHILI
- Walid KESBI