codronpa | Bonjour,
Alors je fais un programme pour un quizz sur les pays. J'ai déjà créé mes classes qui me permettent de lire un fichier texte et stocker les différentes réponses au questions tout ça dans un ArrayList. J'utilise une classe QuizzW qui est ma partie design (IHM). Dans cette classe je voudrais qu'à son ouverture un nombre aléatoire unique se crée (j'ai déjà programmé cette classe Rnd) et que l'on tire au hasard dans ma liste pour ensuite remplir les checkbox (avec les propositions correspondantes, france, ukraine, brésil par exemple), le Jpannel avec l'image associée. Ensuite quant l'on clique sur btn suivant on vérifie si la checkbox cochée est la bonne et on affiche un label de bonne ou mauvaise réponse. Je voudrais démarrer un compteur dans le bouton suivant et quant 20 questions ont été posées on n'arrête et on n'affiche le score.
L'idée serait d'appeler mes méthodes définies dans les éléments de ma liste et remplir les checkbox avec les string. Plus dur, convertir T et F en true and false pour pouvoir vérifier la réponse des gens. Et encore plus dur, comment lui dire dans un Jpannel que l'image est dans mon ArrayList et qu'il doit le lire comme une racine de fichier...???
Je vous joins les codes et classes associées.
Si quelqu'un arrive à comprendre le code et à une piste je suis preneur!
Exemple d'une ligne de mon fichier.txt : Roumanie;roumanie.png;Roumanie;T;France;F;Mali;F
Code :
- CLASSE QUESTION
- public class Question {
- private String path;
- private String check1;
- private String check2;
- private String check3;
- private String Reponse1;
- private String Reponse2;
- private String Reponse3;
- /**
- * Constructeur Question</br>
- * @param line : Lige du fichier avec laquelle on construit la question</br>
- * @return toutes les données nécessaires à une unique question</br>
- */
- public Question(String line) {
- String[] splitedLine = line.split(";" ); //Découpage en utilisant ; comme séparateur
- this.path = splitedLine[2];
- this.Reponse1 = splitedLine[3];
- this.Reponse2 = splitedLine[5];
- this.Reponse3 = splitedLine[7];
- this.check1= splitedLine[4];
- this.check2= splitedLine[6];
- this.check3= splitedLine[8];
- }
- /**
- * Utilisation des getters en raison du private sur les variables string</br>
- * Méthode réponse 1 vrai ou fausse</br>
- * @return le pays</br>
- */
- public String getcheck1() {
- return check1;
- }
- /**
- * Methode Path (drapeau)</br>
- * @return the path</br>
- */
- public String getPath() {
- return path;
- }
- /**
- * Methode Bonne reponse ou non associée à la question 2</br>
- * @return Check2</br>
- */
- public String getCheck2() {
- return check2;
- }
- /**
- * Methode Bonne reponse ou non associée à la question 3</br>
- * @return Check3</br>
- */
- public String getCheck3() {
- return check3;
- }
- /**
- * Methode réponse 1</br>
- * @return Reponse1</br>
- */
- public String getReponse1() {
- return Reponse1;
- }
- /**
- * Méthode réponse 2</br>
- * @return Reponse2</br>
- */
- public String getReponse2() {
- return Reponse2;
- }
- /**
- * Méthode de la question 3</br>
- * @return Reponse3</br>
- */
- public String getReponse3() {
- return Reponse3;
- }
- }
- CLASSE JEU
- import java.io.BufferedReader;
- import java.io.FileReader;
- import java.util.ArrayList;
- import java.util.List;
- /**
- * @author Codron Pierre-Antoine</br>
- * @author Brunet Mathias</br>
- * Code du jeu 25/02/2014</br>
- * Classe Jeu comportant la boucle principale</br>
- * Permet de lister les données (ArrayList) : pour pouvoir ensuite d'indicer la liste</br>
- * Utilisation des getters et setters pour rendre accessible les données de list question</br>
- */
- public class Jeu {
- // Cette variable doit etre definie en dehors de la main, sa portee est importante
- static int h=0;
- //Cette variable doit etre definie en dehors de la main, sa portee est importante
- static int i;
- // Score
- private static int scr=0;
- //Liste des questions
- private List<Question> listeQuestion;
- // compteur qui va nous permettre de poser 20 questions
- private static int cpt=0;
- public static int donnerscore() {
- return scr;
- }
- /**
- * Constructeur Jeu</br>
- * Permet de remplir l'array</br>
- */
- public Jeu() {
- listeQuestion = new ArrayList<Question>(); // IMPORTANT : la liste ne peut comporter que des méthodes de Question!!
- String chemin = "Questions.txt";
- try {
- BufferedReader buf = new BufferedReader(new FileReader(chemin));
- String ligne;
- while ((ligne = buf.readLine()) != null)// Découper ligne à ligne le fichier texte
- {
- Question q = new Question(ligne);
- System.out.println(q.toString());
- listeQuestion.add(q); // ajoute les éléments dans la liste des questions
- }
- buf.close();
- } catch (Exception ie) {
- ie.printStackTrace();
- }
- }
- public List<Question>getListQuestion()
- {
- return listeQuestion; // L'array liste est privée, il faut donc ajouter des getters pour récupérer la valeur de listeQuestion, la génération des getters entraînent la génération des setters que l'on peut supprimer car inutiles
- }
- }
- CLASSE NOMBRE ALEATOIRE
- public Rnd(int n, int nMax) throws ExceptionParametrageErroné
- {
- if (n > nMax)
- throw new ExceptionParametrageErroné();
- tirage = new ArrayList<Integer>(n);
- Random random = new Random();
- Date t = new Date();
- random.setSeed(t.getTime());
- // Ajout des nombres
- tirage.add(random.nextInt(nMax));
- for (int i = 1; i < n; i++)
- {
- int r = random.nextInt(nMax);
- int j = 0;
- while (j < i)
- {
- if (tirage.get(j) == r)
- {
- r = random.nextInt(nMax);
- j = 0;
- continue; // on reboucle sur le while
- }
- j++;
- }
- // nombre unique : on l'ajoute à la liste
- tirage.add(i, r);
- }
- // Initialisation de l'itérateur sur la liste
- listIterator = tirage.iterator();
- }
- /**
- * Tirage d'un nombre aléatoire
- * @return nombre aléatoire
- */
- public int next()
- {
- return listIterator.next();
- }
- /**
- * Détermine si tous les nombres ont été obtenu
- * @return vrai s'il reste un ou plusieurs nombres
- */
- public boolean hasNext()
- {
- return listIterator.hasNext();
- }
- /**
- * Réinitialise le parcours de la liste
- */
- public void reset()
- {
- listIterator = tirage.iterator();
- }
- public String toString()
- {
- return tirage.toString();
- }
- // Programme de test
- public static void main(String[] arg)
- {
- try
- {
- // Génération d'une liste de 5 nombres aléatoires uniques [0..4]
- Rnd rnd = new Rnd(5, 10);
- // Affichage avec la méthode toString
- System.out.println(rnd);
- // Affichage en balayant la liste
- while (rnd.hasNext())
- System.out.print(rnd.next()+ ", " );
- // Nouveau parcours de la liste
- rnd.reset();
- // Nouveau tirage
- rnd = new Rnd(5, 10);
- System.out.println();
- while (rnd.hasNext())
- System.out.print(rnd.next()+ ", " );
- }
- catch (ExceptionParametrageErroné e)
- {
- e.printStackTrace();
- }
- }
- }
- ET ENFIN LA CLASSE OU JE BLOQUE JEU GRAPHIQUE (la plateforme)
- import java.awt.Color;
- public class JeuW extends Jeu {
- private JFrame frame;
- private JFrame global;
- private static Rnd ramdon;
- /**
- * Create the application.
- */
- public JeuW(JFrame global)
- {
- this.global = global;
- initialize();
- frame.setVisible(true);
- }
- /**
- * Initialize the contents of the frame.
- */
- private void initialize() {
- frame = new JFrame();
- frame.setIconImage(Toolkit.getDefaultToolkit().getImage(JeuW.class.getResource("/javax/swing/plaf/metal/icons/ocean/computer.gif" )));
- frame.getContentPane().setBackground(new Color(124, 252, 0));
- frame.getContentPane().setForeground(new Color(123, 104, 238));
- frame.setBounds(100, 100, 515, 357);
- frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- frame.getContentPane().setLayout(null);
- // Rnd prend des valeurs uniques de 1 à 20, soit 20 valeurs différentes
- try {
- ramdon = new Rnd(1, 20);
- } catch (ExceptionParametrageErroné e) {
- e.printStackTrace();
- }
- // Affichage des drapeaux
- JPanel drapeaux = new JPanel();
- drapeaux.setToolTipText("" );
- drapeaux.setBounds(134, 0, 206, 134);
- frame.getContentPane().add(drapeaux);
- //JLabel image_drap = new JLabel(new ImageIcon(tab[num][2]));
- // drapeaux.add(image_drap);
- // En cas de bonne réponse affichage de ce label
- final JLabel BR = new JLabel("Bonne r\u00E9ponse" );
- BR.setForeground(new Color(50, 205, 50));
- BR.setFont(new Font("Lucida Grande", Font.PLAIN, 29));
- BR.setHorizontalAlignment(SwingConstants.CENTER);
- BR.setBounds(73, 47, 228, 44);
- frame.getContentPane().add(BR);
- BR.setVisible(false);
- // En cas de mauvaise réponse affichage de ce label
- final JLabel MR = new JLabel("Bonne r\u00E9ponse" );
- MR.setForeground(new Color(50, 205, 50));
- MR.setFont(new Font("Lucida Grande", Font.PLAIN, 29));
- MR.setHorizontalAlignment(SwingConstants.CENTER);
- MR.setBounds(73, 47, 228, 44);
- frame.getContentPane().add(MR);
- MR.setVisible(false);
- // Label pour afficher la question
- final JLabel Question = new JLabel("Quelle est le pays correspondant \u00E0 ce drapeau?" );
- Question.setForeground(Color.BLUE);
- Question.setVerticalAlignment(SwingConstants.TOP);
- Question.setFont(new Font("Dialog", Font.BOLD, 16));
- Question.setHorizontalAlignment(SwingConstants.CENTER);
- Question.setBackground(Color.WHITE);
- Question.setBounds(36, 156, 416, 35);
- frame.getContentPane().add(Question);
- // Checkbox réponse 1
- final JCheckBox Rep1 = new JCheckBox("New check box" );
- Rep1.setBackground(new Color(127, 255, 0));
- Rep1.setBounds(135, 198, 97, 23);
- frame.getContentPane();
- Rep1.setBorderPainted(false);
- Rep1.setContentAreaFilled(false);
- Rep1.setFocusPainted(false);
- // Checkbox réponse 2
- final JCheckBox Rep2 = new JCheckBox("New check box" );
- Rep2.setBackground(new Color(127, 255, 0));
- Rep2.setBounds(135, 233, 97, 23);
- frame.getContentPane().add(Rep2);
- Rep1.setBorderPainted(false);
- Rep1.setContentAreaFilled(false);
- Rep1.setFocusPainted(false);
- // Checkbox réponse 3
- final JCheckBox Rep3 = new JCheckBox("New check box" );
- Rep3.setBackground(new Color(127, 255, 0));
- Rep3.setBounds(135, 267, 97, 23);
- frame.getContentPane().add(Rep3);
- Rep1.setBorderPainted(false);
- Rep1.setContentAreaFilled(false);
- Rep1.setFocusPainted(false);
- //Bouton continuer pour passer à la question suivante
- final JButton Bsuivant = new JButton("Continuer" );
- Bsuivant.setForeground(new Color(0, 0, 0));
- Bsuivant.setIcon(null);
- Bsuivant.setBackground(new Color(127, 255, 0));
- Bsuivant.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent arg0) {
- Bsuivant.setEnabled(false);
- MR.setVisible(false);
- BR.setVisible(false);
- Question.setVisible(true);
- // On reinitialize après chaque réponse les checkbox à l'état vide
- Rep1.setEnabled(true);
- Rep2.setEnabled(true);
- Rep3.setEnabled(true);
- Rep1.setSelected(true);
- Rep2.setSelected(true);
- Rep3.setSelected(true);
- }
- });
- Bsuivant.setBounds(409, 278, 80, 30);
- frame.getContentPane().add(Bsuivant);
- Bsuivant.setVisible(true);
- // Bouton pour accéder à l'aide
- JButton btnNewButtonSuivant = new JButton("" );
- btnNewButtonSuivant.setForeground(new Color(127, 255, 0));
- btnNewButtonSuivant.setIcon(new ImageIcon(JeuW.class.getResource("/com/sun/java/swing/plaf/windows/icons/Question.gif" )));
- btnNewButtonSuivant.setBackground(new Color(127, 255, 0));
- btnNewButtonSuivant.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent arg0) {
- frame.setVisible(false);
- Aide_durant_jeu j = new Aide_durant_jeu(frame);
- }
- });
- btnNewButtonSuivant.setBounds(10, 11, 80, 30);
- frame.getContentPane().add(btnNewButtonSuivant);
- }
- }
|
|