Ajout de fichier

This commit is contained in:
Daouadi Amir 2023-04-18 11:37:07 +02:00
parent 4899d0d69c
commit 71c5d30b1a
7 changed files with 350 additions and 1 deletions

5
.gitignore vendored
View File

@ -26,4 +26,7 @@ bin/
.vscode/
### Mac OS ###
.DS_Store
.DS_Store
### Java ###
.class

55
src/Accueil.java Normal file
View File

@ -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);
}
}

89
src/Boutons.java Normal file
View File

@ -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 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;
}
}

14
src/Fenetre.java Normal file
View File

@ -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);
}
}

156
src/GridPanel.java Normal file
View File

@ -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();
}
}

32
src/Play.java Normal file
View File

@ -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);
}
}

BIN
src/background.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB