init: resolve conflicts
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
projet_linea/bin/images/icone.png
Normal file
BIN
projet_linea/bin/images/icone.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 815 KiB |
@@ -1,24 +1,58 @@
|
||||
import java.awt.*;
|
||||
import java.net.URL;
|
||||
import javax.imageio.ImageIO;
|
||||
import javax.swing.*;
|
||||
|
||||
public class CadreDeConnexion extends JFrame {
|
||||
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
// Méthode peremttant de charger(récupérer) l'image îcone depuis Ressources
|
||||
// -------------------------------------------------------------------------
|
||||
private Image chargerImageDepuisRessource(String cheminRessource) {
|
||||
// Cette méthode doit seulement charger l'image, pas rappeler elle-même.
|
||||
try {
|
||||
URL url = getClass().getResource(cheminRessource);
|
||||
if (url != null) {
|
||||
return ImageIO.read(url);
|
||||
}
|
||||
System.err.println("Ressource introuvable : " + cheminRessource);
|
||||
} catch (Exception e) {
|
||||
System.err.println("Erreur chargement image : " + e.getMessage());
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public CadreDeConnexion() {
|
||||
// 1. Configuration de base
|
||||
setTitle("Connexion Linea");
|
||||
|
||||
// Image de fond de la page de connexion
|
||||
Background panelBackground = null;
|
||||
|
||||
// 1. On change l'icône de CETTE fenêtre (this)
|
||||
Image imageConnexion = chargerImageDepuisRessource("/images/icone.png");
|
||||
if (imageConnexion != null) {
|
||||
// On applique la même image comme icône de la fenêtre
|
||||
this.setIconImage(imageConnexion);
|
||||
// On prépare aussi le fond pour le panneau de connexion
|
||||
panelBackground = new Background(imageConnexion);
|
||||
}
|
||||
|
||||
// 2. Configuration de base
|
||||
setTitle("ZENITH FLUX");
|
||||
setSize(800, 600);
|
||||
setDefaultCloseOperation(EXIT_ON_CLOSE);
|
||||
setLocationRelativeTo(null); // Centre la fenêtre
|
||||
|
||||
// 2. Style du panneau principal (Gris foncé)
|
||||
JPanel panel = new JPanel(new GridBagLayout());
|
||||
panel.setBackground(new Color(30, 30, 30));
|
||||
add(panel);
|
||||
// On utilise ZoneDessin pour pouvoir dessiner l'image en fond
|
||||
JPanel panel = new ZoneDessin(panelBackground);
|
||||
panel.setLayout(new GridBagLayout());
|
||||
setContentPane(panel);
|
||||
|
||||
// Conteneur pour les éléments (pour les empiler verticalement)
|
||||
Box box = Box.createVerticalBox();
|
||||
|
||||
// 3. Création des composants
|
||||
// 4. Création des composants
|
||||
JLabel titre = new JLabel("CONNEXION");
|
||||
titre.setForeground(Color.WHITE);
|
||||
titre.setFont(new Font("Arial", Font.BOLD, 24));
|
||||
@@ -32,7 +66,7 @@ public class CadreDeConnexion extends JFrame {
|
||||
|
||||
JButton loginBtn = BoutonsManager.creerBoutonConnexion(userField, passField, this);
|
||||
|
||||
// 4. Ajout des composants avec des espaces (Struts)
|
||||
// 5. Ajout des composants avec des espaces (Struts)
|
||||
box.add(titre);
|
||||
box.add(Box.createVerticalStrut(30)); // Espace
|
||||
box.add(new JLabel("<html><font color='white'>Utilisateur :</font></html>"));
|
||||
@@ -49,6 +83,92 @@ public class CadreDeConnexion extends JFrame {
|
||||
|
||||
panel.add(box); // Ajoute la boîte au centre du GridBagLayout
|
||||
|
||||
// 5. Logique du bouton
|
||||
loginBtn.addActionListener(e -> {
|
||||
String user = userField.getText();
|
||||
String pass = new String(passField.getPassword());
|
||||
int userId = GestionBDD.verifierConnexion(user, pass);
|
||||
|
||||
if (userId != -1) {
|
||||
dispose();
|
||||
Jeu jeu = new Jeu(userId);
|
||||
jeu.demarrer();
|
||||
} else {
|
||||
JOptionPane.showMessageDialog(this, "Acces refuse");
|
||||
}
|
||||
});
|
||||
|
||||
createBtn.addActionListener(evt -> {
|
||||
JFrame createFrame = new JFrame("Creation de compte");
|
||||
createFrame.setSize(800, 600);
|
||||
createFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
|
||||
createFrame.setLocationRelativeTo(null);
|
||||
|
||||
// On recharge la même image pour la fenêtre de création de compte
|
||||
// afin de lui donner à la fois l'icône et le fond d'écran.
|
||||
Background panelBackgroundCreation = null;
|
||||
Image imageCreation = chargerImageDepuisRessource("/images/icone.png");
|
||||
if (imageCreation != null) {
|
||||
createFrame.setIconImage(imageCreation);
|
||||
panelBackgroundCreation = new Background(imageCreation);
|
||||
}
|
||||
|
||||
// Même principe que pour la page de connexion : le fond est dessiné par ZoneDessin
|
||||
JPanel createPanel = new ZoneDessin(panelBackgroundCreation);
|
||||
createPanel.setLayout(new GridBagLayout());
|
||||
createFrame.setContentPane(createPanel);
|
||||
|
||||
Box createBox = Box.createVerticalBox();
|
||||
|
||||
JLabel createTitre = new JLabel("CREATION DE COMPTE");
|
||||
createTitre.setForeground(Color.WHITE);
|
||||
createTitre.setFont(new Font("Arial", Font.BOLD, 24));
|
||||
createTitre.setAlignmentX(Component.CENTER_ALIGNMENT);
|
||||
|
||||
JTextField newUserField = new JTextField(15);
|
||||
newUserField.setMaximumSize(new Dimension(250, 30));
|
||||
|
||||
JPasswordField newPassField = new JPasswordField(15);
|
||||
newPassField.setMaximumSize(new Dimension(250, 30));
|
||||
|
||||
JButton createAccountBtn = new JButton("Créer");
|
||||
createAccountBtn.setBackground(new Color(70, 130, 180));
|
||||
createAccountBtn.setForeground(Color.WHITE);
|
||||
createAccountBtn.setFocusPainted(false);
|
||||
createAccountBtn.setAlignmentX(Component.CENTER_ALIGNMENT);
|
||||
|
||||
createBox.add(createTitre);
|
||||
createBox.add(Box.createVerticalStrut(30));
|
||||
createBox.add(new JLabel("<html><font color='white'>Nouvel utilisateur :</font></html>"));
|
||||
createBox.add(newUserField);
|
||||
createBox.add(Box.createVerticalStrut(15));
|
||||
createBox.add(new JLabel("<html><font color='white'>Mot de passe :</font></html>"));
|
||||
createBox.add(newPassField);
|
||||
createBox.add(Box.createVerticalStrut(30));
|
||||
createBox.add(createAccountBtn);
|
||||
|
||||
createPanel.add(createBox);
|
||||
|
||||
createAccountBtn.addActionListener(e -> {
|
||||
String u = newUserField.getText().trim();
|
||||
String p = new String(newPassField.getPassword());
|
||||
if (u.isEmpty() || p.isEmpty()) {
|
||||
JOptionPane.showMessageDialog(createFrame, "Utilisateur et mot de passe requis");
|
||||
return;
|
||||
}
|
||||
|
||||
boolean ok = GestionBDD.creerUtilisateur(u, p);
|
||||
if (ok) {
|
||||
JOptionPane.showMessageDialog(createFrame, "Compte cree avec succes.");
|
||||
createFrame.dispose();
|
||||
} else {
|
||||
JOptionPane.showMessageDialog(createFrame, "Échec : le nom d'utilisateur existe deja ou erreur.");
|
||||
}
|
||||
});
|
||||
|
||||
createFrame.setVisible(true);
|
||||
});
|
||||
|
||||
setVisible(true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ public class Cercle extends ObjetGraphique{ // il s'agit plutôt d'arcs de cercl
|
||||
//-------------------------------------------------------------------------
|
||||
// PROPRIETES
|
||||
//-------------------------------------------------------------------------
|
||||
private double gravite = 10.0;
|
||||
protected double rayon = 30;
|
||||
protected double depY = 0; // déplacement
|
||||
|
||||
@@ -77,6 +78,12 @@ public class Cercle extends ObjetGraphique{ // il s'agit plutôt d'arcs de cercl
|
||||
return y;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
// Méthode pour mettre à jour la gravité du cercle depuis la classe
|
||||
//-------------------------------------------------------------------------
|
||||
public void setGravite(double nouvelleGravite) {
|
||||
this.gravite = nouvelleGravite;
|
||||
}
|
||||
//-------------------------------------------------------------------------
|
||||
// Méthode qui note que up a été appuyée
|
||||
// -> le booléen permet de ne plus être tributaire
|
||||
@@ -118,17 +125,15 @@ public class Cercle extends ObjetGraphique{ // il s'agit plutôt d'arcs de cercl
|
||||
void Animer() {
|
||||
// pas est à prendre comme un "delta t"
|
||||
|
||||
if (!modeTriche) {
|
||||
// chute libre
|
||||
vitesse = vitesse + 9.81 * pas;
|
||||
}
|
||||
vitesse = vitesse + gravite * pas;
|
||||
|
||||
// impulsion (toujours appliquée, même en triche ?)
|
||||
if (montee==true) {
|
||||
vitesse = vitesse - impulsion *pas;
|
||||
}
|
||||
|
||||
depY = 1/2 * 9.81 + vitesse * pas;
|
||||
depY = 1/2 * gravite + vitesse * pas;
|
||||
|
||||
if (depY<-10) {
|
||||
depY=-10;
|
||||
@@ -144,7 +149,7 @@ public class Cercle extends ObjetGraphique{ // il s'agit plutôt d'arcs de cercl
|
||||
// Méthode pour mettre un plafond et un sol au cercle
|
||||
public void verification_cercle_out(){
|
||||
if(y < plafond || (y + rayon) >= sol ) {
|
||||
vitesse = -vitesse;
|
||||
vitesse =-vitesse;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -62,6 +62,10 @@ public class Jeu implements KeyListener, ActionListener{
|
||||
// Constructeur de la classe
|
||||
//-------------------------------------------------------------------------
|
||||
public Jeu(int utilisateurId){
|
||||
// Créer les tables de la base de données si elles n'existent pas
|
||||
GestionBDD.creerTableUtilisateurSiAbsente();
|
||||
GestionBDD.creerTableScoreSiAbsente();
|
||||
|
||||
JFrame fenetre = new JFrame();
|
||||
|
||||
this.utilisateurId = utilisateurId;
|
||||
@@ -84,13 +88,14 @@ public class Jeu implements KeyListener, ActionListener{
|
||||
|
||||
if( n1 != null ){
|
||||
try {
|
||||
// On charge l'mage du niveau 1
|
||||
// On charge l'image du niveau 1
|
||||
java.net.URL url = Jeu.class.getResource("/" + n1.getImage());
|
||||
if(url != null){
|
||||
java.awt.Image img = javax.imageio.ImageIO.read(url);
|
||||
premierFond = new Background(img);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -238,6 +243,18 @@ public class Jeu implements KeyListener, ActionListener{
|
||||
this.dernierSegmentValide = null;
|
||||
this.ecran.partiePerdue = false;
|
||||
|
||||
// Formule : Gravité de base - (Niveau * incrément)
|
||||
// Niveau 1 : 10.0 + (1 * 1.50) = 8.5 (poids normal)
|
||||
// Niveau 4 : 10.0 + (4 * 1.50) = 4.0 (Très léger et plane)
|
||||
double graviteNiveau = 10.0 - (this.niveauEnCours.getId() * 1.5);
|
||||
// Sécurité: La gravité du niveau ne doit pas descendre en dessous de 2
|
||||
// Sinon le cercle ne retomberait plus jamais
|
||||
if(graviteNiveau < 2.0){
|
||||
graviteNiveau = 2.0;
|
||||
}
|
||||
this.demiCercleAvant.setGravite(graviteNiveau);
|
||||
this.demiCercleArriere.setGravite(graviteNiveau);
|
||||
|
||||
|
||||
// On corse le jeu avec son ID
|
||||
//On applique les paramètres aux options de jeu
|
||||
@@ -271,7 +288,7 @@ public class Jeu implements KeyListener, ActionListener{
|
||||
|
||||
// Petite pause avec un message
|
||||
horloge.stop();
|
||||
JOptionPane.showMessageDialog(fenetre, "Niveau terminé ! Préparez-vous pour le niveau suivant ;)");
|
||||
JOptionPane.showMessageDialog(fenetre, "Niveau terminé ! Préparez-vous pour le niveau suivant 😉 OU PERDEZ 😈");
|
||||
|
||||
chargerNiveau(idNiveauActuel);
|
||||
horloge.start();
|
||||
@@ -289,11 +306,14 @@ public class Jeu implements KeyListener, ActionListener{
|
||||
this.ecran.traiterBoucleAnimation();
|
||||
this.laLigne.actualiserSegCourant();
|
||||
|
||||
// Mode triche : centrer le cercle sur le milieu du segment courant
|
||||
// Mode triche : Le cercle suit la ligne
|
||||
// On utilisera le calcul pour déterminer si la ligne traverse le cercle
|
||||
if (modeTriche && this.laLigne.getSegCourant() != null) {
|
||||
double milieuY = this.laLigne.getSegCourant().getMilieuY();
|
||||
this.demiCercleAvant.y = milieuY;
|
||||
this.demiCercleArriere.y = milieuY;
|
||||
// double yPoint = this.getSegCourant().y + (this.SegCourant.yLong / this.SegCourant.xLong) * (this.xCercle - this.SegCourant.x);
|
||||
double yPointTricheArrire = this.laLigne.getSegCourant().getY() + (this.laLigne.getSegCourant().getYLong() / this.laLigne.getSegCourant().getXLong()) * (this.demiCercleArriere.getX() - this.laLigne.getSegCourant().getX());
|
||||
double yPointTricheAvant = this.laLigne.getSegCourant().getY() + (this.laLigne.getSegCourant().getYLong() / this.laLigne.getSegCourant().getXLong()) * (this.demiCercleAvant.getX() - this.laLigne.getSegCourant().getX());
|
||||
this.demiCercleAvant.y = yPointTricheArrire ;
|
||||
this.demiCercleArriere.y = yPointTricheAvant;
|
||||
}
|
||||
|
||||
// 2. On vérifie si la ligne traverse bien le cercle
|
||||
|
||||
@@ -173,6 +173,7 @@ public class Ligne extends ObjetGraphique{// Hérite de la classe ObjetGraphique
|
||||
}
|
||||
return dansCercle;
|
||||
}
|
||||
|
||||
public Segment getSegCourant() {
|
||||
return this.SegCourant;
|
||||
}
|
||||
|
||||
@@ -9,4 +9,5 @@ public class LineaAppli {
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -124,24 +124,24 @@ public class NiveauxDataConnect {
|
||||
// le jeu est lancé
|
||||
// Pour corser le jeu, on utilisera l'id du niveau qui nous servira de difficulté
|
||||
// --------------------------------Niveau 1 --------------------------------
|
||||
// nom = "Facile", vitesse_ligne = 5, nb_segments = 50, image = "images\ciel.jpeg", multiplicateur_score = 1, couleur_cercle = "bleu"
|
||||
// nom = "Facile", vitesse_ligne = 5, nb_segments = 50, image = "images\ciel.jpeg", multiplicateur_score = 10, couleur_cercle = "bleu"
|
||||
// --------------------------------Niveau 2 --------------------------------
|
||||
// nom = "intermédaire", vitesse_ligne = 7, nb_segments = 100, image = "images\montagnes.jpg", multiplicateur_score = 2, couleur_cercle = "gris"
|
||||
// nom = "intermédaire", vitesse_ligne = 7, nb_segments = 100, image = "images\montagnes.jpg", multiplicateur_score = 20, couleur_cercle = "gris"
|
||||
// --------------------------------Niveau 3 --------------------------------
|
||||
// nom = "Difficile", vitesse_ligne = 9, nb_segments = 100, image = "images\volcan.jpg", multiplicateur_score = 3, couleur_cercle = "marron"
|
||||
// nom = "Difficile", vitesse_ligne = 9, nb_segments = 100, image = "images\volcan.jpg", multiplicateur_score = 30, couleur_cercle = "marron"
|
||||
// --------------------------------Niveau 4 --------------------------------
|
||||
// nom = "Ultime", vitesse_ligne = 10, nb_segments = 150, image = "images\espace.jpg", multiplicateur_score = 4, couleur_cercle = "violet"
|
||||
// nom = "Ultime", vitesse_ligne = 10, nb_segments = 150, image = "images\espace.jpg", multiplicateur_score = 50, couleur_cercle = "violet"
|
||||
// -------------------------------------------------------------------------
|
||||
public static void insererNiveau(Connection conn) {
|
||||
String query1 = "INSERT INTO niveau(nom, vitesse_ligne, nb_segments, image, multiplicateur_score, couleur_cercle) "
|
||||
+ "VALUES('Facile', 5, 50, 'images/ciel.jpeg', 1, '#0000FF');";
|
||||
+ "VALUES('Facile', 5, 50, 'images/ciel.jpeg', 10, '#0000FF');";
|
||||
|
||||
String query2 = "INSERT INTO niveau(nom, vitesse_ligne, nb_segments, image, multiplicateur_score, couleur_cercle) "
|
||||
+ "VALUES('Intermédiaire', 7, 100, 'images/montagnes.jpg', 2, '#808080');";
|
||||
+ "VALUES('Intermédiaire', 7, 100, 'images/montagnes.jpg', 20, '#808080');";
|
||||
String query3 = "INSERT INTO niveau(nom, vitesse_ligne, nb_segments, image, multiplicateur_score, couleur_cercle) "
|
||||
+ "VALUES('Difficile', 9, 100, 'images/volcan.jpg', 3, '#8B4513');";
|
||||
+ "VALUES('Difficile', 9, 100, 'images/volcan.jpg', 30, '#8B4513');";
|
||||
String query4 = "INSERT INTO niveau(nom, vitesse_ligne, nb_segments, image, multiplicateur_score, couleur_cercle) "
|
||||
+ "VALUES('Ultime', 10, 150, 'images/espace.jpg', 4, '#9400D3');";
|
||||
+ "VALUES('Ultime', 10, 150, 'images/espace.jpg', 50, '#9400D3');";
|
||||
|
||||
try (Statement stmt = conn.createStatement()) {
|
||||
stmt.execute(query1);
|
||||
|
||||
@@ -32,6 +32,14 @@ public class Segment extends ObjetGraphique { // Hérite de la classe ObjetGraph
|
||||
yLong = yyLong;
|
||||
}
|
||||
|
||||
public double getYLong(){
|
||||
return this.yLong;
|
||||
}
|
||||
|
||||
public double getXLong(){
|
||||
return this.xLong;
|
||||
}
|
||||
|
||||
// Méthode pour obtenir la position Y au milieu du segment
|
||||
public double getMilieuY() {
|
||||
return y + yLong / 2;
|
||||
|
||||
BIN
projet_linea/src/images/icone.png
Normal file
BIN
projet_linea/src/images/icone.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 815 KiB |
Reference in New Issue
Block a user