# Dorfromantik 🏔️🌲

Bienvenue sur notre projet **"Dorfromantik"**, un jeu inspiré par l'univers de [Dorfromantik](https://store.steampowered.com/app/1455840/Dorfromantik/), où vous devrez assembler des tuiles pour créer des paysages harmonieux 🌈. Ce projet a été réalisé dans le cadre de la SAE 3.1 de notre formation à l'IUT de Sénart-Fontainebleau.

## Table des Matières ℹ

- [Introduction](#introduction)
- [Lancement du Programme](#lancement-du-programme)
  - [Compilation](#compilation)
  - [Exécution](#exécution)
  - [Nettoyage des Fichiers](#nettoyage-des-fichiers)
- [Architecture du Projet](#architecture-du-projet)
- [Rapport d'Avancement](#rapport-davancement)
- [Crédits](#crédits)

## Introduction 🌱

Dans ce jeu, les joueurs assemblent des tuiles hexagonales représentant différents types de terrains (🌊 mer, 🌾 pré, 🍂 forêt, 🏠 champ, et ⛰ montagne) afin de former un paysage harmonieux. Les tuiles peuvent avoir un ou deux types de terrains, et doivent être placées en suivant certaines contraintes.

L'objectif est de créer des poches de terrains connexes maximisant les points 🌟. Le jeu se termine après avoir placé 50 tuiles 🏙️.


## Lancement du Programme 🚀

Pour démarrer le projet, suivez les instructions ci-dessous :

### Compilation 🛠️

Pour compiler le projet, utilisez le Makefile présent à la racine du projet avec la commande suivante :
```bash
make
```
Cela générera tous les fichiers `.class` nécessaires dans le répertoire `build/`.

### Exécution 🌿

Pour lancer le jeu, utilisez la commande suivante :
```bash
make run
```

ou 

```bash
java -jar dorfromantik.jar
```
Cela exécutera le fichier `dorfromantik.jar` contenant tout le projet.


### Nettoyage des Fichiers 🛏️

Pour nettoyer les fichiers `.class` et la documentation, utilisez la commande :
```bash
make clean
```

## Architecture du Projet 🛁

Le projet est organisé de manière modulaire pour assurer une bonne maintenance et faciliter la lecture du code. Voici les principaux composants :

- **Main.java** : Point d'entrée du programme.
- **game/** : Contient la logique de gestion du plateau et des tuiles, notamment `Board.java` et `Tile.java`.
- **gui/** : Fournit les interfaces graphiques pour l'utilisateur, comme `MainMenu.java` et `GameControlsMenu.java`.
- **controller/** : Gère les actions et les événements des utilisateurs.
- **utils/** : Fonctions utilitaires pour charger des images, des polices, et se connecter à la base de données.
- **listeners/** : Gère les différents événements de l'application, tels que `GameMouseClickListener.java`.

## Rapport d'Avancement 📃

Un rapport d'avancement complet est disponible dans le dossier `XXXXXXXXXXXXXXXXXXXX/`. Ce fichier **PDF** inclut :

- Une description du sujet.
- Les fonctionnalités et captures d'écran de notre application.
- La structure du programme avec des diagrammes de classe.
- Une analyse des algorithmes employés.
- ...

## Crédits 🚀

Ce projet a été réalisé par :

- **Moncef STITI** (@stiti) 
- **Lenny FOULOU** (@foulou) 
- **Khalid CHENOUNA** (@chenouna) 
