diff --git a/.gitignore b/.gitignore index 1d71803..a85e4f7 100644 --- a/.gitignore +++ b/.gitignore @@ -146,3 +146,6 @@ tags # Ignore all local history of files .history .ionide + +### Java +*.class diff --git a/LancerDorfJavaTik.ps1 b/LancerDorfJavaTik.ps1 new file mode 100644 index 0000000..9c23f93 --- /dev/null +++ b/LancerDorfJavaTik.ps1 @@ -0,0 +1,12 @@ +# 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 + +# Exécuter la classe principale +java -classpath $binPath com.charpentierbalocchi.dorfjavatik.main.DorfJavaTik + +# Afficher un message de fin +Write-Host "Application lancée." diff --git a/README.md b/README.md index ab1a553..ad3879c 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,12 @@ # SAE_DEV_JAVA ## dorfjavatik + +Projet Saé de DEV première année deuxième semestre. +Binome : Balocchi Loris +Charpentier Juliette + + | | + [°v°] + /[ ]\ + | | diff --git a/ScriptCompilation.ps1 b/ScriptCompilation.ps1 new file mode 100644 index 0000000..641b13a --- /dev/null +++ b/ScriptCompilation.ps1 @@ -0,0 +1,19 @@ +# 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 + +# 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 +cd $projectPath + +# Compiler tous les fichiers Java en spécifiant le dossier de sortie pour les fichiers .class +javac -d $outputDir (Get-ChildItem -Path $projectPath -Recurse -Filter *.java).FullName + +# Afficher un message de fin +Write-Host "Compilation terminée avec succès. Les fichiers .class sont dans le dossier '$outputDir'." diff --git a/src/com/charpentierbalocchi/dorfjavatik/controller/ControleurJeu.java b/src/com/charpentierbalocchi/dorfjavatik/controller/ControleurJeu.java new file mode 100644 index 0000000..62be37e --- /dev/null +++ b/src/com/charpentierbalocchi/dorfjavatik/controller/ControleurJeu.java @@ -0,0 +1,61 @@ +package com.charpentierbalocchi.dorfjavatik.controller; + +import com.charpentierbalocchi.dorfjavatik.model.Plateau; +import com.charpentierbalocchi.dorfjavatik.model.Tuile; +import com.charpentierbalocchi.dorfjavatik.util.GenerateurTuile; +import com.charpentierbalocchi.dorfjavatik.view.FenetreJeu; + +public class ControleurJeu { + private FenetreJeu fenetreJeu; + private Plateau plateau; + private GenerateurTuile generateurTuile; + + public ControleurJeu(FenetreJeu fenetreJeu) { + this.fenetreJeu = fenetreJeu; + this.plateau = new Plateau(); // Assurez-vous que Plateau a une implémentation appropriée. + this.generateurTuile = new GenerateurTuile(); // Génère des tuiles avec des biomes aléatoires. + initGame(); + } + + private void initGame() { + // Initialiser le jeu, par exemple, placer la première tuile aléatoire ou + // configurer le plateau. + placeRandomTile(); + } + + // Gérer le placement d'une tuile sur le plateau + private void placeRandomTile() { + Tuile tuile = generateurTuile.genererTuileAleatoire(); + // Logique pour placer la tuile sur le plateau et mettre à jour l'interface + // utilisateur. + // Ici vous pouvez implémenter la logique pour choisir la position ou pour + // réagir à un choix de l'utilisateur. + } + + public void handleTilePlacement(int x, int y) { + Tuile tuile = generateurTuile.genererTuileAleatoire(); + if (plateau.placeTile(tuile, x, y)) { // Vérifie si la tuile peut être placée à la position x, y + fenetreJeu.updateBoard(x, y, tuile); // Mettre à jour la vue avec la nouvelle tuile placée + updateScore(); // Mettre à jour le score après le placement + } else { + System.out.println("Placement invalide"); + } + } + + private void updateScore() { + // Calculez le nouveau score et mettez-le à jour dans FenetreJeu + int newScore = calculateScore(); + fenetreJeu.setScore(newScore); + } + + private int calculateScore() { + // Implémentez la logique de calcul du score basé sur les règles du jeu. + return 0; // Retourne le score calculé + } + + // Méthode pour démarrer le jeu (peut être appelée depuis une interface + // utilisateur) + public void startGame() { + initGame(); + } +} diff --git a/src/com/charpentierbalocchi/dorfjavatik/main/DorfJavaTik.java b/src/com/charpentierbalocchi/dorfjavatik/main/DorfJavaTik.java new file mode 100644 index 0000000..bf22275 --- /dev/null +++ b/src/com/charpentierbalocchi/dorfjavatik/main/DorfJavaTik.java @@ -0,0 +1,19 @@ +package com.charpentierbalocchi.dorfjavatik.main; + +import com.charpentierbalocchi.dorfjavatik.controller.ControleurJeu; +import com.charpentierbalocchi.dorfjavatik.view.FenetreJeu; + +public class DorfJavaTik { + public static void main(String[] args) { + // Créez l'instance de la fenêtre de jeu + FenetreJeu fenetreJeu = new FenetreJeu(); + + // Créez l'instance du contrôleur de jeu et passez la fenêtre de jeu en + // paramètre + ControleurJeu controleurJeu = new ControleurJeu(fenetreJeu); + + // Configurez la fenêtre de jeu pour qu'elle soit visible + + fenetreJeu.setVisible(true); + } +} diff --git a/src/com/charpentierbalocchi/dorfjavatik/model/Case.java b/src/com/charpentierbalocchi/dorfjavatik/model/Case.java new file mode 100644 index 0000000..6dd8fc8 --- /dev/null +++ b/src/com/charpentierbalocchi/dorfjavatik/model/Case.java @@ -0,0 +1,17 @@ +package com.charpentierbalocchi.dorfjavatik.model; + +public class Case { + private Tuile tuile; + + public void setTuile(Tuile tuile) { + this.tuile = tuile; + } + + public Tuile getTuile() { + return tuile; + } + + public boolean estVide() { + return tuile == null; + } +} diff --git a/src/com/charpentierbalocchi/dorfjavatik/model/Plateau.java b/src/com/charpentierbalocchi/dorfjavatik/model/Plateau.java new file mode 100644 index 0000000..e90a667 --- /dev/null +++ b/src/com/charpentierbalocchi/dorfjavatik/model/Plateau.java @@ -0,0 +1,60 @@ +package com.charpentierbalocchi.dorfjavatik.model; + +public class Plateau { + private final int TAILLE = 5; // Taille standard du plateau + private Case[][] cases; // Grille de cases + + public Plateau() { + this.cases = new Case[TAILLE][TAILLE]; + for (int i = 0; i < TAILLE; i++) { + for (int j = 0; j < TAILLE; j++) { + this.cases[i][j] = new Case(); // Initialisation de chaque case du plateau + } + } + } + + // Méthode pour placer une tuile sur le plateau à la position (x, y) + public boolean placeTile(Tuile tuile, int x, int y) { + if (x < 0 || x >= TAILLE || y < 0 || y >= TAILLE) { + return false; // Vérifie que les coordonnées sont dans les limites du plateau + } + if (!cases[x][y].estVide()) { + return false; // Vérifie que la case est vide avant de placer la tuile + } + cases[x][y].setTuile(tuile); // Place la tuile sur le plateau + return true; + } + + // Méthode pour calculer le score après placement d'une tuile + public int calculerScore(int x, int y, Tuile tuile) { + int score = 0; + // Vérifier les tuiles adjacentes pour les correspondances de biomes + if (x > 0 && cases[x - 1][y].getTuile() != null && cases[x - 1][y].getTuile().getSud() == tuile.getNord()) { + score++; + } + if (x < TAILLE - 1 && cases[x + 1][y].getTuile() != null + && cases[x + 1][y].getTuile().getNord() == tuile.getSud()) { + score++; + } + if (y > 0 && cases[x][y - 1].getTuile() != null && cases[x][y - 1].getTuile().getEst() == tuile.getOuest()) { + score++; + } + if (y < TAILLE - 1 && cases[x][y + 1].getTuile() != null + && cases[x][y + 1].getTuile().getOuest() == tuile.getEst()) { + score++; + } + return score; + } + + // Vérifie si le plateau est complètement rempli + public boolean estComplet() { + for (int i = 0; i < TAILLE; i++) { + for (int j = 0; j < TAILLE; j++) { + if (cases[i][j].estVide()) { + return false; + } + } + } + return true; + } +} diff --git a/src/com/charpentierbalocchi/dorfjavatik/model/Tuile.java b/src/com/charpentierbalocchi/dorfjavatik/model/Tuile.java new file mode 100644 index 0000000..d778731 --- /dev/null +++ b/src/com/charpentierbalocchi/dorfjavatik/model/Tuile.java @@ -0,0 +1,56 @@ +package com.charpentierbalocchi.dorfjavatik.model; + +public class Tuile { + // Enum pour les biomes + public enum Biome { + RIVIERE("Bleu"), FORET("Vert"), CHAMP("Jaune"), VILLAGE("Rouge"), MONTAGNE("Gris"); + + private final String couleur; + + Biome(String couleur) { + this.couleur = couleur; + } + + @Override + public String toString() { + return this.couleur; + } + } + + // Zones de la tuile avec un biome pour chaque + private Biome nord; + private Biome sud; + private Biome est; + private Biome ouest; + + // Constructeur de Tuile avec les biomes pour chaque zone + public Tuile(Biome nord, Biome sud, Biome est, Biome ouest) { + this.nord = nord; + this.sud = sud; + this.est = est; + this.ouest = ouest; + } + + // Getters pour chaque zone + public Biome getNord() { + return nord; + } + + public Biome getSud() { + return sud; + } + + public Biome getEst() { + return est; + } + + public Biome getOuest() { + return ouest; + } + + // Représentation de la Tuile sous forme de chaîne de caractères + @Override + public String toString() { + return String.format("[N: %s, S: %s, E: %s, O: %s]", nord, sud, est, ouest); + } +} diff --git a/src/com/charpentierbalocchi/dorfjavatik/util/GenerateurTuile.java b/src/com/charpentierbalocchi/dorfjavatik/util/GenerateurTuile.java new file mode 100644 index 0000000..a309de5 --- /dev/null +++ b/src/com/charpentierbalocchi/dorfjavatik/util/GenerateurTuile.java @@ -0,0 +1,19 @@ +package com.charpentierbalocchi.dorfjavatik.util; + +import java.util.Random; + +import com.charpentierbalocchi.dorfjavatik.model.Tuile; +import com.charpentierbalocchi.dorfjavatik.model.Tuile.Biome; + +public class GenerateurTuile { + private Random random = new Random(); // Générateur de nombres aléatoires + + // Méthode pour générer une tuile aléatoire + public Tuile genererTuileAleatoire() { + Biome nord = Biome.values()[random.nextInt(Biome.values().length)]; + Biome sud = Biome.values()[random.nextInt(Biome.values().length)]; + Biome est = Biome.values()[random.nextInt(Biome.values().length)]; + Biome ouest = Biome.values()[random.nextInt(Biome.values().length)]; + return new Tuile(nord, sud, est, ouest); + } +} diff --git a/src/com/charpentierbalocchi/dorfjavatik/view/AffichageTuile.java b/src/com/charpentierbalocchi/dorfjavatik/view/AffichageTuile.java new file mode 100644 index 0000000..0702142 --- /dev/null +++ b/src/com/charpentierbalocchi/dorfjavatik/view/AffichageTuile.java @@ -0,0 +1,60 @@ +package com.charpentierbalocchi.dorfjavatik.view; + +import javax.swing.JPanel; + +import com.charpentierbalocchi.dorfjavatik.model.Tuile; + +import java.awt.Graphics; +import java.awt.Color; +import java.awt.Dimension; + +public class AffichageTuile extends JPanel { + private Tuile tuile; + + public AffichageTuile(Tuile tuile) { + this.tuile = tuile; + setPreferredSize(new Dimension(100, 100)); // Taille préférée du panel pour afficher la tuile + } + + @Override + protected void paintComponent(Graphics g) { + super.paintComponent(g); + if (tuile == null) { + return; + } + + // Divise le panel en quatre quadrants pour les biomes Nord, Sud, Est, Ouest + int width = getWidth(); + int height = getHeight(); + drawBiome(g, tuile.getNord(), 0, 0, width / 2, height / 2); + drawBiome(g, tuile.getSud(), 0, height / 2, width / 2, height / 2); + drawBiome(g, tuile.getEst(), width / 2, 0, width / 2, height / 2); + drawBiome(g, tuile.getOuest(), width / 2, height / 2, width / 2, height / 2); + } + + // Dessine chaque biome dans le quadrant spécifié + private void drawBiome(Graphics g, Tuile.Biome biome, int x, int y, int width, int height) { + switch (biome) { + case RIVIERE: + g.setColor(Color.BLUE); + break; + case FORET: + g.setColor(Color.GREEN); + break; + case CHAMP: + g.setColor(Color.YELLOW); + break; + case VILLAGE: + g.setColor(Color.RED); + break; + case MONTAGNE: + g.setColor(Color.GRAY); + break; + default: + g.setColor(Color.BLACK); + } + g.fillRect(x, y, width, height); + g.setColor(Color.BLACK); + g.drawRect(x, y, width, height); // Dessine un contour pour chaque zone + } +} diff --git a/src/com/charpentierbalocchi/dorfjavatik/view/FenetreJeu.java b/src/com/charpentierbalocchi/dorfjavatik/view/FenetreJeu.java new file mode 100644 index 0000000..0145dff --- /dev/null +++ b/src/com/charpentierbalocchi/dorfjavatik/view/FenetreJeu.java @@ -0,0 +1,59 @@ +package com.charpentierbalocchi.dorfjavatik.view; + +import javax.swing.*; + +import com.charpentierbalocchi.dorfjavatik.model.Tuile; + +import java.awt.*; + +public class FenetreJeu extends JFrame { + private static final int TAILLE_PLATEAU = 5; // Taille du plateau 5x5 + private JButton[][] boutons; // Boutons représentant les cases du plateau + private JLabel labelScore; // Label pour afficher le score + + public FenetreJeu() { + super("DorfJavaTik"); // Titre de la fenêtre + initUI(); + setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Ferme l'application à la fermeture de la fenêtre + setLocationRelativeTo(null); // Centre la fenêtre sur l'écran + pack(); // Ajuste la taille de la fenêtre en fonction des composants + } + + private void initUI() { + // Panel principal + JPanel panelPrincipal = new JPanel(new BorderLayout()); + + // Panel pour le plateau de jeu + JPanel plateau = new JPanel(new GridLayout(TAILLE_PLATEAU, TAILLE_PLATEAU)); + plateau.setSize(1000, 1000); + plateau.setLocation(0, 0); + boutons = new JButton[TAILLE_PLATEAU][TAILLE_PLATEAU]; + for (int i = 0; i < TAILLE_PLATEAU; i++) { + for (int j = 0; j < TAILLE_PLATEAU; j++) { + JButton bouton = new JButton(); + boutons[i][j] = bouton; + plateau.add(bouton); + } + } + + // Label pour le score + labelScore = new JLabel("Score: 0"); + panelPrincipal.add(labelScore, BorderLayout.NORTH); + panelPrincipal.add(plateau, BorderLayout.CENTER); + + add(panelPrincipal); + } + + // Méthode pour mettre à jour le plateau après placement d'une tuile + public void updateBoard(int x, int y, Tuile tuile) { + JButton bouton = boutons[x][y]; + bouton.setText(tuile.toString()); // Utilisez toString ou une autre méthode pour représenter visuellement la + // tuile + bouton.setEnabled(false); // Désactive le bouton pour éviter le placement d'une autre tuile à cette + // position + } + + public void setScore(int score) { + labelScore.setText("Score: " + score); + } +} diff --git a/src/main/java/com/charpentierbalocchi/dorfjavatik/test.txt b/src/main/java/com/charpentierbalocchi/dorfjavatik/test.txt deleted file mode 100644 index e69de29..0000000 diff --git a/src/main/resources/test.txt b/src/main/resources/test.txt deleted file mode 100644 index e69de29..0000000