IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Mon tout premier programme. (Dites moi ce qu'il y a a optimiser et/ou a rendre plus propre)


Sujet :

avec Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Autodidacte
    Inscrit en
    Décembre 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Autodidacte

    Informations forums :
    Inscription : Décembre 2016
    Messages : 12
    Points : 14
    Points
    14
    Par défaut Mon tout premier programme. (Dites moi ce qu'il y a a optimiser et/ou a rendre plus propre)
    Salut,

    J'apprends le developpement en autodidacte depuis seulement 3 semaines et je suis entrain de faire mon tout premier programme ! Le kiff

    Pour l'instant ce n'est qu'un quizz de questions aleatoires. Cependant je compte y ajouter et modifier beaucoup de choses. Je souhaite aussi apprendre de mes erreurs concernant la propreté de mon code. C'est pourquoi j'ai besoin de vous bien que ce que j'ai fait marche impec pour le moment.

    Est-ce que des codeurs pro peuvent me dire ce que j'ai mal fait dans mon code ? Ce qui est mal optimisé et ce qui n'est pas conventionnel. (la liste risque d'être longue )

    (Et si jamais j'ai fais quelque chose de bien pour mon niveau n'hesitez pas a me le dire ça sera motivant.)

    Avant toute chose 2-3 precisions sur ce que je compte rajouter par la suite (comme ça vous pourrez me dire si je suis parti sur des bonnes bases ou si je risque d'être emmerder par la suite):

    _ Remplacer le tableau tableauQuestionsReponses par une BDD SQL (quand j'aurais appris a me servir de cette dernière) et y ajouter des milliers de questions a savoir que les questions seront des phrases et que ça ne sera pas un quizz mathematique. la table des 7 ici présent n'est qu'un essai. (Ca explique pourquoi je l'ai declarer en String)

    _ Faire un graphisme perso de la fenettre principale et des boutons.

    _ Ajouter un systeme de point (chaque bonne reponse rapportant + ou - de points en fonction du nombre d'erreurs, du temps de reponse, etc)

    _ Instaurer un classement en ligne.

    _ Un systeme de "duel" 1 joueur contre 1 joueur en ligne. Ou même de matchs par equipe.

    _ Modifier la randomisation des questions de maniere a ce que certaines questions aient + ou - de chances de resortir que d'autres selon les facilités/difficultés que l'utilisateur montre a repondre a ces questions (temps de réponse, fréquence des erreurs, etc ..)

    Et encore quelques details qui ne valent pas trop la peine d'être cités.

    Pis aussi surement d'autres idées qui me viendront par la suite.





    Voila l'integralité de mon code:

    Il y a 3 classes:

    Main:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public class MainClass {
     
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
     
    		FenetrePrincipale fenetrePrincipale = new FenetrePrincipale();
     
     
     
    	}
     
    }
    FenetrePrincipale:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Font;
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
     
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
     
    public class FenetrePrincipale {
     
    	JFrame jframePrincipale = new JFrame();
     
    	JPanel jpanel0 = new JPanel();
    	JPanel jpanel0North = new JPanel();
    	JPanel jpanel0West = new JPanel();
    	JPanel jpanel0Center = new JPanel();
    	JPanel jpanel0East = new JPanel();
    	JPanel jpanel0South = new JPanel();
     
    	JPanel jpanelQuestion = new JPanel();
    	JPanel jpanelReponses = new JPanel();
    	JPanel jpanelCorrection = new JPanel();
     
    	public static JLabel labelQuestion = new JLabel();
    	public static JLabel labelCorrection = new JLabel();
     
    	public static JButton buttonReponse1 = new JButton();
    	public static JButton buttonReponse2 = new JButton();
    	public static JButton buttonReponse3 = new JButton();
    	public static JButton buttonReponse4 = new JButton();
    	public static JButton buttonReponse5 = new JButton();
    	public static JButton buttonReponse6 = new JButton();
     
    	static String currentText = "";
    	static String currentQuestion = "";
    	static String currentValidReponse = "";
     
    	FenetrePrincipale() {
     
    		Moteur.randomQR();
     
    		jpanel0.setBackground(Color.BLUE);
    		jpanel0.setLayout(new BorderLayout());
    		jpanel0.add(jpanel0Center, BorderLayout.CENTER);
    		jpanel0.add(jpanel0North, BorderLayout.NORTH);
    		jpanel0.add(jpanel0West, BorderLayout.WEST);
    		jpanel0.add(jpanel0East, BorderLayout.EAST);
    		jpanel0.add(jpanel0South, BorderLayout.SOUTH);
     
    		jpanel0North.setPreferredSize(new Dimension(50, 50));
     
    		jpanel0West.setPreferredSize(new Dimension(50, 50));
     
    		jpanel0Center.setBackground(Color.RED);
    		jpanel0Center.setLayout(new BorderLayout());
    		jpanel0Center.add(jpanelQuestion, BorderLayout.NORTH);
    		jpanel0Center.add(jpanelReponses, BorderLayout.CENTER);
    		jpanel0Center.add(jpanelCorrection, BorderLayout.SOUTH);
     
    		jpanel0East.setPreferredSize(new Dimension(50, 50));
     
    		jpanel0South.setPreferredSize(new Dimension(50, 50));
     
    		jpanelQuestion.add(labelQuestion);
    		jpanelQuestion.setPreferredSize(new Dimension(300, 100));
     
    		jpanelReponses.setLayout(new GridLayout(2, 3));
    		jpanelReponses.add(buttonReponse1);
    		jpanelReponses.add(buttonReponse2);
    		jpanelReponses.add(buttonReponse3);
    		jpanelReponses.add(buttonReponse4);
    		jpanelReponses.add(buttonReponse5);
    		jpanelReponses.add(buttonReponse6);
     
    		jpanelCorrection.add(labelCorrection);
    		jpanelCorrection.setPreferredSize(new Dimension(300, 100));
     
    		labelQuestion.setFont(new Font("Arial", Font.PLAIN, 57));
    		labelCorrection.setFont(new Font("Arial", Font.PLAIN, 57));
     
    		// LISTENERS
    		buttonReponse1.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent event) {
     
    				currentText = buttonReponse1.getText();
    				Moteur.correction();
     
    			}
    		});
    		buttonReponse2.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent event) {
     
    				currentText = buttonReponse2.getText();
    				Moteur.correction();
    			}
    		});
    		buttonReponse3.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent event) {
     
    				currentText = buttonReponse3.getText();
    				Moteur.correction();
     
    			}
    		});
    		buttonReponse4.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent event) {
     
    				currentText = buttonReponse4.getText();
    				Moteur.correction();
    			}
    		});
    		buttonReponse5.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent event) {
     
    				currentText = buttonReponse5.getText();
    				Moteur.correction();
    			}
    		});
    		buttonReponse6.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent event) {
     
    				currentText = buttonReponse6.getText();
    				Moteur.correction();
    			}
    		});
     
    		jframePrincipale.add(jpanel0);
    		jframePrincipale.setSize(700, 600);
    		jframePrincipale.setMinimumSize(new Dimension(600,500));
    		jframePrincipale.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		jframePrincipale.setLocationRelativeTo(null);
    		jframePrincipale.setVisible(true);
    	}
     
    }
    Et Moteur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    import java.util.Random;
     
    public class Moteur {
     
    	static String[][] tableauQuestionsReponses = {
    			{"0", "7 x 0", "0", ""},
    			{"1", "7 x 1", "7", ""},
    			{"2", "7 x 2", "14",""},
    			{"3", "7 x 3", "21",""},
    			{"4", "7 x 4", "28",""},
    			{"5", "7 x 5", "35",""},
    			{"6", "7 x 6", "42",""},
    			{"7", "7 x 7", "49",""},
    			{"8", "7 x 8", "56",""},
    			{"9", "7 x 9", "63",""},
    			{"10","7 x 10","70",""},
    			{"11","7 x 11","77",""}
    	};
     
    	public static void randomQR() {
     
    		Random rand = new Random();
     
    		int rand12Question = rand.nextInt(12);
    		int rand6 = rand.nextInt(6);
    		int[] rand12Reponses = { rand.nextInt(12), rand.nextInt(12), rand.nextInt(12), rand.nextInt(12),
    				rand.nextInt(12), rand.nextInt(12) };
    		rand12Reponses[rand6] = rand12Question;
     
    		String question = tableauQuestionsReponses[rand12Question][1];
     
    		String reponse1 = tableauQuestionsReponses[(rand12Reponses[0])][2];
    		String reponse2 = tableauQuestionsReponses[(rand12Reponses[1])][2];
    		String reponse3 = tableauQuestionsReponses[(rand12Reponses[2])][2];
    		String reponse4 = tableauQuestionsReponses[(rand12Reponses[3])][2];
    		String reponse5 = tableauQuestionsReponses[(rand12Reponses[4])][2];
    		String reponse6 = tableauQuestionsReponses[(rand12Reponses[5])][2];
     
    		FenetrePrincipale.labelQuestion.setText(question);
     
    		FenetrePrincipale.buttonReponse1.setText(reponse1);
    		FenetrePrincipale.buttonReponse2.setText(reponse2);
    		FenetrePrincipale.buttonReponse3.setText(reponse3);
    		FenetrePrincipale.buttonReponse4.setText(reponse4);
    		FenetrePrincipale.buttonReponse5.setText(reponse5);
    		FenetrePrincipale.buttonReponse6.setText(reponse6);
     
    		FenetrePrincipale.currentValidReponse = tableauQuestionsReponses[rand12Question][2];
    		;
     
    	}
     
    	public static void correction() {
    		if (FenetrePrincipale.currentText.equals(FenetrePrincipale.currentValidReponse)) {
    			FenetrePrincipale.labelCorrection.setText("<html><font color='green'>Correct !</font></html>");
    			randomQR();
    		} else if (FenetrePrincipale.currentText.equals("")) {
    		} else
    			FenetrePrincipale.labelCorrection.setText("<html><font color='red'>Incorrect :(</font></html>");
    	}
    }

    Un grand Merci d'avance a ceux qui prendrons le temps de me corriger.

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2008
    Messages : 757
    Points : 572
    Points
    572
    Par défaut
    Salut !

    Félicitations ! ton code est propre

    Tu pourrais mettre plus de commentaires pour indiquer ce que fait le code. Pas à chaque ligne bien sur.

    Pour ton tableau de questions et réponses. Tu aurais pu plutôt faire le choix aléatoire de deux variables et ensuite le choix aléatoire du signe de l'opération.
    La réponse, pas la peine de la mettre dans un tableau car l'ordinateur peut calculer l'opération et si le résultat donné par le joueur est égal au résultat caclulé, alors c'est gagné.


    Tu peux aussi créer un objet Joueur. Cela t'aidera pour la suite car j'ai lu que tu souhaites qu'il y ait plusieurs joueurs.
    Dans les attributs de Joueur, tu pourrais mettre, le nom et les points.

    Autre point important : tu souhaites créer une base de données. Je te conseille de te renseigner sur la méthode MERISE de création de bases de données. Et il va te falloir apprendre du SQL. Il serait préférable, pour le début, que tu n'utilises pas de Framework comme Hibernate mais plutôt te taper les requêtes en SQL et surtout cela t'aidera à comprendre le mapping Objet <-> relationnel.

    Pour le classement en ligne, il te faudra créer une page en html, css et javascript qui appelera des services REST par exemple. Mais là tu devra faire un serveur.

    Bonne continuation !
    OS : LinuxMint 20

  3. #3
    Membre expérimenté Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Points : 1 540
    Points
    1 540
    Par défaut
    Salut,

    Pour un début c'est vraiment pas mal.
    C'est jamais très évident de faire peu de code et du code clair quand on utilise awt/swing. Néanmoins tu peux factoriser ton code en utilisant une liste de boutons plutôt que 6 variables.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    List<JButton> buttons = new LinkedList<JButton>();
    for(int i = 0; i<6; i++){
       JButton button = new JButton();
       button.addListener(...);
       ...
       ...
       buttons.add(button);
    }
    Même chose ci-dessous, il y moyen d'utiliser une boucle (for | while | do..while) au lieu de faire de gros pavés à chaque fois
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    String reponse1 = tableauQuestionsReponses[(rand12Reponses[0])][2];
    		String reponse2 = tableauQuestionsReponses[(rand12Reponses[1])][2];
    		String reponse3 = tableauQuestionsReponses[(rand12Reponses[2])][2];
    		String reponse4 = tableauQuestionsReponses[(rand12Reponses[3])][2];
    		String reponse5 = tableauQuestionsReponses[(rand12Reponses[4])][2];
    		String reponse6 = tableauQuestionsReponses[(rand12Reponses[5])][2];
     
    		FenetrePrincipale.labelQuestion.setText(question);
     
    		FenetrePrincipale.buttonReponse1.setText(reponse1);
    		FenetrePrincipale.buttonReponse2.setText(reponse2);
    		FenetrePrincipale.buttonReponse3.setText(reponse3);
    		FenetrePrincipale.buttonReponse4.setText(reponse4);
    		FenetrePrincipale.buttonReponse5.setText(reponse5);
    		FenetrePrincipale.buttonReponse6.setText(reponse6);
    Comme dis précédemment, tu peux générer tout ton tableau "tableauQuestionsReponses" en quelques lignes ( toujours dans une boucle )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    for(int index = 0; index < 10; index++){
        // {"0", "7 x 0", "0"},
        tableauQuestionsReponses[index][0] = index;
        tableauQuestionsReponses[index][1] = "7 x "+index;
        tableauQuestionsReponses[index][2] = String.valueOf(7*index);
    //....
    }
    Enfin, le point le plus important, n'utilises pas de "static" quand ce n'est pas nécessaire. Je pense à la class Moteur ici !
    Utilises plutôt une instance de moteur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    public class FenetrePrincipale {
        final Moteur monMoteur = new Moteur();
        //...
        //...
        currentText = buttonReponse2.getText();
        // A NE PAS FAIRE => Moteur.correction();
        monMoteur.correction();
    Bonne continuation !
    Il était une fois [...] Et ils vécurent heureux et eurent beaucoup d'enfants!

  4. #4
    Membre à l'essai
    Homme Profil pro
    Autodidacte
    Inscrit en
    Décembre 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Autodidacte

    Informations forums :
    Inscription : Décembre 2016
    Messages : 12
    Points : 14
    Points
    14
    Par défaut
    Merci a vous 2 ! C'est encourageant.

    Comme je l'ai dans mon post initial; le but est a terme de faire un quizz avec des phrases et des mots. Voila pourquoi j'ai choisis de tout déclarer en String. La table de 7 n'est qu'un exemple. Mais j'aurais du choisir un truc genre Questions: pays et Reponses: capitales pour que ça ne prete pas a confusion.


    Citation Envoyé par francky74 Voir le message
    Tu peux aussi créer un objet Joueur. Cela t'aidera pour la suite car j'ai lu que tu souhaites qu'il y ait plusieurs joueurs.
    Dans les attributs de Joueur, tu pourrais mettre, le nom et les points.

    Autre point important : tu souhaites créer une base de données. Je te conseille de te renseigner sur la méthode MERISE de création de bases de données. Et il va te falloir apprendre du SQL. Il serait préférable, pour le début, que tu n'utilises pas de Framework comme Hibernate mais plutôt te taper les requêtes en SQL et surtout cela t'aidera à comprendre le mapping Objet <-> relationnel.
    D'accord c'est noté. Mais par curiosité pourquoi MERISE est plus adapté a mon cas qu'autre chose ?

  5. #5
    Membre à l'essai
    Homme Profil pro
    Autodidacte
    Inscrit en
    Décembre 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Autodidacte

    Informations forums :
    Inscription : Décembre 2016
    Messages : 12
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par Ivelios Voir le message
    Enfin, le point le plus important, n'utilises pas de "static" quand ce n'est pas nécessaire. Je pense à la class Moteur ici !
    Utilises plutôt une instance de moteur :

    Problème reglé pour la classe moteur qui a maintenant ses methodes non déclarées en static.

    Par contre des que j'enleve le "static" dans la declaration de mes JButton, JLabel et String de la classe fenetrePrincipale, ça me crée une erreur dans la classe moteur.

    Qu'en est-il de ses variables de la classe fenetrePrincipale ? Faut egallement cherche une solution pour enlever le static ou c'est peine perdue/inutile ?

    (ma question parait probablement un peu bete car je n'ai pas encore vraiment compris ce que voulait dire static en Java. Malgré quelques recherches.)


    Citation Envoyé par Ivelios Voir le message
    Salut,

    Pour un début c'est vraiment pas mal.
    C'est jamais très évident de faire peu de code et du code clair quand on utilise awt/swing. Néanmoins tu peux factoriser ton code en utilisant une liste de boutons plutôt que 6 variables.
    Sympa en effet ! Par contre je vais pouvoir changer le Text d'un JButton de cette liste par la suite via ma methode randomQR d'une autre classe ? Si oui je n'ai pas trouvé comment faire.

    Après quelques modifs et en essayant d'appliqué ce que tu m'as conseillé, ne sachant pas comment changer le Text des boutons de la liste, je me retrouve coincé avec mon programme qui n'actualise plus les boutons.

    J'ai essayé un truc sans trop y croire et comme prévu ça ne marche pas. Je comprend pourquoi ça ne marche pas mais par contre je n'ai pas trouvé de solution pour que ça marche lol.

    Voici le code (j'ai egallement ajouté quelques lignes au prealable pour qu'une question ne se repete pas 2 fois de suite et pour qu'il n'y ai pas 2 fois le même choix de réponse. Ca marchait impec avant que j'essaye de factoriser:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Font;
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.util.LinkedList;
    import java.util.List;
     
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
     
    public class FenetrePrincipale {
     
    	JFrame jframePrincipale = new JFrame();
     
    	JPanel jpanel0 = new JPanel();
    	JPanel jpanel0North = new JPanel();
    	JPanel jpanel0West = new JPanel();
    	JPanel jpanel0Center = new JPanel();
    	JPanel jpanel0East = new JPanel();
    	JPanel jpanel0South = new JPanel();
     
    	JPanel jpanelQuestion = new JPanel();
    	JPanel jpanelReponses = new JPanel();
    	JPanel jpanelCorrection = new JPanel();
     
    	public static JLabel labelQuestion = new JLabel();
    	public static JLabel labelCorrection = new JLabel();
     
     
     
    	static String currentText = "";
    	static String currentValidReponse = "";
     
     
    	static String[] choix = {"","","","","",""};
     
    	Moteur moteur = new Moteur();
     
    	FenetrePrincipale() {
     
    		moteur.randomQR();
     
    		List<JButton> buttons = new LinkedList<JButton>();
    		for(int i = 0; i<6; i++){
    		   JButton button = new JButton();
    			button.addActionListener(new ActionListener() {
    				public void actionPerformed(ActionEvent event) {
    					currentText = button.getText();
    					moteur.correction();
     
    				}
    			});
    			button.setText(choix[i]);
    		   buttons.add(button);
    		}
     
     
    		jpanel0.setBackground(Color.BLUE);
    		jpanel0.setLayout(new BorderLayout());
    		jpanel0.add(jpanel0Center, BorderLayout.CENTER);
    		jpanel0.add(jpanel0North, BorderLayout.NORTH);
    		jpanel0.add(jpanel0West, BorderLayout.WEST);
    		jpanel0.add(jpanel0East, BorderLayout.EAST);
    		jpanel0.add(jpanel0South, BorderLayout.SOUTH);
     
    		jpanel0North.setPreferredSize(new Dimension(50, 50));
     
    		jpanel0West.setPreferredSize(new Dimension(50, 50));
     
    		jpanel0Center.setBackground(Color.RED);
    		jpanel0Center.setLayout(new BorderLayout());
    		jpanel0Center.add(jpanelQuestion, BorderLayout.NORTH);
    		jpanel0Center.add(jpanelReponses, BorderLayout.CENTER);
    		jpanel0Center.add(jpanelCorrection, BorderLayout.SOUTH);
     
    		jpanel0East.setPreferredSize(new Dimension(50, 50));
     
    		jpanel0South.setPreferredSize(new Dimension(50, 50));
     
    		jpanelQuestion.add(labelQuestion);
    		jpanelQuestion.setPreferredSize(new Dimension(300, 100));
     
    		jpanelReponses.setLayout(new GridLayout(2, 3));
    		jpanelReponses.add(buttons.get(0));
    		jpanelReponses.add(buttons.get(1));
    		jpanelReponses.add(buttons.get(2));
    		jpanelReponses.add(buttons.get(3));
    		jpanelReponses.add(buttons.get(4));
    		jpanelReponses.add(buttons.get(5));
     
    		jpanelCorrection.add(labelCorrection);
    		jpanelCorrection.setPreferredSize(new Dimension(300, 100));
     
    		labelQuestion.setFont(new Font("Arial", Font.PLAIN, 57));
    		labelCorrection.setFont(new Font("Arial", Font.PLAIN, 27));
     
    		jframePrincipale.add(jpanel0);
    		jframePrincipale.setSize(700, 600);
    		jframePrincipale.setMinimumSize(new Dimension(600,500));
    		jframePrincipale.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		jframePrincipale.setLocationRelativeTo(null);
    		jframePrincipale.setVisible(true);
    	}
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
     
    import java.util.Random;
     
    public class Moteur {
     
    	static String[][] tableauQuestionsReponses = {
    			{"0", "7 x 0", "0", ""},
    			{"1", "7 x 1", "7", ""},
    			{"2", "7 x 2", "14",""},
    			{"3", "7 x 3", "21",""},
    			{"4", "7 x 4", "28",""},
    			{"5", "7 x 5", "35",""},
    			{"6", "7 x 6", "42",""},
    			{"7", "7 x 7", "49",""},
    			{"8", "7 x 8", "56",""},
    			{"9", "7 x 9", "63",""},
    			{"10","7 x 10","70",""},
    			{"11","7 x 11","77",""}
    	};
    	int lastQuestion = 0;
    	long timeQuestion = 0;
    	long timeReponse = 0;
    	float timeChrono = 0;
     
     
    	public void randomQR() {
     
     
    		Random rand = new Random();
     
    		int rand12Question = rand.nextInt(12);
    		while (rand12Question == lastQuestion){
    			rand12Question = rand.nextInt(12);	
    		}
    		lastQuestion = rand12Question;
    		int rand6 = rand.nextInt(6);
    		int[] rand12Reponses = { rand.nextInt(12), rand.nextInt(12), rand.nextInt(12), rand.nextInt(12),
    				rand.nextInt(12), rand.nextInt(12) };
    		rand12Reponses[rand6] = rand12Question;
     
    		String question = tableauQuestionsReponses[rand12Question][1];
     
    		String reponse1 = tableauQuestionsReponses[rand12Reponses[0]][2];
    		String reponse2 = tableauQuestionsReponses[rand12Reponses[1]][2];
    		String reponse3 = tableauQuestionsReponses[rand12Reponses[2]][2];
    		String reponse4 = tableauQuestionsReponses[rand12Reponses[3]][2];
    		String reponse5 = tableauQuestionsReponses[rand12Reponses[4]][2];
    		String reponse6 = tableauQuestionsReponses[rand12Reponses[5]][2];
     
    		while (reponse1 == reponse2 || reponse1 == reponse3 || reponse1 == reponse4 || reponse1 == reponse5 || reponse1 == reponse6) {
    			reponse1 = tableauQuestionsReponses[rand.nextInt(12)][2];
    		}
    		while (reponse2 == reponse1 || reponse2 == reponse3 || reponse2 == reponse4 || reponse2 == reponse5 || reponse2 == reponse6) {
    			reponse2 = tableauQuestionsReponses[rand.nextInt(12)][2];
    		}
    		while (reponse3 == reponse1 || reponse3 == reponse2 || reponse3 == reponse4 || reponse3 == reponse5 || reponse3 == reponse6) {
    			reponse3 = tableauQuestionsReponses[rand.nextInt(12)][2];
    		}
    		while (reponse4 == reponse1 || reponse4 == reponse2 || reponse4 == reponse3 || reponse4 == reponse5 || reponse4 == reponse6) {
    			reponse4 = tableauQuestionsReponses[rand.nextInt(12)][2];
    		}
    		while (reponse5 == reponse1 || reponse5 == reponse2 || reponse5 == reponse3 || reponse5 == reponse4 || reponse5 == reponse6) {
    			reponse5 = tableauQuestionsReponses[rand.nextInt(12)][2];
    		}
    		while (reponse6 == reponse1 || reponse6 == reponse2 || reponse6 == reponse3 || reponse6 == reponse4 || reponse6 == reponse5) {
    			reponse6 = tableauQuestionsReponses[rand.nextInt(12)][2];
    		}
     
     
     
     
    		FenetrePrincipale.labelQuestion.setText(question);
     
    		FenetrePrincipale.choix[0] = reponse1;
    		FenetrePrincipale.choix[1] = reponse2;     // C'est ici que ça coince je suppose.
    		FenetrePrincipale.choix[2] = reponse3;     // J'ai conscience que ces commandes ne servent a rien.
    		FenetrePrincipale.choix[3] = reponse4;     // Mais je ne sais pas par quoi de mieux les remplacer lol.
    		FenetrePrincipale.choix[4] = reponse5;
    		FenetrePrincipale.choix[5] = reponse6;
     
     
     
    		FenetrePrincipale.currentValidReponse = tableauQuestionsReponses[rand12Question][2];
    		;
     
    		timeQuestion = System.currentTimeMillis();
    	}
     
    	public void correction() {
     
    		timeReponse = System.currentTimeMillis();
    		timeChrono = (float)((timeReponse - timeQuestion)/1000);
     
    		if (FenetrePrincipale.currentText.equals(FenetrePrincipale.currentValidReponse)) {
    			FenetrePrincipale.labelCorrection.setText("Correct ! temps de réponse: "+ timeChrono);
    			randomQR();
    		} else if (FenetrePrincipale.currentText.equals("")) {
    		} else
    			FenetrePrincipale.labelCorrection.setText("<html><font color='red'>Incorrect :(</font></html>");	
    	}
    }

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2008
    Messages : 757
    Points : 572
    Points
    572
    Par défaut
    Yeap

    D'accord c'est noté. Mais par curiosité pourquoi MERISE est plus adapté a mon cas qu'autre chose ?
    Parce qu'avec cette méthode, tu vas pouvoir faire l'étude de ton système d'information (le jeu). Celui-ci comprend des données qui ont des types, des tailles ..., il comprend des acteurs (les joueurs par exemple), il comprend les fluxs entre les acteurs ... etc
    Cela t'aidera à créer tes objets avec leurs méthodes et leurs cycles de vie, et il y a aussi tous les schémas avec plusieurs niveaux de détail (modèle physique des données et modèle logique des donénes) ... etc.
    Cela t'aidera à mieux cerner tes besoins sans en oublier et tu aboutira à une base de données.

    Le fait de ne rien oublier ou d'en oublier le moins possible est important car on passe beaucoup de temps à rajouter des données que l'on a oublié au début.

    OS : LinuxMint 20

Discussions similaires

  1. Aidez moi pour mon premier programme
    Par ws.emine dans le forum C++
    Réponses: 23
    Dernier message: 13/12/2006, 19h58
  2. mon premier programme j2me
    Par adilo dans le forum Java ME
    Réponses: 1
    Dernier message: 14/09/2006, 08h43
  3. [JDOM] Mon premier programme java-xml
    Par adilo dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 12/07/2006, 13h12
  4. [Language] Aide sur mon premier programme Java?
    Par hash2zo dans le forum Langage
    Réponses: 15
    Dernier message: 27/09/2005, 19h26
  5. [Débutant] Mon premier programme: rien ne va...
    Par vincent0 dans le forum OpenGL
    Réponses: 10
    Dernier message: 02/08/2005, 13h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo