Compare commits

..

8 Commits
v1 ... main

12 changed files with 152 additions and 184 deletions

3
.gitignore vendored
View File

@ -151,3 +151,6 @@ tags
*.class *.class
.jar .jar
bin/ bin/
.vscode/
.ps1

View File

@ -1,3 +0,0 @@
{
"makefile.makefilePath": "C:\\Users\\Loris\\OneDrive - UPEC\\Documents\\DEV\\SAE_DEV_JAVA\\makefile"
}

View File

@ -1,6 +1,6 @@
MIT License MIT License
Copyright (c) 2024 balocchi Copyright (c) 2024 Juliette CHARPENTIER, Loris BALOCCHI, Luc DARTOIS
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

View File

@ -1,15 +0,0 @@
# Définir le chemin de base du projet
$projectPath = "C:\Users\Loris\OneDrive - UPEC\Documents\DEV\SAE_DEV_JAVA"
$binPath = "$projectPath\bin"
# Naviguer au répertoire racine du projet
cd $projectPath
# Afficher un message de lancement
Write-Host "Jeu lancé."
# Exécuter la classe principale
java -classpath $binPath com.charpentierbalocchi.dorfjavatik.main.DorfJavaTik
# Afficher un message de fin
Write-Host "Jeu fermé."

View File

@ -1 +0,0 @@
Main-Class: com.charpentierbalocchi.dorfjavatik.view.FenetreDemarrage

View File

@ -1,12 +1,93 @@
# SAE_DEV_JAVA # DorfJavaTik
## dorfjavatik
Projet Saé de DEV première année deuxième semestre. Projet Saé de DEV première année deuxième semestre.
Binome : Balocchi Loris Binome : Balocchi Loris
Charpentier Juliette Charpentier Juliette
| | DorfJavaTik est un jeu développé en Java utilisant Swing pour l'interface graphique. Ce README fournit des instructions détaillées pour compiler et exécuter le projet en utilisant le `Makefile` sous Linux.
[°v°]
/[ ]\ ## Prérequis
| |
Avant de commencer, assurez-vous que les outils suivants sont installés sur votre système:
- Java Development Kit (JDK)
- `make`
Vous pouvez vérifier si Java et `make` sont installés en exécutant les commandes suivantes dans votre terminal :
```bash
java -version
javac -version
make -v
```
## Structure du projet
Le projet est organisé comme suit :
```
/src
/com
/charpentierbalocchi
/dorfjavatik
/controller
/model
/util
/view
/resources
- background.wav
- image.gif
/bin
```
## Utilisation du Makefile
Le `Makefile` inclus dans le projet offre plusieurs commandes pour faciliter la compilation, l'exécution et la gestion des fichiers de projet.
### Compilation du projet
Pour compiler le projet, naviguez dans le répertoire racine du projet et exécutez la commande suivante :
```bash
make
```
Cette commande effectue les actions suivantes :
- Nettoie le répertoire de build précédent (`bin`).
- Compile les sources Java.
- Copie les ressources nécessaires dans le répertoire de build.
### Exécution du projet
Pour exécuter le projet après la compilation, utilisez la commande :
```bash
make run
```
Cette commande lance le jeu en utilisant les fichiers compilés dans le répertoire `bin`, sans passer par un fichier `.jar`.
### Génération de la documentation
Pour générer la documentation du projet (Javadoc), exécutez la commande :
```bash
make javadoc
```
La documentation sera placée dans `bin/docs`.
### Nettoyage du projet
Pour supprimer tous les fichiers générés lors de la compilation, y compris les fichiers `.class` et la documentation, exécutez :
```bash
make clean
```
Cette commande nettoiera le répertoire `bin` en supprimant tous les fichiers et dossiers qu'il contient.
## Conclusion
Suivez ces instructions pour compiler et exécuter le projet DorfJavaTik en utilisant `make`.

View File

@ -1,29 +0,0 @@
# Script de Compilation pour PowerShell
# Définir le chemin de base du projet
$projectPath = "C:\Users\Loris\OneDrive - UPEC\Documents\DEV\SAE_DEV_JAVA\src"
$outputDir = "C:\Users\Loris\OneDrive - UPEC\Documents\DEV\SAE_DEV_JAVA\bin" # Dossier pour les fichiers .class
$resourcesPath = "C:\Users\Loris\OneDrive - UPEC\Documents\DEV\SAE_DEV_JAVA\src\com\charpentierbalocchi\dorfjavatik\resources\"
$resourcesOutputDir = "C:\Users\Loris\OneDrive - UPEC\Documents\DEV\SAE_DEV_JAVA\bin\com\charpentierbalocchi\dorfjavatik\resources\" # Dossier pour les ressources
# Créer le dossier de sortie s'il n'existe pas
if (-not (Test-Path $outputDir)) {
New-Item -Path $outputDir -ItemType Directory
}
# Naviguer au répertoire racine du projet
Set-Location $projectPath
# Compiler tous les fichiers Java en spécifiant le dossier de sortie pour les fichiers .class et en utilisant UTF-8 pour l'encodage
# javac -d $outputDir -encoding UTF-8 (Get-ChildItem -Path $projectPath -Recurse -Filter *.java).FullName
# Copier les ressources dans le répertoire de sortie
if (-not (Test-Path $resourcesOutputDir)) {
New-Item -Path $resourcesOutputDir -ItemType Directory
}
Copy-Item -Path $resourcesPath* -Destination $resourcesOutputDir -Recurse -Force
# Afficher un message de fin
Write-Host "Compilation terminée avec succès. Les fichiers .class et les ressources sont dans le dossier '$outputDir'."
cd ..

View File

@ -1,37 +0,0 @@
# Script de Compilation pour PowerShell
# Définir le chemin de base du projet
$projectPath = "C:\Users\Loris\OneDrive - UPEC\Documents\DEV\SAE_DEV_JAVA\src"
$outputDir = "C:\Users\Loris\OneDrive - UPEC\Documents\DEV\SAE_DEV_JAVA\bin" # Dossier pour les fichiers .class
$resourcesPath = "C:\Users\Loris\OneDrive - UPEC\Documents\DEV\SAE_DEV_JAVA\src\com\charpentierbalocchi\dorfjavatik\resources\"
$resourcesOutputDir = "C:\Users\Loris\OneDrive - UPEC\Documents\DEV\SAE_DEV_JAVA\bin\com\charpentierbalocchi\dorfjavatik\resources\" # Dossier pour les ressources
$manifestPath = "C:\Users\Loris\OneDrive - UPEC\Documents\DEV\SAE_DEV_JAVA\MANIFEST.MF"
$jarFile = "C:\Users\Loris\OneDrive - UPEC\Documents\DEV\SAE_DEV_JAVA\DorfJavaTik.jar"
$jdkBinPath = "C:\Program Files\Java\jdk-17\bin" # Remplacer par le chemin correct vers le dossier bin du JDK
# Créer le dossier de sortie s'il n'existe pas
if (-not (Test-Path $outputDir)) {
New-Item -Path $outputDir -ItemType Directory
}
# Naviguer au répertoire racine du projet
Set-Location $projectPath
# Compiler tous les fichiers Java en spécifiant le dossier de sortie pour les fichiers .class et en utilisant UTF-8 pour l'encodage
javac -d $outputDir -encoding UTF-8 (Get-ChildItem -Path $projectPath -Recurse -Filter *.java).FullName
# Copier les ressources dans le répertoire de sortie
if (-not (Test-Path $resourcesOutputDir)) {
New-Item -Path $resourcesOutputDir -ItemType Directory
}
Copy-Item -Path $resourcesPath* -Destination $resourcesOutputDir -Recurse -Force
# Créer le fichier JAR exécutable
Set-Location $outputDir
& "$jdkBinPath\jar.exe" cfm $jarFile $manifestPath -C $outputDir .
# Afficher un message de fin
Write-Host "Compilation terminée avec succès. Les fichiers .class et les ressources sont dans le dossier '$outputDir'."
Write-Host "Le fichier JAR exécutable a été créé : '$jarFile'."
cd ..

View File

@ -1,47 +1,46 @@
# Variables # Variables
JAVAC = javac
JAR = jar
SRC_DIR = src SRC_DIR = src
BIN_DIR = bin BIN_DIR = bin
MANIFEST = MANIFEST.MF RES_DIR = $(SRC_DIR)/com/charpentierbalocchi/dorfjavatik/resources
MAIN_CLASS = com.charpentierbalocchi.dorfjavatik.view.FenetreDemarrage RES_BIN_DIR = $(BIN_DIR)/com/charpentierbalocchi/dorfjavatik/resources
JAR_FILE = DorfJavaTik.jar JAVAC = javac
RESOURCES_DIR = src/com/charpentierbalocchi/dorfjavatik/resources JAVA = java
RESOURCES_BIN_DIR = bin/com/charpentierbalocchi/dorfjavatik/resources JAVADOC = javadoc
MAIN = com.charpentierbalocchi.dorfjavatik.view.FenetreDemarrage
# Règles # Compilation flags
.PHONY: all clean jar run JFLAGS = -d $(BIN_DIR) -encoding UTF-8 -sourcepath $(SRC_DIR)
all: classes # Default rule
all: clean compile copy-resources
# Compilation des fichiers .class # Rule to compile the java files
classes: compile:
@echo "Compilation des fichiers .java en .class..." @echo "Compilation des fichiers source java..."
@mkdir -p $(BIN_DIR) @mkdir -p $(BIN_DIR)
$(JAVAC) -d $(BIN_DIR) -encoding UTF-8 $(shell find $(SRC_DIR) -name "*.java") @$(JAVAC) $(JFLAGS) $(SRC_DIR)/com/charpentierbalocchi/dorfjavatik/controller/*.java
@echo "Compilation terminée." @$(JAVAC) $(JFLAGS) $(SRC_DIR)/com/charpentierbalocchi/dorfjavatik/model/*.java
@$(JAVAC) $(JFLAGS) $(SRC_DIR)/com/charpentierbalocchi/dorfjavatik/util/*.java
@$(JAVAC) $(JFLAGS) $(SRC_DIR)/com/charpentierbalocchi/dorfjavatik/view/*.java
# Création du fichier JAR # Rule to copy resources
jar: classes copy-resources:
@echo "Copie des ressources..." @echo "Copying resources..."
@mkdir -p $(RESOURCES_BIN_DIR) @cp -r $(RES_DIR) $(RES_BIN_DIR)
@cp -r $(RESOURCES_DIR)/* $(RESOURCES_BIN_DIR)
@echo "Création du fichier JAR..."
$(JAR) cfm $(JAR_FILE) $(MANIFEST) -C $(BIN_DIR) .
@echo "Fichier JAR créé : $(JAR_FILE)"
# Nettoyage des fichiers compilés et du JAR # Rule to run the application
run: compile copy-resources
@echo "Lancement du jeu..."
@$(JAVA) -cp $(BIN_DIR) $(MAIN)
# Rule to generate Javadoc
javadoc:
@echo "Generating Javadoc..."
@$(JAVADOC) -d $(BIN_DIR)/docs -sourcepath $(SRC_DIR) -subpackages com.charpentierbalocchi.dorfjavatik
# Rule to clean the project
clean: clean:
@echo "Nettoyage des fichiers compilés..." @echo "Nettoyage en cours..."
@rm -rf $(BIN_DIR)/* @rm -rf $(BIN_DIR)
@rm -f $(JAR_FILE)
@echo "Nettoyage terminé."
# Exécution du fichier JAR .PHONY: all compile run javadoc clean copy-resources
run: jar
@echo "Exécution du fichier JAR..."
@java -jar $(JAR_FILE)
# Crée le fichier MANIFEST.MF avec la classe principale
manifest:
@echo "Main-Class: $(MAIN_CLASS)" > $(MANIFEST)

View File

@ -1,13 +0,0 @@
package com.charpentierbalocchi.dorfjavatik.main;
import com.charpentierbalocchi.dorfjavatik.view.FenetreDemarrage;
public class DorfJavaTik {
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
new FenetreDemarrage();
}
});
}
}

View File

@ -13,6 +13,7 @@ public class FenetreDemarrage extends JFrame {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400, 200); setSize(400, 200);
setLocationRelativeTo(null); // Centre la fenêtre sur l'écran setLocationRelativeTo(null); // Centre la fenêtre sur l'écran
setResizable(false); // Empêche le redimensionnement de la fenêtre
setVisible(true); setVisible(true);
} }
@ -21,18 +22,14 @@ public class FenetreDemarrage extends JFrame {
JPanel panelPrincipal = new JPanel(new BorderLayout()); JPanel panelPrincipal = new JPanel(new BorderLayout());
JLabel label = new JLabel("Entrez la taille de la grille (1-15):"); JLabel label = new JLabel("Entrez la taille de la grille (1-15):");
JTextField textField = new JTextField(); JTextField textField = new JTextField();
textField.setText("5"); // Définir la valeur par défaut à 5 textField.setText("5");
JButton button = new JButton("Démarrer la partie"); JButton button = new JButton("Démarrer la partie");
// Ajout des composants au panneau principal // Ajout des composants au panneau principal
panelPrincipal.add(label, BorderLayout.NORTH); panelPrincipal.add(label, BorderLayout.NORTH);
panelPrincipal.add(textField, BorderLayout.CENTER); panelPrincipal.add(textField, BorderLayout.CENTER);
panelPrincipal.add(button, BorderLayout.SOUTH); panelPrincipal.add(button, BorderLayout.SOUTH);
// Ajout du panneau principal à la fenêtre
add(panelPrincipal); add(panelPrincipal);
// Action listener pour le bouton
button.addActionListener(new ActionListener() { button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
try { try {

View File

@ -12,41 +12,37 @@ import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent; import java.awt.event.ComponentEvent;
public class FenetreJeu extends JFrame { public class FenetreJeu extends JFrame {
private int taillePlateau; // Taille du plateau private int taillePlateau;
private TileButton[][] boutons; // Boutons représentant les cases du plateau private TileButton[][] boutons;
private JLabel labelScore; // Label pour afficher le score private JLabel labelScore;
private JLabel labelBiome1; // Label pour afficher le biome 1 private JLabel labelBiome1;
private JLabel labelBiome2; // Label pour afficher le biome 2 private JLabel labelBiome2;
private JLabel labelBiome3; // Label pour afficher le biome 3 private JLabel labelBiome3;
private JLabel labelBiome4; // Label pour afficher le biome 4 private JLabel labelBiome4;
private JLabel labelBiome5; // Label pour afficher le biome 5 private JLabel labelBiome5;
private Tuile tuileCourante; // La tuile actuellement proposée private Tuile tuileCourante;
private ControleurJeu controleurJeu; // Instance du contrôleur de jeu private ControleurJeu controleurJeu;
private JPanel panelPlateau; // Panneau pour le plateau de jeu private JPanel panelPlateau;
private JPanel panelTuileCourante; // Panneau pour la tuile courante private JPanel panelTuileCourante;
private MusicPlayer musicPlayer; // Instance du lecteur de musique private MusicPlayer musicPlayer;
public FenetreJeu(int taillePlateau) { public FenetreJeu(int taillePlateau) {
super("DorfJavaTik, par Juliette et Loris"); // Titre de la fenêtre super("DorfJavaTik, par Juliette et Loris");
this.taillePlateau = taillePlateau; this.taillePlateau = taillePlateau;
initUI(); initUI();
this.controleurJeu = new ControleurJeu(this, taillePlateau); // Initialiser le contrôleur après la configuration this.controleurJeu = new ControleurJeu(this, taillePlateau);
// de l'interface controleurJeu.demarrerJeu();
controleurJeu.demarrerJeu(); // Démarrer le jeu après l'initialisation setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Ferme l'application à la fermeture de la fenêtre setSize(1300, 1000);
setSize(1300, 1000); // Fixe la taille de la fenêtre à 1300 x 1000 setResizable(false);
setLocationRelativeTo(null); // Centre la fenêtre sur l'écran setLocationRelativeTo(null);
setVisible(true); // Rendre la fenêtre visible setVisible(true);
// Démarrer la musique de fond
musicPlayer = new MusicPlayer("/com/charpentierbalocchi/dorfjavatik/resources/background.wav"); musicPlayer = new MusicPlayer("/com/charpentierbalocchi/dorfjavatik/resources/background.wav");
musicPlayer.play(); musicPlayer.play();
} }
private void initUI() { private void initUI() {
// Panel principal avec BorderLayout
JPanel panelPrincipal = new JPanel(new BorderLayout()); JPanel panelPrincipal = new JPanel(new BorderLayout());
// Panel pour le plateau de jeu sur la droite
panelPlateau = new JPanel(new GridLayout(taillePlateau, taillePlateau)); panelPlateau = new JPanel(new GridLayout(taillePlateau, taillePlateau));
boutons = new TileButton[taillePlateau][taillePlateau]; boutons = new TileButton[taillePlateau][taillePlateau];
for (int i = 0; i < taillePlateau; i++) { for (int i = 0; i < taillePlateau; i++) {
@ -63,9 +59,6 @@ public class FenetreJeu extends JFrame {
panelPlateau.add(bouton); panelPlateau.add(bouton);
} }
} }
// Panel pour afficher la tuile courante et le score sur la gauche, centré
// verticalement
JPanel panelGauche = new JPanel(); JPanel panelGauche = new JPanel();
panelGauche.setLayout(new BoxLayout(panelGauche, BoxLayout.Y_AXIS)); panelGauche.setLayout(new BoxLayout(panelGauche, BoxLayout.Y_AXIS));
panelGauche.setBorder(BorderFactory.createEmptyBorder(20, 60, 20, 60)); panelGauche.setBorder(BorderFactory.createEmptyBorder(20, 60, 20, 60));
@ -125,25 +118,20 @@ public class FenetreJeu extends JFrame {
panelGauche.add(Box.createVerticalGlue()); panelGauche.add(Box.createVerticalGlue());
panelGauche.add(labelScore); panelGauche.add(labelScore);
panelGauche.add(Box.createVerticalStrut(20)); // Espace entre les composants panelGauche.add(Box.createVerticalStrut(20));
panelGauche.add(panelTuileCourante); panelGauche.add(panelTuileCourante);
panelGauche.add(Box.createVerticalStrut(20)); panelGauche.add(Box.createVerticalStrut(20));
panelGauche.add(boutonRecommencer); panelGauche.add(boutonRecommencer);
panelGauche.add(boutonQuitter); panelGauche.add(boutonQuitter);
panelGauche.add(Box.createVerticalGlue()); panelGauche.add(Box.createVerticalGlue());
panelGauche.add(labelBiome1); panelGauche.add(labelBiome1);
panelGauche.add(labelBiome2); panelGauche.add(labelBiome2);
panelGauche.add(labelBiome3); panelGauche.add(labelBiome3);
panelGauche.add(labelBiome4); panelGauche.add(labelBiome4);
panelGauche.add(labelBiome5); panelGauche.add(labelBiome5);
panelPrincipal.add(panelGauche, BorderLayout.WEST); panelPrincipal.add(panelGauche, BorderLayout.WEST);
panelPrincipal.add(panelPlateau, BorderLayout.CENTER); panelPrincipal.add(panelPlateau, BorderLayout.CENTER);
add(panelPrincipal); add(panelPrincipal);
// Ajouter un écouteur pour garantir que le panneau du plateau reste un carré
addComponentListener(new ComponentAdapter() { addComponentListener(new ComponentAdapter() {
@Override @Override
public void componentResized(ComponentEvent e) { public void componentResized(ComponentEvent e) {
@ -155,7 +143,6 @@ public class FenetreJeu extends JFrame {
}); });
} }
// Méthode pour dessiner les biomes sur un bouton
private void dessinerTuile(Graphics g, Tuile tuile, int width, int height) { private void dessinerTuile(Graphics g, Tuile tuile, int width, int height) {
Graphics2D g2d = (Graphics2D) g.create(); Graphics2D g2d = (Graphics2D) g.create();
int halfWidth = width / 2; int halfWidth = width / 2;
@ -188,7 +175,6 @@ public class FenetreJeu extends JFrame {
g2d.dispose(); g2d.dispose();
} }
// Méthode pour mettre à jour le plateau après placement d'une tuile
public void updateBoard(int x, int y, Tuile tuile) { public void updateBoard(int x, int y, Tuile tuile) {
TileButton bouton = boutons[x][y]; TileButton bouton = boutons[x][y];
bouton.setTuile(tuile); // Mettre à jour la tuile sur le bouton bouton.setTuile(tuile); // Mettre à jour la tuile sur le bouton