add gestion sound level

This commit is contained in:
2026-03-28 11:56:55 +01:00
parent c8c827fb7f
commit 67f76876a6
18 changed files with 98 additions and 19 deletions

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.

Binary file not shown.

View File

@@ -0,0 +1,67 @@
//---------------------------------------------------------------------------------
// Cette classe peremt de gérer la lecture, l'arrêt et la répétition(loop)
//---------------------------------------------------------------------------------
import java.net.URL;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
public class GestionAudio {
// Clip est une interface qui hérite de DataLine
private static Clip clip;
//Propriété de la musique actuelle
private static String musiqueActuelle = "";
//------------------------------------------------------------------------------
// Méthode pour jouer la musique
//------------------------------------------------------------------------------
public static void jouerMusique(String cheminDansSrc){
// Si la musique demandée joue déjà, on ne fait rien
if(cheminDansSrc.equals(musiqueActuelle)){
return;
}
// On arrête la musique précédente
stop();
// Sinon, on met la bonne musique
try {
// On récupère l'audio depuis src
URL urlSound = GestionAudio.class.getResource("/" + cheminDansSrc);
// On vérifie si on a bien récupéré une musique
// Si c'est le cas
if(urlSound != null){
// On transforme le fichier URL du fichier en flux audio lisible ar JAVA
// Autrement dit: On prépare le fichier pour la lecture sonore
AudioInputStream ais = AudioSystem.getAudioInputStream(urlSound);
// Création d'un objet Clip permettant de ouer du son court en mémoire
clip = AudioSystem.getClip();
// On charge le fluc audio dans le clip
// Le son est prêt à être joué
clip.open(ais);
clip.loop(clip.LOOP_CONTINUOUSLY); // On fait jouer en boucle infinie
clip.start(); // On démarre l'audio
musiqueActuelle = cheminDansSrc; // Notre musique Actuelle a déjà une valeur
}
} catch (Exception e) {
System.err.println("Erreur Audio: " + e.getMessage());
}
}
//------------------------------------------------------------------------------
// Méthode pour arrêter la musique
//------------------------------------------------------------------------------s
private static void stop() {
if(clip != null){
clip.stop();
clip.close();
musiqueActuelle = "";
}
throw new UnsupportedOperationException("Unimplemented method 'stop'");
}
}

View File

@@ -328,12 +328,14 @@ public class Jeu implements KeyListener, ActionListener{
// On corse le jeu avec son ID // On corse le jeu avec son ID
//On applique les paramètres aux options de jeu //On applique les paramètres aux options de jeu
GestionAudio.jouerMusique(niveauEnCours.getMusiqueNiveau());
this.laLigne.generer(niveauEnCours.getNbSegments(), niveauEnCours.getId()); this.laLigne.generer(niveauEnCours.getNbSegments(), niveauEnCours.getId());
this.laLigne.setVitesseLigne(niveauEnCours.getVitesseLigne()); // On modifie la vitesse de déplacement this.laLigne.setVitesseLigne(niveauEnCours.getVitesseLigne()); // On modifie la vitesse de déplacement
this.demiCercleAvant.setCouleur(niveauEnCours.getCouleurCercle()); this.demiCercleAvant.setCouleur(niveauEnCours.getCouleurCercle());
this.demiCercleArriere.setCouleur(niveauEnCours.getCouleurCercle()); this.demiCercleArriere.setCouleur(niveauEnCours.getCouleurCercle());
this.ecran.changerImageFond(niveauEnCours.getImage()); this.ecran.changerImageFond(niveauEnCours.getImage());
this.itemCourant.vitesse = niveauEnCours.getVitesseLigne(); this.itemCourant.vitesse = niveauEnCours.getVitesseLigne();
}else{ }else{

View File

@@ -7,9 +7,10 @@ public class Niveau {
private String image; private String image;
private int multiplicateurScore; private int multiplicateurScore;
private String couleurCercle; private String couleurCercle;
private String musqiueNiveau;
// Constructeur de la classe Niveau // Constructeur de la classe Niveau
public Niveau(int id, String nom, int vitesseLigne, int nbSegments, String image, int multiplicateurScore, String couleurCercle) { public Niveau(int id, String nom, int vitesseLigne, int nbSegments, String image, int multiplicateurScore, String couleurCercle, String musiqueNiveau) {
this.id = id; this.id = id;
this.nom = nom; this.nom = nom;
this.vitesseLigne = vitesseLigne; this.vitesseLigne = vitesseLigne;
@@ -17,6 +18,7 @@ public class Niveau {
this.image = image; this.image = image;
this.multiplicateurScore = multiplicateurScore; this.multiplicateurScore = multiplicateurScore;
this.couleurCercle = couleurCercle; this.couleurCercle = couleurCercle;
this.musqiueNiveau = musiqueNiveau;
} }
// Getters pour les propriétés du niveau // Getters pour les propriétés du niveau
@@ -47,5 +49,9 @@ public class Niveau {
public String getCouleurCercle() { public String getCouleurCercle() {
return couleurCercle; return couleurCercle;
} }
public String getMusiqueNiveau(){
return musqiueNiveau;
}
} }

View File

@@ -103,6 +103,7 @@ public class NiveauxDataConnect {
+ "image TEXT NOT NULL, " /*image du niveau*/ + "image TEXT NOT NULL, " /*image du niveau*/
+ "multiplicateur_score INTEGER, " /*multiplier le score en fonction du niveau*/ + "multiplicateur_score INTEGER, " /*multiplier le score en fonction du niveau*/
+ "couleur_cercle TEXT NOT NULL " /*Couleur du cercle en fonctiond du niveau */ + "couleur_cercle TEXT NOT NULL " /*Couleur du cercle en fonctiond du niveau */
+ "musique_theme TEXT NOT NULL" /*Musique du thème du niveau */
+");" ; +");" ;
try (Statement stmt = conn.createStatement()) { try (Statement stmt = conn.createStatement()) {
@@ -123,25 +124,27 @@ public class NiveauxDataConnect {
// dans la base de données pour éviter de les insérer à chaque fois que // dans la base de données pour éviter de les insérer à chaque fois que
// le jeu est lancé // le jeu est lancé
// Pour corser le jeu, on utilisera l'id du niveau qui nous servira de difficulté // Pour corser le jeu, on utilisera l'id du niveau qui nous servira de difficulté
// --------------------------------Niveau 1 -------------------------------- // --------------------------------Niveau 1 ---------------------------------------------------------------------------------------------------------------------------------------------------
// nom = "Facile", vitesse_ligne = 5, nb_segments = 50, image = "images\ciel.jpeg", multiplicateur_score = 10, couleur_cercle = "bleu" // nom = "Facile", vitesse_ligne = 5, nb_segments = 50, image = "images\ciel.jpeg", multiplicateur_score = 10, couleur_cercle = "bleu", musique = "musiques\musique_theme_ciel.wav"
// --------------------------------Niveau 2 -------------------------------- // --------------------------------Niveau 2 ---------------------------------------------------------------------------------------------------------------------------------------------------
// nom = "intermédaire", vitesse_ligne = 7, nb_segments = 100, image = "images\montagnes.jpg", multiplicateur_score = 20, couleur_cercle = "gris" // nom = "intermédaire", vitesse_ligne = 7, nb_segments = 100, image = "images\montagnes.jpg", multiplicateur_score = 20, couleur_cercle = "gris", musique = "musiques\musique_theme_montagnes.wav"
// --------------------------------Niveau 3 -------------------------------- // --------------------------------Niveau 3 ---------------------------------------------------------------------------------------------------------------------------------------------------
// nom = "Difficile", vitesse_ligne = 9, nb_segments = 100, image = "images\volcan.jpg", multiplicateur_score = 30, couleur_cercle = "marron" // nom = "Difficile", vitesse_ligne = 9, nb_segments = 100, image = "images\volcan.jpg", multiplicateur_score = 30, couleur_cercle = "marron", musique = "musiques\musique_theme_volcan.wav"
// --------------------------------Niveau 4 -------------------------------- // --------------------------------Niveau 4 ---------------------------------------------------------------------------------------------------------------------------------------------------
// nom = "Ultime", vitesse_ligne = 10, nb_segments = 150, image = "images\espace.jpg", multiplicateur_score = 50, couleur_cercle = "violet" // nom = "Ultime", vitesse_ligne = 10, nb_segments = 150, image = "images\espace.jpg", multiplicateur_score = 50, couleur_cercle = "violet", musique = "musiques\musique_theme_espace.wav"
// ------------------------------------------------------------------------- // --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
public static void insererNiveau(Connection conn) { public static void insererNiveau(Connection conn) {
String query1 = "INSERT INTO niveau(nom, vitesse_ligne, nb_segments, image, multiplicateur_score, couleur_cercle) " String query1 = "INSERT INTO niveau(nom, vitesse_ligne, nb_segments, image, multiplicateur_score, couleur_cercle, musique_theme) "
+ "VALUES('Facile', 5, 50, 'images/ciel.jpeg', 10, '#0000FF');"; + "VALUES('Facile', 5, 50, 'images/ciel.jpeg', 10, '#0000FF', 'musiques/musique_theme_ciel.wav');";
String query2 = "INSERT INTO niveau(nom, vitesse_ligne, nb_segments, image, multiplicateur_score, couleur_cercle) " String query2 = "INSERT INTO niveau(nom, vitesse_ligne, nb_segments, image, multiplicateur_score, couleur_cercle, musique_theme) "
+ "VALUES('Intermédiaire', 7, 100, 'images/montagnes.jpg', 20, '#808080');"; + "VALUES('Intermédiaire', 7, 100, 'images/montagnes.jpg', 20, '#808080', 'musiques/musique_theme_montagnes.wav');";
String query3 = "INSERT INTO niveau(nom, vitesse_ligne, nb_segments, image, multiplicateur_score, couleur_cercle) "
+ "VALUES('Difficile', 9, 100, 'images/volcan.jpg', 30, '#8B4513');"; String query3 = "INSERT INTO niveau(nom, vitesse_ligne, nb_segments, image, multiplicateur_score, couleur_cercle, musique_theme) "
String query4 = "INSERT INTO niveau(nom, vitesse_ligne, nb_segments, image, multiplicateur_score, couleur_cercle) " + "VALUES('Difficile', 9, 100, 'images/volcan.jpg', 30, '#8B4513', 'musiques/musique_theme_volcan.wav');";
+ "VALUES('Ultime', 10, 150, 'images/espace.jpg', 50, '#9400D3');";
String query4 = "INSERT INTO niveau(nom, vitesse_ligne, nb_segments, image, multiplicateur_score, couleur_cercle, musique_theme) "
+ "VALUES('Ultime', 10, 150, 'images/espace.jpg', 50, '#9400D3', 'musiques/musique_theme_espace.wav');";
try (Statement stmt = conn.createStatement()) { try (Statement stmt = conn.createStatement()) {
stmt.execute(query1); stmt.execute(query1);
@@ -175,7 +178,8 @@ public class NiveauxDataConnect {
String image = rs.getString("image"); String image = rs.getString("image");
int multiplicateur_score = rs.getInt("multiplicateur_score"); int multiplicateur_score = rs.getInt("multiplicateur_score");
String couleur_cercle = rs.getString("couleur_cercle"); String couleur_cercle = rs.getString("couleur_cercle");
niveauRecup = new Niveau(id1, nom, vitesse_ligne, nb_segments, image, multiplicateur_score, couleur_cercle); String musique_niveau = rs.getString("musique_theme");
niveauRecup = new Niveau(id1, nom, vitesse_ligne, nb_segments, image, multiplicateur_score, couleur_cercle, musique_niveau);
} }
} }

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.