diff --git a/JDR/src/img/Ambresa.jpg b/JDR/src/img/Ambresa.jpg new file mode 100644 index 0000000..f7af619 Binary files /dev/null and b/JDR/src/img/Ambresa.jpg differ diff --git a/JDR/src/img/Barbare04.jpg b/JDR/src/img/Barbare04.jpg new file mode 100644 index 0000000..6b1c7f5 Binary files /dev/null and b/JDR/src/img/Barbare04.jpg differ diff --git a/JDR/src/img/Caitlyn.jpg b/JDR/src/img/Caitlyn.jpg new file mode 100644 index 0000000..dd96c6b Binary files /dev/null and b/JDR/src/img/Caitlyn.jpg differ diff --git a/JDR/src/img/Combat.jpg b/JDR/src/img/Combat.jpg new file mode 100644 index 0000000..24c29bb Binary files /dev/null and b/JDR/src/img/Combat.jpg differ diff --git a/JDR/src/img/CombatPerdu.jpg b/JDR/src/img/CombatPerdu.jpg new file mode 100644 index 0000000..55244b3 Binary files /dev/null and b/JDR/src/img/CombatPerdu.jpg differ diff --git a/JDR/src/img/Ekko.jpg b/JDR/src/img/Ekko.jpg new file mode 100644 index 0000000..713fa00 Binary files /dev/null and b/JDR/src/img/Ekko.jpg differ diff --git a/JDR/src/img/Guerrier05.jpg b/JDR/src/img/Guerrier05.jpg new file mode 100644 index 0000000..628ae2d Binary files /dev/null and b/JDR/src/img/Guerrier05.jpg differ diff --git a/JDR/src/img/Guerrier08.jpg b/JDR/src/img/Guerrier08.jpg new file mode 100644 index 0000000..57b7dd7 Binary files /dev/null and b/JDR/src/img/Guerrier08.jpg differ diff --git a/JDR/src/img/Guerrier10.jpg b/JDR/src/img/Guerrier10.jpg new file mode 100644 index 0000000..98c475a Binary files /dev/null and b/JDR/src/img/Guerrier10.jpg differ diff --git a/JDR/src/img/Guerrier12.jpg b/JDR/src/img/Guerrier12.jpg new file mode 100644 index 0000000..884c5ab Binary files /dev/null and b/JDR/src/img/Guerrier12.jpg differ diff --git a/JDR/src/img/Jayce.jpg b/JDR/src/img/Jayce.jpg new file mode 100644 index 0000000..0b6b30e Binary files /dev/null and b/JDR/src/img/Jayce.jpg differ diff --git a/JDR/src/img/Jinx.jpg b/JDR/src/img/Jinx.jpg new file mode 100644 index 0000000..9f927ae Binary files /dev/null and b/JDR/src/img/Jinx.jpg differ diff --git a/JDR/src/img/Mel.jpg b/JDR/src/img/Mel.jpg new file mode 100644 index 0000000..64e2be3 Binary files /dev/null and b/JDR/src/img/Mel.jpg differ diff --git a/JDR/src/img/Simone.JPG b/JDR/src/img/Simone.JPG new file mode 100644 index 0000000..4f47ff5 Binary files /dev/null and b/JDR/src/img/Simone.JPG differ diff --git a/JDR/src/img/Sorcier02.JPG b/JDR/src/img/Sorcier02.JPG new file mode 100644 index 0000000..86afc05 Binary files /dev/null and b/JDR/src/img/Sorcier02.JPG differ diff --git a/JDR/src/img/Sorciere1.jpg b/JDR/src/img/Sorciere1.jpg new file mode 100644 index 0000000..57cac9d Binary files /dev/null and b/JDR/src/img/Sorciere1.jpg differ diff --git a/JDR/src/img/Viktor.jpg b/JDR/src/img/Viktor.jpg new file mode 100644 index 0000000..18f5ea7 Binary files /dev/null and b/JDR/src/img/Viktor.jpg differ diff --git a/JDR/src/img/adj_1.jpg b/JDR/src/img/adj_1.jpg new file mode 100644 index 0000000..a6e3d8b Binary files /dev/null and b/JDR/src/img/adj_1.jpg differ diff --git a/JDR/src/img/des.jpg b/JDR/src/img/des.jpg new file mode 100644 index 0000000..4ab6874 Binary files /dev/null and b/JDR/src/img/des.jpg differ diff --git a/JDR/src/img/famille_1.jpg b/JDR/src/img/famille_1.jpg new file mode 100644 index 0000000..0ce6eb6 Binary files /dev/null and b/JDR/src/img/famille_1.jpg differ diff --git a/JDR/src/img/magie.jpg b/JDR/src/img/magie.jpg new file mode 100644 index 0000000..ca36156 Binary files /dev/null and b/JDR/src/img/magie.jpg differ diff --git a/JDR/src/img/panoramix.gif b/JDR/src/img/panoramix.gif new file mode 100644 index 0000000..ed4f989 Binary files /dev/null and b/JDR/src/img/panoramix.gif differ diff --git a/JDR/src/img/pierreFeuilleCiseaux.jpg b/JDR/src/img/pierreFeuilleCiseaux.jpg new file mode 100644 index 0000000..4bb2ecf Binary files /dev/null and b/JDR/src/img/pierreFeuilleCiseaux.jpg differ diff --git a/JDR/src/interfaces/jFFJDR.form b/JDR/src/interfaces/jFFJDR.form new file mode 100644 index 0000000..1403f75 --- /dev/null +++ b/JDR/src/interfaces/jFFJDR.form @@ -0,0 +1,66 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/JDR/src/interfaces/jFFJDR.java b/JDR/src/interfaces/jFFJDR.java new file mode 100644 index 0000000..9dc477d --- /dev/null +++ b/JDR/src/interfaces/jFFJDR.java @@ -0,0 +1,102 @@ +/* + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/GUIForms/JFrame.java to edit this template + */ +package interfaces; + +/** + * + * @author steve.maingana + */ +public class jFFJDR extends javax.swing.JFrame { + + /** + * Creates new form jFFJDR + */ + public jFFJDR() { + initComponents(); + } + + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + jPChoix = new javax.swing.JPanel(); + jPInfos = new javax.swing.JPanel(); + + setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); + + javax.swing.GroupLayout jPChoixLayout = new javax.swing.GroupLayout(jPChoix); + jPChoix.setLayout(jPChoixLayout); + jPChoixLayout.setHorizontalGroup( + jPChoixLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 400, Short.MAX_VALUE) + ); + jPChoixLayout.setVerticalGroup( + jPChoixLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 200, Short.MAX_VALUE) + ); + + getContentPane().add(jPChoix, java.awt.BorderLayout.CENTER); + + javax.swing.GroupLayout jPInfosLayout = new javax.swing.GroupLayout(jPInfos); + jPInfos.setLayout(jPInfosLayout); + jPInfosLayout.setHorizontalGroup( + jPInfosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 420, Short.MAX_VALUE) + ); + jPInfosLayout.setVerticalGroup( + jPInfosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 310, Short.MAX_VALUE) + ); + + getContentPane().add(jPInfos, java.awt.BorderLayout.EAST); + + pack(); + }// //GEN-END:initComponents + + /** + * @param args the command line arguments + */ + public static void main(String args[]) { + /* Set the Nimbus look and feel */ + // + /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. + * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html + */ + try { + for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { + if ("Nimbus".equals(info.getName())) { + javax.swing.UIManager.setLookAndFeel(info.getClassName()); + break; + } + } + } catch (ClassNotFoundException ex) { + java.util.logging.Logger.getLogger(jFFJDR.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } catch (InstantiationException ex) { + java.util.logging.Logger.getLogger(jFFJDR.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } catch (IllegalAccessException ex) { + java.util.logging.Logger.getLogger(jFFJDR.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } catch (javax.swing.UnsupportedLookAndFeelException ex) { + java.util.logging.Logger.getLogger(jFFJDR.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } + // + + /* Create and display the form */ + java.awt.EventQueue.invokeLater(new Runnable() { + public void run() { + new jFFJDR().setVisible(true); + } + }); + } + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JPanel jPChoix; + private javax.swing.JPanel jPInfos; + // End of variables declaration//GEN-END:variables +} diff --git a/JDR/src/jeuderole/JeuDeRolePolymorphisme.java b/JDR/src/jeuderole/JeuDeRolePolymorphisme.java new file mode 100644 index 0000000..8fe62cb --- /dev/null +++ b/JDR/src/jeuderole/JeuDeRolePolymorphisme.java @@ -0,0 +1,47 @@ +/* + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Main.java to edit this template + */ +package jeuderole; + +import metier.*; + +/** + * Test Classe Jeu + * @author famille Thevenot + */ +public class JeuDeRolePolymorphisme { + + /** + * @param args the command line arguments + */ + public static void main(String[] args) { + Personnage Jinx = new Voleur("Jinx", "Jinx.jpg", 2, 4, "Poignard"); + Personnage Ekko = new Guerrier("Ekko", "Ekko.jpg", 6, 4, "Hache"); + + + Enigme[] enigmes1 = { + new Enigme("Qu’est ce qui est plus grand que la Tour Eiffel, mais infiniment moins lourd ?","ombre"), + new Enigme("Girafe = 3, Éléphant = 3, Hippopotame = 5, Lion = … ?","2"), + new Enigme("Qu'est-ce qui commence la nuit et termine le matin ?","n"), + new Enigme("Qu'est-ce qui fait le tour de la maison sans bouger ?","mur") + }; + + Personnage Mel = new Sorcier("Mel", "Mel.jpg", 10, 5, "De laurier", enigmes1); + Personnage[] persos = { + Jinx, Ekko, Mel + }; + + System.out.println(Jinx.getNom()+"\nHP: "+Jinx.getDureeVie()+"\nEP: "+Jinx.getEnergie()); + Jinx.varierDureeVie(5); + Jinx.varierEnergie(-10); + System.out.println(Jinx.getNom()+"\nHP: "+Jinx.getDureeVie()+"\nEP: "+Jinx.getEnergie()); + Jinx.varierDureeVie(-5); + Jinx.varierEnergie(10); + System.out.println(Jinx.getNom()+"\nHP: "+Jinx.getDureeVie()+"\nEP: "+Jinx.getEnergie()); + + Mel.rencontrer(Jinx); + Jinx.rencontrer(Mel); + } + +} diff --git a/JDR/src/metier/Enigme.java b/JDR/src/metier/Enigme.java new file mode 100644 index 0000000..5e59a12 --- /dev/null +++ b/JDR/src/metier/Enigme.java @@ -0,0 +1,27 @@ +/* + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template + */ +package metier; + +/** + * + * @author steve.maingana + */ +public class Enigme { + private String question; + private String reponse; + + public Enigme(String question, String reponse) { + this.question = question; + this.reponse = reponse; + }; + + public String getQuestion() { + return question; + } + + public String getReponse() { + return reponse; + } +} diff --git a/JDR/src/metier/Guerrier.java b/JDR/src/metier/Guerrier.java new file mode 100644 index 0000000..b4c8772 --- /dev/null +++ b/JDR/src/metier/Guerrier.java @@ -0,0 +1,137 @@ +package metier; +import java.util.Objects; +import javax.swing.Icon; +import javax.swing.JOptionPane; + +/** + * Classe Guerrier, hérite de la classe Personnage + * @author Dominique_2 + * @version 20170115 + */ +public class Guerrier extends Personnage{ + // Variable membre + private String arme; + + /** + * Valorisation des variables membres + * @param nom nom du guerrier + * @param img nom de l'image représentant le guerrier + * @param energie valeur énergétique du guerrier + * @param dureeVie durée de vie du guerrier + * @param arme armu du guerrier + */ + public Guerrier(String nom, String img, int energie, int dureeVie, String arme) { + super(nom, img, energie, dureeVie); + this.arme = arme; + } + /** + * Permet d'obtenir les valeurs des attributs de l'objet courant + * @return liste des attributs avec leurs valeurs + */ + @Override + public String toString() { + return super.toString() + "\tArme=" + arme; + } + + @Override + public int hashCode() { + int hash = 7; + hash = super.hashCode() + (13 * hash + Objects.hashCode(this.arme)); + return hash; + } + /** + * Comparaison de l'objet courant avec l'objet passé en paramètre + * @param obj objet à comparer avec l'objet courant + * @return true : les 2 objets sont identiques, false sinon + */ + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final Guerrier other = (Guerrier) obj; + if (!Objects.equals(this.arme, other.arme)) { + return false; + } + if(!super.equals(obj)){ + return false; + } + return true; + } + + /** + * Get the value of arme + * + * @return the value of arme + */ + public String getArme() { + return arme; + } + + /** + * Set the value of arme + * + * @param arme new value of arme + */ + public void setArme(String arme) { + this.arme = arme; + } + + /** + * Initie la rencontre avec un autre personnage + * @param unPerso un Personnage + * @return Message de rencontre + */ + public String rencontrer(Personnage unPerso) { + String titre = this.getNom() + " rencontre " + unPerso.getNom() + " : Jeu de dés"; + String message = "Es-tu prêt à me combattre "+ unPerso.getNom() +" ?"; + Icon ImgDe = new javax.swing.ImageIcon(getClass().getResource("/img/des.jpg")); + JOptionPane.showMessageDialog(null, message, titre, JOptionPane.INFORMATION_MESSAGE, ImgDe); + + int Attaquant = Jeu.genererNbAleatoire(1, 100); + int Defenseur = Jeu.genererNbAleatoire(1, 100); + message = this.getNom()+": "+Attaquant+" - "+ unPerso.getNom() +": "+ Defenseur +"\n\n"; + Icon ImgVainqueur; + if (Attaquant > Defenseur) { + message += this.getNom() +" l'emporte !\n\n"; + ImgVainqueur = new javax.swing.ImageIcon(getClass().getResource("/img/"+ this.getNom() +".jpg")); + unPerso.setEnergie(unPerso.getEnergie()-2); + unPerso.setDureeVie(unPerso.getDureeVie()-1); + } else if (Defenseur > Attaquant) { + message += unPerso.getNom() +" l'emporte !\n\n"; + ImgVainqueur = new javax.swing.ImageIcon(getClass().getResource("/img/"+ unPerso.getNom() +".jpg")); + this.setEnergie(this.getEnergie()-1); + unPerso.setEnergie(unPerso.getEnergie()+2); + } else { + ImgVainqueur = null; + message += "Il y a égalité entre les parties !\n\n"; + } + message += this.getNom() +": "+ this.getDureeVie()+" - "+ unPerso.getNom() +": "+ unPerso.getDureeVie(); + + JOptionPane.showMessageDialog(null, message, titre, JOptionPane.INFORMATION_MESSAGE, ImgVainqueur); + //Icon imgPerso = new javax.swing.ImageIcon(getClass().getResource("/img/" + this.getImg())); + //JOptionPane.showMessageDialog(null, message, titre, JOptionPane.INFORMATION_MESSAGE, imgPerso); + return message; + } + + /** + * Saluer un personnage + * @param unPerso Un personnage + * @return Message de salutation + */ + @Override + public String saluer(Personnage unPerso) { + String titre = this.getNom() + " salue " + unPerso.getNom(); + String message = "Bonjour " + unPerso.getNom() + " , sauve-toi vite avant que je ne te frappe avec mon arme redoutable !"; + //JOptionPane.showMessageDialog(null, message, titre, JOptionPane.INFORMATION_MESSAGE); + Icon imgPerso = new javax.swing.ImageIcon(getClass().getResource("/img/" + this.getImg())); + JOptionPane.showMessageDialog(null, message, titre, JOptionPane.INFORMATION_MESSAGE, imgPerso); + return message; + } +} diff --git a/JDR/src/metier/Jeu.java b/JDR/src/metier/Jeu.java new file mode 100644 index 0000000..aa3280f --- /dev/null +++ b/JDR/src/metier/Jeu.java @@ -0,0 +1,172 @@ +/* + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template + */ +package metier; + +import java.util.ArrayList; +import javax.swing.JOptionPane; + +/** + * + * @author steve.maingana + */ +public class Jeu { + // Nom du jeu + private String nomJeu; + // Tableau de personnages + private Personnage[] persos; + // Equipes de jeu + private ArrayList Equipe1; + private ArrayList Equipe2; + + /** + * Création du jeu + * @param nomJeu Nom du jeu + */ + public Jeu(String nomJeu) { + this.setNomJeu(nomJeu); + this.chargerPersonnages(); + this.definirEquipes(); + } + + /** + * Représentation de la classe Jeu sous la forme d'une chaîne de caractères + * @return Chaîne de caractères + */ + public String toString() { + String envoi = ""; + envoi += "Jeu{" + "nomJeu=" + this.nomJeu + ",\n persos="; + for (int i = 0; i < this.persos.length; i++) { + envoi += this.persos[i].toString(); + envoi += ",\n"; + } + envoi += "}"; + + return envoi; + } + + + /** + * Défini le nom du jeu + * @param nomJeu Nom du jeu + */ + public void setNomJeu(String nomJeu) { + this.nomJeu = nomJeu; + } + + /** + * Défini le tableau de personnages + * @param persos Tableau de personnages + */ + public void setPersos(Personnage[] persos) { + this.persos = persos; + } + + /** + * Initialise le tableau de personnages + */ + private void chargerPersonnages() { + //création des énigmes; + Enigme[] enigmes1 = { + new Enigme("Qu’est ce qui est plus grand que la Tour Eiffel, mais infiniment moins lourd ?","ombre"), + new Enigme("Girafe = 3, Éléphant = 3, Hippopotame = 5, Lion = … ?","2"), + new Enigme("Qu'est-ce qui commence la nuit et termine le matin ?","n"), + new Enigme("Qu'est-ce qui fait le tour de la maison sans bouger ?","mur") + }; + + Enigme[] enigmes2 = { + new Enigme("Considérez la suite de chiffre suivante : 0 1 1 2 3 5 8 Quel chiffre suit le 8 ?","13"), + new Enigme("Prenez une pizza et placez-la devant vous. En combien de morceaux maximum pouvez-vous la couper en effectuant seulement six coups de couteau ?","16"), + new Enigme("C'est le jour de la paie. La poule reçoit 7 euros. L'abeille reçoit 21 euros. L'araignée reçoit 28 euros. Combien reçoit le chien ?","14"), + new Enigme("Un escargot est au fond d'un puits de 10 mètres. Chaque matin il monte de 3 mètres et chaque nuit il descend de 2 mètres. Combien de jours lui faudra-t-il pour sortir de ce puits ?","7") + }; + + Personnage[] persos = { + new Guerrier("Jayce", "Jayce.jpg", 5, 5, "Hache"), + new Guerrier("Ambresa", "Ambresa.jpg", 8, 9, "Lance"), + new Guerrier("Ekko", "Ekko.jpg", 5, 6, "Poignard"), + new Sorcier("Mel", "Mel.jpg", 6, 7, "De laurier", enigmes1), + new Sorcier("Viktor", "Viktor.jpg", 10, 5, "Hexcore", enigmes2), + new Voleur("Jinx", "Jinx.jpg", 7, 6, "Marteau") + }; + + this.setPersos(persos); + System.out.println("Personnages chargés !"); + } + + /** + * Répartit les personnages en équipes de 3 + */ + private void definirEquipes() { + for (int i = 0; i < 6; i++) { + int rollEquipe = (int) (Math.random()*2)+1; + if (rollEquipe == 1) { + if (this.Equipe1.size() == 3) { + this.Equipe2.add(this.persos[i]); + } else { + this.Equipe1.add(this.persos[i]); + } + } + } + } + + /** + * Recherche un personnage dans le tableau + * @param nom Nom du personnage + * @return S'il existe, il retourne le personnage sinon rien + */ + public Personnage rechercherPerso(String nom) { + Personnage perso = null; + boolean trouve = false; + int i = 0; + while (!trouve && i < this.persos.length) { + if (this.persos[i].getNom().equals(nom)) { + perso = this.persos[i]; + trouve = true; + } else { + i++; + } + } + + return perso; + } + + public void deroulement() { + boolean actif = true; + int tour = 1; + ArrayList DuelE1 = null; + ArrayList DuelE2 = null; + + + + do { + JOptionPane.showMessageDialog(null, "Tour "+tour, "3v3", JOptionPane.INFORMATION_MESSAGE); + + do { + Personnage hasard = this.Equipe1.get(genererNbAleatoire(0, 2)); + if (!DuelE1.contains(hasard)) { + DuelE1.add(hasard); + } + } while (DuelE1.size() < 3); + + do { + Personnage hasard = this.Equipe2.get(genererNbAleatoire(0, 2)); + if (!DuelE2.contains(hasard)) { + DuelE2.add(hasard); + } + } while (DuelE1.size() < 3); + + } while(actif); + } + + /** + * Génère un nombre aléatoire dans une intervalle + * @param min Intervalle de début + * @param max Intervalle de fin + * @return Nombre aléatoire + */ + public static int genererNbAleatoire(int min, int max) { + return min + (int)(Math.random() * ((max - min) + 1)); +} +} \ No newline at end of file diff --git a/JDR/src/metier/Personnage.java b/JDR/src/metier/Personnage.java new file mode 100644 index 0000000..af230fe --- /dev/null +++ b/JDR/src/metier/Personnage.java @@ -0,0 +1,212 @@ +package metier; +import java.util.Objects; +import javax.swing.Icon; +import javax.swing.JOptionPane; + +/** + * Classe Mère Personnage + * @author Dominique_2 + * @version 20170215 + */ +public class Personnage { + // Variables membres + private String nom; + private String img; + private int energie; + private int dureeVie; + /** + * Valorisation des variables membres + * @param nom nom du personnage + * @param img nom de l'image du personnage + * @param energie valeur énergétique + * @param dureeVie durée de vie, en année + */ + public Personnage(String nom, String img, int energie, int dureeVie) { + this.nom = nom; + this.img = img; + this.energie = energie; + this.dureeVie = dureeVie; + } + + public Personnage() { +// throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody + } + /** + * Permet d'obtenir les valeurs des attributs de l'objet courant + * @return liste des attributs avec leurs valeurs + */ + @Override + public String toString() { + return "Nom\t" + nom + "\nEnergie\t" + energie + "\nDuree de vie\t" + dureeVie + + "\n"+this.getClass().getSimpleName(); + } + + @Override + public int hashCode() { + int hash = 3; + hash = 47 * hash + Objects.hashCode(this.nom); + hash = 47 * hash + Objects.hashCode(this.img); + hash = 47 * hash + this.energie; + hash = 47 * hash + this.dureeVie; + return hash; + } + + /** + * Comparaison de l'objet courant avec l'objet passé en paramètre + * @param obj objet à comparer avec l'objet courant + * @return true : les 2 objets sont identiques, false sinon + */ + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final Personnage other = (Personnage) obj; + if (this.energie != other.energie) { + return false; + } + if (this.dureeVie != other.dureeVie) { + return false; + } + if (!Objects.equals(this.nom, other.nom)) { + return false; + } + if (!Objects.equals(this.img, other.img)) { + return false; + } + return true; + } + + /** + * Get the value of energie + * + * @return the value of energie + */ + public int getEnergie() { + return energie; + } + + /** + * Set the value of energie + * + * @param energie new value of energie + */ + public void setEnergie(int energie) { + this.energie = energie; + } + + /** + * Get the value of dureeVie + * + * @return the value of dureeVie + */ + public int getDureeVie() { + return dureeVie; + } + + /** + * Set the value of dureeVie + * + * @param dureeVie new value of dureeVie + */ + public void setDureeVie(int dureeVie) { + this.dureeVie = dureeVie; + } + + /** + * Get the value of img + * + * @return the value of img + */ + public String getImg() { + return img; + } + + /** + * Set the value of img + * + * @param img new value of img + */ + public void setImg(String img) { + this.img = img; + } + + + /** + * Get the value of nom + * + * @return the value of nom + */ + public String getNom() { + return nom; + } + + /** + * Set the value of nom + * + * @param nom new value of nom + */ + public void setNom(String nom) { + this.nom = nom; + } + + /** + * Initie la rencontre avec un autre personnage + * @param unPerso un Personnage + * @return Message de rencontre + */ + public String rencontrer(Personnage unPerso) { + String titre = this.getNom() + " rencontre " + unPerso.getNom(); + String message = "Bonjour " + unPerso.getNom() + " !"; + JOptionPane.showMessageDialog(null, message, titre, JOptionPane.INFORMATION_MESSAGE); + //Icon imgPerso = new javax.swing.ImageIcon(getClass().getResource("/img/" + this.getImg())); + //JOptionPane.showMessageDialog(null, message, titre, JOptionPane.INFORMATION_MESSAGE, imgPerso); + return message; + } + + /** + * Saluer un personnage + * @param unPerso Un personnage + * @return Message de salutation + */ + public String saluer(Personnage unPerso) { + String titre = this.getNom() + " salue " + unPerso.getNom(); + String message = "Salut " + unPerso.getNom() + " !"; + // JOptionPane.showMessageDialog(null, message, titre, JOptionPane.INFORMATION_MESSAGE); + Icon imgPerso = new javax.swing.ImageIcon(getClass().getResource("/img/" + this.getImg())); + JOptionPane.showMessageDialog(null, message, titre, JOptionPane.INFORMATION_MESSAGE, imgPerso); + return message; + } + + /** + * Varier l'énergie du personnage + * @param nb Nombre d'énergie à ajouter au personnage + */ + public void varierEnergie(int nb) { + int energie = this.getEnergie()+nb; + if (energie < 0) { + this.setEnergie(0); + } else { + this.setEnergie(energie); + } + } + + /** + * Varier la duree vie du personnage + * @param nb Nombre de vie à ajouter au personnage + */ + public void varierDureeVie(int nb) { + int dureeVie = this.getDureeVie()+nb; + if (dureeVie < 0) { + this.setDureeVie(0); + } else { + this.setDureeVie(dureeVie); + } + } +} diff --git a/JDR/src/metier/Sorcier.java b/JDR/src/metier/Sorcier.java new file mode 100644 index 0000000..a0043a0 --- /dev/null +++ b/JDR/src/metier/Sorcier.java @@ -0,0 +1,162 @@ +package metier; + +import java.util.Objects; +import javax.swing.Icon; +import javax.swing.JOptionPane; +import static javax.swing.JOptionPane.DEFAULT_OPTION; +import static javax.swing.JOptionPane.QUESTION_MESSAGE; + +/** + * + * @author Dominique_2 + */ +public class Sorcier extends Personnage { + + private String baguette; + private Enigme[] enigmes; + + public Sorcier(String nom, String img, int energie, int dureeVie, String baguette, Enigme[] enigmes) { + super(nom, img, energie, dureeVie); + this.baguette = baguette; + this.enigmes = enigmes; + } + + @Override + public int hashCode() { + int hash = 7; + hash = super.hashCode() + (73 * hash + Objects.hashCode(this.baguette)); + return hash; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final Sorcier other = (Sorcier) obj; + if (!Objects.equals(this.baguette, other.baguette)) { + return false; + } + if (!super.equals(obj)) { + return false; + } + return true; + } + + @Override + public String toString() { + return super.toString() + "\tBaguette=" + baguette + "\nNb Enigmes"; + } + + /** + * Get the value of baguette + * + * @return the value of baguette + */ + public String getBaguette() { + return baguette; + } + + public Enigme[] getEnigmes() { + return this.enigmes; + } + + public void ajouterEnigme(Enigme e) { + int tailleEnigmes = this.enigmes.length+1; + Enigme[] enigmes = new Enigme[tailleEnigmes]; + for (int i = 0; i < this.enigmes.length; i++) { + enigmes[i] = this.enigmes[i]; + } + enigmes[this.enigmes.length] = e; + + this.enigmes = enigmes; + }; + + /** + * Set the value of baguette + * + * @param baguette new value of baguette + */ + public void setBaguette(String baguette) { + this.baguette = baguette; + } + + /** + * Initie la rencontre avec un autre personnage + * @param unPerso un Personnage + * @return Message de rencontre + */ + public String rencontrer(Personnage unPerso) { + // Message de défi à l'adversaire + String titre = this.getNom() + " rencontre " + unPerso.getNom() + " : Enigme"; + String message = "Es-tu prêt à me combattre "+ unPerso.getNom() +" ?\n\nJeu d'énigme"; + + // Icone du jeu d'énigme à afficher + Icon iEnigme = new javax.swing.ImageIcon(getClass().getResource("/img/adj_1.jpg")); + + // Envoi du message et de l'icone dans une boite de dialogue + JOptionPane.showMessageDialog(null, message, titre, JOptionPane.INFORMATION_MESSAGE, iEnigme); + + + // Numéro d'énigme aléatoire + int idQuestion = Jeu.genererNbAleatoire(0, this.enigmes.length-1); + + // Message de choix du PFC + String question = this.enigmes[idQuestion].getQuestion(); + String reponseVrai = this.enigmes[idQuestion].getReponse(); + + message = question; + // Choix du joueur avec des boutons + String reponse = (String) JOptionPane.showInputDialog(null, message, titre, QUESTION_MESSAGE, null, null, null); + + // Comparaison des choix pour définir un vainqueur + message = "Ma question: "+ question +"\nTa réponse: "+ reponse +"\nLa réponse: "+ reponseVrai +"\n\n"; + + // Prendra en valeur l'image du vainqueur si vainqueur, il y a + Icon ImgVainqueur; + + if (!reponse.equals(reponseVrai)) { // Si this Voleur gagne + // Message de victoire + message += this.getNom() +" l'emporte !\n\n"; + ImgVainqueur = new javax.swing.ImageIcon(getClass().getResource("/img/"+ this.getNom() +".jpg")); + + // Ajout d'un point d'énergie au Voleur + unPerso.setDureeVie(unPerso.getDureeVie()-2); + } else { // Si l'autre combattant gagne + // Message de victoire + message += unPerso.getNom() +" l'emporte !\n\n"; + ImgVainqueur = new javax.swing.ImageIcon(getClass().getResource("/img/"+ unPerso.getNom() +".jpg")); + + // Retrait d'un point d'énergie au Voleur + unPerso.setEnergie(this.getEnergie()+2); + } + + // Message d'information sur les vies de chaque partie + message += this.getNom() +": "+ this.getDureeVie()+" - "+ unPerso.getNom() +": "+ unPerso.getDureeVie(); + + // Envoi du message et de l'icone dans une boîte du dialogue + JOptionPane.showMessageDialog(null, message, titre, JOptionPane.INFORMATION_MESSAGE, ImgVainqueur); + return message; + } + + /** + * Saluer un personnage + * @param unPerso Un personnage + * @return Message de salutation + */ + @Override + public String saluer(Personnage unPerso) { + String titre = this.getNom() + " salue " + unPerso.getNom(); + String message = "Bonjour " + unPerso.getNom() + ", je t'ai jeté un sort, tu es désormais sous ma dépendance !"; + //JOptionPane.showMessageDialog(null, message, titre, JOptionPane.INFORMATION_MESSAGE); + Icon imgPerso = new javax.swing.ImageIcon(getClass().getResource("/img/" + this.getImg())); + JOptionPane.showMessageDialog(null, message, titre, JOptionPane.INFORMATION_MESSAGE, imgPerso); + return message; + } +} diff --git a/JDR/src/metier/Voleur.java b/JDR/src/metier/Voleur.java new file mode 100644 index 0000000..3980b52 --- /dev/null +++ b/JDR/src/metier/Voleur.java @@ -0,0 +1,189 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package metier; + +import java.util.Objects; +import javax.swing.Icon; +import javax.swing.JOptionPane; +import static javax.swing.JOptionPane.DEFAULT_OPTION; +import static javax.swing.JOptionPane.QUESTION_MESSAGE; + +/** + * + * @author Dominique_2 + */ +public class Voleur extends Personnage{ + + private String outil; + private String [] outils={"Pierre","Feuille","Ciseaux"}; + + public Voleur(String nom, String img, int energie, int dureeVie, String outil) { + super(nom, img, energie, dureeVie); + this.outil = outil; + //this.butin = butin; + } + + @Override + public int hashCode() { + int hash = 7; + hash = super.hashCode() + (29 * hash + Objects.hashCode(this.outil)); + return hash; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final Voleur other = (Voleur) obj; + if (!Objects.equals(this.outil, other.outil)) { + return false; + } + if (!super.equals(obj)) { + return false; + } + return true; + } + + @Override + public String toString() { + return super.toString() + "\t Outil=" + outil + "\nButin="; + } + + /** + * Get the value of outil + * + * @return the value of outil + */ + public String getOutil() { + return outil; + } + + /** + * Set the value of outil + * + * @param outil new value of outil + */ + public void setOutil(String outil) { + this.outil = outil; + } + + public String[] getOutils() { + return outils; + } + + public void setOutils(String[] outils) { + this.outils = outils; + } + + private int jeuPFC(String J1, String J2) { + if (J1 == "Pierre" && J2 == "Feuille") { + return -1; + } else if (J1 == "Feuille" && J2 == "Pierre") { + return 1; + } else if (J1 == "Feuille" && J2 == "Ciseaux") { + return -1; + } else if (J1 == "Ciseaux" && J2 == "Feuille") { + return 1; + } else if (J1 == "Ciseaux" && J2 == "Pierre") { + return -1; + } else if (J1 == "Pierre" && J2 == "Ciseaux") { + return 1; + } else { + return 0; + } + } + + /** + * Initie la rencontre avec un autre personnage + * @param unPerso un Personnage + * @return Message de rencontre + */ + public String rencontrer(Personnage unPerso) { + // Message de défi à l'adversaire + String titre = this.getNom() + " rencontre " + unPerso.getNom() + " : Pierre Feuille Ciseaux"; + String message = "Es-tu prêt à me combattre "+ unPerso.getNom() +" ?"; + + // Icone de PFC à afficher + Icon iPFC = new javax.swing.ImageIcon(getClass().getResource("/img/pierreFeuilleCiseaux.jpg")); + + // Envoi du message et de l'icone dans une boite de dialogue + JOptionPane.showMessageDialog(null, message, titre, JOptionPane.INFORMATION_MESSAGE, iPFC); + + // Message de choix du PFC + message = "Que choisis-tu, "+ unPerso.getNom() +" ?"; + + // Choix du joueur avec des boutons + int reponse = JOptionPane.showOptionDialog(null, message, titre, DEFAULT_OPTION, QUESTION_MESSAGE, iPFC, outils, 0); + + // Choix aléatoire du Voleur + int choixVoleur = Jeu.genererNbAleatoire(0, 2); + + // Comparaison des choix pour définir un vainqueur + int PFC = this.jeuPFC(this.outils[choixVoleur], this.outils[reponse]); + message = "Mon choix: "+ this.outils[choixVoleur] +" - Ton choix: "+ this.outils[reponse] +"\n\n"; + + // Prendra en valeur l'image du vainqueur si vainqueur, il y a + Icon ImgVainqueur; + + if (PFC > 0) { // Si this Voleur gagne + // Message de victoire + message += this.getNom() +" l'emporte !\n\n"; + ImgVainqueur = new javax.swing.ImageIcon(getClass().getResource("/img/"+ this.getNom() +".jpg")); + + // Ajout d'un point d'énergie au Voleur + this.setEnergie(this.getEnergie()+1); + + // Retrait d'un point d'énergie à l'autre combattant + unPerso.setEnergie(unPerso.getEnergie()-1); + + // Retrait d'un point de vie à l'autre combattant + unPerso.setDureeVie(unPerso.getDureeVie()-1); + } else if (PFC < 0) { // Si l'autre combattant gagne + // Message de victoire + message += unPerso.getNom() +" l'emporte !\n\n"; + ImgVainqueur = new javax.swing.ImageIcon(getClass().getResource("/img/"+ unPerso.getNom() +".jpg")); + + // Retrait d'un point d'énergie au Voleur + this.setEnergie(this.getEnergie()-1); + + // Ajout d'un point d'énergie à l'autre combattant + unPerso.setEnergie(unPerso.getEnergie()+1); + } else { + ImgVainqueur = null; + // Message d'égalité + message += "Il y a égalité entre les parties !\n\n"; + } + + // Message d'information sur les vies de chaque partie + message += this.getNom() +": "+ this.getDureeVie()+" - "+ unPerso.getNom() +": "+ unPerso.getDureeVie(); + + // Envoi du message et de l'icone dans une boîte du dialogue + JOptionPane.showMessageDialog(null, message, titre, JOptionPane.INFORMATION_MESSAGE, ImgVainqueur); + return message; + } + + /** + * Saluer un personnage + * @param unPerso Un personnage + * @return Message de salutation + */ + @Override + public String saluer(Personnage unPerso) { + String titre = this.getNom() + " salue " + unPerso.getNom(); + String message = "Bonjour " + unPerso.getNom() + ", si tu baisses ton attention, je vais te dépouiller !"; + //JOptionPane.showMessageDialog(null, message, titre, JOptionPane.INFORMATION_MESSAGE); + Icon imgPerso = new javax.swing.ImageIcon(getClass().getResource("/img/" + this.getImg())); + JOptionPane.showMessageDialog(null, message, titre, JOptionPane.INFORMATION_MESSAGE, imgPerso); + return message; + } +}