CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[JAVA] Gui et jeu min/max

coquine_93
coquine_93
Niveau 7
18 avril 2017 à 00:45:58

Salut [[sticker:p/1kkr]]

Je suis entrain de programmer un simple jeu en java : où on doit appuyer sur min ou max boutons en fonction d'un random.
ce qui doit ressembler à cela :
https://image.noelshack.com/fichiers/2017/16/1492468878-capture-d-ecran-2017-04-17-a-23-43-50.png

J'ai pour l'instant 2 classes : une qui se charge du GUI et une autre de la partie "calcul" :



package samenumber;

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

/**
 *
 * @author androunie
 */
public class HigherLowerUI extends JFrame{

    private JLabel label;
    protected JTextField txt1;
    private JTextField txt2;
    private JButton btnLower = new JButton("LOWER");
    private JButton btnField = new JButton();
    private JButton btnHigher= new JButton("HIGHER");
  
        
    public HigherLowerUI() {
        super("Higher Lower");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setLocationRelativeTo(null);
        this.setSize(400, 400);

        
        JPanel panelData = new JPanel();
        panelData.add(new JLabel("Score :"));
        panelData.add(new JTextField(10));
        panelData.add(new JTextField(10));
        
        panelData.add(btnLower);
        panelData.add(btnField);
        panelData.add(btnHigher);
        
        
        panelData.setLayout(new GridLayout(2,3));
        
        pack();
        this.setVisible(true);
        this.setLayout(new GridLayout(2,2));
        this.getContentPane().add(panelData);
    }
    
    public void update(int score, int number, String makeGuess) {
        
    }
    
    public static void main(String[] args) {
        HigherLowerModel hlm = (HigherLowerModel) new HigherLower();
        HigherLowerUI hlui = new HigherLowerUI();
    }
    
    public class event implements ActionListener {

    @Override
    public void actionPerformed(ActionEvent e) {
        
        String option = e.getActionCommand();
    }
    
}
}

////////////////////////////////////////////


package samenumber;


import java.util.Random;

 public class HigherLower implements HigherLowerModel{
    private int number;
    private int score ;
    private Random rand;
    private HigherLowerUI ui;
    private static final int MAX = 20;

    
    enum Guess {HIGHER, LOWER, NUMBER};

    public HigherLower() {
        rand = new Random(); 
        newNumber();
        score = 0;
    }
    
    
    public void setUI(HigherLowerUI ui) {
        this.ui = ui;
        ui.update(score, number, "make a guess!");
    }
    
    
    
    private Guess newNumber() {
        int n = rand.nextInt(MAX);
        Guess result;
        if (n == number) 
            result = Guess.NUMBER;
        
        else if (n > number) 
            result = Guess.HIGHER;
        
        else 
            result = Guess.LOWER;
        number = n;
        
        return result;
        
    }
    
    
    public void makeGuess(Guess user) {
        Guess actual;
        
        actual = newNumber();
        if (user == actual) {
            correct();
        }
        else {
            incorrect();
        }
    }
    
    
    private void correct() {
        score++;
    }
    
    
    private void incorrect() {
        score--;
    }
}

Je bloque sur le action listener... Comment je peux lier toutes ces deux classes de façon à faire fonctionner le jeu ?
Merci d'avance à vous [[sticker:p/1kkh]]

SweetyWin
SweetyWin
Niveau 28
18 avril 2017 à 11:10:34

Pour rester simple j'aurais mis un objet HighLower en paramètre de ta classe HigherLowerUI,

et après dans le constructeur tu peux faire :

tonbutton.addActionListener(new ActionListener() {

   public void actionPerformed(ActionEvent e)
    {
       tonObjetHigher.taMethode();
    }
}); 

Je suis pas sur que c'est le plus opti mais ça devrait marcher.

Message édité le 18 avril 2017 à 11:15:25 par SweetyWin
coquine_93
coquine_93
Niveau 7
18 avril 2017 à 12:27:57

Tu entends quoi par mon objet higher ?
merci de ta réponse

SweetyWin
SweetyWin
Niveau 28
18 avril 2017 à 13:29:26

Un objet de ta deuxième classe que tu passes en pramètres de ta première.

Style :
public class HigherLowerUI extends JFrame{ private HigherLower higher public HigherLowerUI() { super("Higher Lower"); this.higher = new HigherLower(); } }

et après dans le listener tu peux appeler les méthodes de ta classe higher
par exemple:

higher.correct();

edit: c'est moi ou elles sont moisis les balises codes ? j'arrive rien à faire avec :hap:

Message édité le 18 avril 2017 à 13:32:34 par SweetyWin
SweetyWin
SweetyWin
Niveau 28
18 avril 2017 à 13:41:12

Bon en fait je crois que je t'embrouille ma réponse est pas vraiment adapté à ta structure de code, mais la manière de définir le listener est bonne après à toi de voir quel event tu veux y mettre quand que tu cliques dessus.
Et vu que tu as un UI dans ta classe HigherLower tu dois pouvoir récuperer les boutons dans cette classe avec des méthodes gets sur les boutons et faire addListener dans la classe HigherLower, à toi de voir ce qui t'arranges.

Message édité le 18 avril 2017 à 13:42:12 par SweetyWin
coquine_93
coquine_93
Niveau 7
18 avril 2017 à 15:38:39

Je suis complètement perdu je dois avouer...
--> Mon action listener je n'arrive à avoir aucune field de mon Higher Lower donc je ne peux pas intéragir : exemple = j'appuie sur le bouton higher, il fait un test pour savoir si le random est égal/plus petit/ plus grand. Comment l'implémenter ?
--> Comment je peux displayer mon current number dans le bouton du mileu ?

--> Si je veux display le score : je dois accéder à la méthode correct/incorrect de ma classe Higher Lower.. donc même pb pour accéder...

--> enfin si dans mon action listener je cherche à utiliser mon instance de la classe Higher Lower : j'ai une erreur...

Merci du temps que tu passes à m'aider [[sticker:p/1lmh]]

SweetyWin
SweetyWin
Niveau 28
18 avril 2017 à 16:46:50

Je pense que créer ton HigherLower dans ton main est pas une bonne idée, de plus tu crée aussi le UI ici mais ton HigherLower en possède un en paramètre mais pas en argument de son constructeur.
T'as bien une méthode set(UI) mais je te vois pas l'utiliser, du coup tu as deux UI et celui qui est affiché est jamais relié avec ton HigherLower.

Du coup j'essayerais de jarter l'UI du HigherLower, mettre un HigherLower en paramètre de l'UI que tu définis dans son constructeur. Comme ça quand le main lance l'UI tu as un HigherLower avec.

Dans les listeners que tu définis plus haut dans le constructeur de l'UI, selon les boutons, tu éxécutes les méthodes de ton HigherLower, récupère les résultats et en fonctions modifie les JTextfields correspondant avec jtextfield.setText(String n).

Désolé j'ai pas d'IDE Java sous la main là alors je regarde un peu de tête. J'espère être assez clair.

Sous forums
  • Aide à l'achat Mac
  • Internet
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment