Compare commits

..

No commits in common. "main" and "v1" have entirely different histories.
main ... v1

12 changed files with 184 additions and 152 deletions

3
.gitignore vendored
View File

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

3
.vscode/settings.json vendored Normal file
View File

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

View File

@ -1,6 +1,6 @@
MIT License
Copyright (c) 2024 Juliette CHARPENTIER, Loris BALOCCHI, Luc DARTOIS
Copyright (c) 2024 balocchi
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:

15
LancerDorfJavaTik.ps1 Normal file
View File

@ -0,0 +1,15 @@
# 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é."

1
MANIFEST.MF Normal file
View File

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

View File

@ -1,93 +1,12 @@
# DorfJavaTik
# SAE_DEV_JAVA
## dorfjavatik
Projet Saé de DEV première année deuxième semestre.
Binome : Balocchi Loris
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.
## 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`.
| |
[°v°]
/[ ]\
| |

29
ScriptCompilation.ps1 Normal file
View File

@ -0,0 +1,29 @@
# 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 ..

37
ScriptCompilationJar.ps1 Normal file
View File

@ -0,0 +1,37 @@
# 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,46 +1,47 @@
# Variables
JAVAC = javac
JAR = jar
SRC_DIR = src
BIN_DIR = bin
RES_DIR = $(SRC_DIR)/com/charpentierbalocchi/dorfjavatik/resources
RES_BIN_DIR = $(BIN_DIR)/com/charpentierbalocchi/dorfjavatik/resources
JAVAC = javac
JAVA = java
JAVADOC = javadoc
MAIN = com.charpentierbalocchi.dorfjavatik.view.FenetreDemarrage
MANIFEST = MANIFEST.MF
MAIN_CLASS = com.charpentierbalocchi.dorfjavatik.view.FenetreDemarrage
JAR_FILE = DorfJavaTik.jar
RESOURCES_DIR = src/com/charpentierbalocchi/dorfjavatik/resources
RESOURCES_BIN_DIR = bin/com/charpentierbalocchi/dorfjavatik/resources
# Compilation flags
JFLAGS = -d $(BIN_DIR) -encoding UTF-8 -sourcepath $(SRC_DIR)
# Règles
.PHONY: all clean jar run
# Default rule
all: clean compile copy-resources
all: classes
# Rule to compile the java files
compile:
@echo "Compilation des fichiers source java..."
# Compilation des fichiers .class
classes:
@echo "Compilation des fichiers .java en .class..."
@mkdir -p $(BIN_DIR)
@$(JAVAC) $(JFLAGS) $(SRC_DIR)/com/charpentierbalocchi/dorfjavatik/controller/*.java
@$(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
$(JAVAC) -d $(BIN_DIR) -encoding UTF-8 $(shell find $(SRC_DIR) -name "*.java")
@echo "Compilation terminée."
# Rule to copy resources
copy-resources:
@echo "Copying resources..."
@cp -r $(RES_DIR) $(RES_BIN_DIR)
# Création du fichier JAR
jar: classes
@echo "Copie des ressources..."
@mkdir -p $(RESOURCES_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)"
# 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
# Nettoyage des fichiers compilés et du JAR
clean:
@echo "Nettoyage en cours..."
@rm -rf $(BIN_DIR)
@echo "Nettoyage des fichiers compilés..."
@rm -rf $(BIN_DIR)/*
@rm -f $(JAR_FILE)
@echo "Nettoyage terminé."
.PHONY: all compile run javadoc clean copy-resources
# Exécution du fichier JAR
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

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

View File

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