diff --git a/.gitignore b/.gitignore index f68d109..76b4fa1 100644 --- a/.gitignore +++ b/.gitignore @@ -26,4 +26,7 @@ bin/ .vscode/ ### Mac OS ### -.DS_Store \ No newline at end of file +.DS_Store + +### Java ### +.class \ No newline at end of file diff --git a/src/Accueil.java b/src/Accueil.java new file mode 100644 index 0000000..66d1da8 --- /dev/null +++ b/src/Accueil.java @@ -0,0 +1,55 @@ +import javax.swing.*; +import java.awt.*; + +public class Accueil extends JPanel { + public static void main(String[] args) { + // Appel de la méthode fenetreAccueil pour créer la fenêtre d'accueil + fenetreAccueil(); + } + + public static void fenetreAccueil() { + + // Création de la fenêtre d'accueil + Fenetre fenetre = new Fenetre(); + + // Création de l'accueil + Accueil accueil = new Accueil(); + fenetre.setContentPane(accueil); + + // Création du texte + JLabel texte = new JLabel("Choisissez votre type de grille", SwingConstants.CENTER); + texte.setPreferredSize(new Dimension(800, 50)); + texte.setFont(new Font("Arial", Font.BOLD, 30)); + texte.setForeground(new Color(0, 200, 10)); + + // Création des boutons + Boutons boutons = new Boutons(fenetre); + + //Récupération des boutons créés dans la classe Boutons + JButton choisirGrille = boutons.getChoisirGrille(); + JButton importerGrille = boutons.getImporterGrille(); + + // Création du panel pour le texte + JPanel panelTexte = new JPanel(new FlowLayout(FlowLayout.CENTER, 0, 0)); + panelTexte.add(texte); + + // Création du panel pour les boutons + JPanel panelBoutons = new JPanel(new FlowLayout(FlowLayout.CENTER, 100, 200)); + panelBoutons.add(choisirGrille); + panelBoutons.add(importerGrille); + panelBoutons.setOpaque(false); + + // Ajout des composants au JPanel principal + accueil.setLayout(new BorderLayout()); + accueil.add(panelTexte, BorderLayout.NORTH); + accueil.add(panelBoutons, BorderLayout.CENTER); + + fenetre.setVisible(true); + } + + @Override + public void paintComponent(Graphics g) { + super.paintComponent(g); + g.drawImage(new ImageIcon("background.jpg").getImage(), 0, 0, getWidth(), getHeight(), null); + } +} diff --git a/src/Boutons.java b/src/Boutons.java new file mode 100644 index 0000000..01bb22f --- /dev/null +++ b/src/Boutons.java @@ -0,0 +1,89 @@ +import java.awt.*; +import javax.swing.*; +import java.io.File; + +public class Boutons extends JPanel { + + private JButton choisirGrille; + private JButton importerGrille; + private JFrame fenetrePrincipale; + + public Boutons(JFrame fenetrePrincipale) { + // Création des boutons + choisirGrille = new JButton("Générer une grille"); + choisirGrille.setPreferredSize(new Dimension(250, 50)); + choisirGrille.setFont(new Font("Arial", Font.BOLD, 20)); + choisirGrille.setBackground(Color.CYAN); + + importerGrille = new JButton("Importer une grille"); + importerGrille.setPreferredSize(new Dimension(250, 50)); + importerGrille.setFont(new Font("Arial", Font.BOLD, 20)); + importerGrille.setBackground(Color.GREEN); + + this.fenetrePrincipale = fenetrePrincipale; + + // Ajout des listeners aux boutons + gestion des erreurs + choisirGrille.addActionListener(e -> { + String strTaille = JOptionPane.showInputDialog(this, "Entrez la taille de la grille :", "Taille de la grille", JOptionPane.PLAIN_MESSAGE); + if (strTaille != null && !strTaille.isEmpty()) { + if (!Character.isDigit(strTaille.charAt(0))) { + JOptionPane.showMessageDialog(this, "Le premier caractère doit être un chiffre ou nombre.", "Erreur", JOptionPane.ERROR_MESSAGE); + return; + } + try { + int taille = Integer.parseInt(strTaille); + if (taille > 3 && taille < 21) { + // afficher la taille choisir dans la console + System.out.println("Les dimensions de la grille : " + taille + "x" + taille); + // Afficher la boîte de dialogue pour le choix du remplissage de la grille + String[] options = {"Remplir aléatoirement", "Partir d'une grille vide"}; + int choix = JOptionPane.showOptionDialog(this, "Choisissez comment remplir la grille :", "Remplissage de la grille", JOptionPane.DEFAULT_OPTION, JOptionPane.PLAIN_MESSAGE, null, options, options[0]); + switch (choix) { + case 0: + // afficher la grille aléatoirement + GridPanel grille = new GridPanel(); + addGrid(grille); + break; + case 1: + // TODO: partir d'une grille vide + break; + default: + // gérer le cas où aucun choix n'a été fait + JOptionPane.showMessageDialog(this, "Aucun choix n'a été fait.", "Attention", JOptionPane.WARNING_MESSAGE); + return; + } + + } else { + String errorMessage = "La taille doit être au moins de 4."; + if (taille >= 21) { + errorMessage = "La taille ne doit pas dépasser 20."; + } + JOptionPane.showMessageDialog(this, errorMessage, "Erreur", JOptionPane.ERROR_MESSAGE); + } + } catch (NumberFormatException ex) { + JOptionPane.showMessageDialog(this, "Tapez " + strTaille.charAt(0) + " pour une grille " + strTaille.charAt(0) +"x"+ strTaille.charAt(0) +".", "Erreur", JOptionPane.ERROR_MESSAGE); + + + } + } + }); + + importerGrille.addActionListener(e -> { + JFileChooser fileChooser = new JFileChooser(); + fileChooser.setDialogTitle("Choisissez un fichier de grille"); + int choix = fileChooser.showOpenDialog(this); + if (choix == JFileChooser.APPROVE_OPTION) { + File fichier = fileChooser.getSelectedFile(); + // TODO: charger la grille depuis le fichier + } + }); + } + + public JButton getChoisirGrille() { + return choisirGrille; + } + + public JButton getImporterGrille() { + return importerGrille; + } +} \ No newline at end of file diff --git a/src/Fenetre.java b/src/Fenetre.java new file mode 100644 index 0000000..920478a --- /dev/null +++ b/src/Fenetre.java @@ -0,0 +1,14 @@ +import javax.swing.JFrame; +import java.awt.Dimension; +import java.awt.Toolkit; + +public class Fenetre extends JFrame { + public Fenetre() { + super("Accueil"); + Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); + Dimension d = new Dimension(screenSize.width, screenSize.height); + this.setSize(d); + this.setLocationRelativeTo(null); + this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + } +} \ No newline at end of file diff --git a/src/GridPanel.java b/src/GridPanel.java new file mode 100644 index 0000000..2ef76da --- /dev/null +++ b/src/GridPanel.java @@ -0,0 +1,156 @@ +import javax.swing.*; +import java.awt.*; +import java.util.Random; +import java.awt.event.*; + +public class GridPanel extends JPanel { + private static final long serialVersionUID = 1L; + + private int gridSize = 10; + private int cellSize = 50; + private Color[][] gridColors; + private boolean editMode = false; + private boolean placeJoueurMode = false; + private boolean placeTMode = false; + private Point joueurPos = null; + private Point tPos = null; + private JButton placeJoueurButton; + private JButton placeTButton; + private JButton editButton; + + public GridPanel() { + setPreferredSize(new Dimension(gridSize * cellSize, gridSize * cellSize)); + setBackground(Color.WHITE); + + gridColors = new Color[gridSize][gridSize]; + Random rand = new Random(); + for (int i = 0; i < gridSize; i++) { + for (int j = 0; j < gridSize; j++) { + gridColors[i][j] = rand.nextBoolean() ? Color.BLACK : Color.WHITE; + } + } + + addMouseListener(new MouseAdapter() { + public void mouseClicked(MouseEvent e) { + int row = e.getY() / cellSize; + int col = e.getX() / cellSize; + if (editMode) { + gridColors[row][col] = gridColors[row][col] == Color.BLACK ? Color.WHITE : Color.BLACK; + repaint(); + } else if (placeJoueurMode) { + joueurPos = new Point(col, row); + repaint(); + } else if (placeTMode) { + tPos = new Point(col, row); + repaint(); + } + } + }); + + editButton = new JButton("Enlever/Ajouter Murs"); + editButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + editMode = !editMode; + if (editMode) { + editButton.setText("Mode Dessin"); + placeJoueurButton.setEnabled(false); + placeTButton.setEnabled(false); + } else { + editButton.setText("Enlever/Ajouter Murs"); + placeJoueurButton.setEnabled(true); + placeTButton.setEnabled(true); + } + } + }); + add(editButton); + + placeJoueurButton = new JButton("Placer Joueur"); + placeJoueurButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + placeJoueurMode = !placeJoueurMode; + if (placeJoueurMode) { + placeJoueurButton.setText("Mode Dessin"); + editButton.setEnabled(false); + placeTButton.setEnabled(false); + } else { + placeJoueurButton.setText("Placer Joueur"); + editButton.setEnabled(true); + placeTButton.setEnabled(true); + } + } + }); + add(placeJoueurButton); + + placeTButton = new JButton("Placer Lettre T"); + placeTButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + placeTMode = !placeTMode; + if (placeTMode) { + placeTButton.setText("Mode Dessin"); + editButton.setEnabled(false); + placeJoueurButton.setEnabled(false); + } else { + placeTButton.setText("Placer Lettre T"); + editButton.setEnabled(true); + placeJoueurButton.setEnabled(true); + } + } + }); + add(placeTButton); + } + +public void paintComponent(Graphics g) { + super.paintComponent(g); + + // Draw grid cells + for (int i = 0; i < gridSize; i++) { + for (int j = 0; j < gridSize; j++) { + g.setColor(gridColors[i][j]); + g.fillRect(j * cellSize, i * cellSize, cellSize, cellSize); + } + } + + // Draw horizontal lines + g.setColor(Color.BLACK); + for (int i = 1; i < gridSize; i++) { + int y = i * cellSize; + g.drawLine(0, y, getWidth(), y); + } + + // Draw vertical lines + for (int j = 1; j < gridSize; j++) { + int x = j * cellSize; + g.drawLine(x, 0, x, getHeight()); + } + + // Draw player and T + if (joueurPos != null){ + g.setColor(Color.BLUE); + g.fillOval(joueurPos.x * cellSize, joueurPos.y * cellSize, cellSize, cellSize); + } + if (tPos != null) { + g.setColor(Color.RED); + g.fillRect(tPos.x * cellSize, tPos.y * cellSize, cellSize, cellSize); + } +} + + +public static void main(String[] args) { + JFrame frame = new JFrame("GridPanel"); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + frame.getContentPane().setLayout(new BorderLayout()); + GridPanel gridPanel = new GridPanel(); + frame.getContentPane().add(gridPanel, BorderLayout.CENTER); + frame.getContentPane().add(gridPanel.getComponents()[0], BorderLayout.NORTH); + frame.pack(); + frame.setVisible(true); + + Timer timer = new Timer(100, new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + gridPanel.repaint(); + } + }); + timer.start(); +} +} diff --git a/src/Play.java b/src/Play.java new file mode 100644 index 0000000..876abfa --- /dev/null +++ b/src/Play.java @@ -0,0 +1,32 @@ +import javax.swing.*; +import java.awt.*; + +public class Play extends JFrame { + public Play() { + super("Démarrage"); + this.setSize(250, 250); + this.setLocationRelativeTo(null); + this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + + JPanel panelDemarrage = new JPanel(new BorderLayout()); + panelDemarrage.setBackground(Color.WHITE); + + JButton play = new JButton("Jouer"); + play.setPreferredSize(new Dimension(100, 50)); + play.setFont(new Font("Arial", Font.BOLD, 20)); + play.setBackground(new Color(0, 150, 200)); + play.addActionListener(e -> { + this.dispose(); // ferme la fenêtre de démarrage + Accueil.fenetreAccueil(); // ouvre la fenêtre d'accueil + }); + + JPanel panelPlay = new JPanel(); + panelPlay.add(play, BorderLayout.CENTER); + + panelDemarrage.add(panelPlay, BorderLayout.CENTER); + panelDemarrage.setLayout(new FlowLayout(FlowLayout.CENTER, 0, 60)); + this.setContentPane(panelDemarrage); + this.setResizable(false); + this.setVisible(true); + } +} \ No newline at end of file diff --git a/src/background.jpg b/src/background.jpg new file mode 100644 index 0000000..4dd3ccc Binary files /dev/null and b/src/background.jpg differ