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

AWT/Swing Java Discussion :

Ajouter timer arrêtant le mini-jeu


Sujet :

AWT/Swing Java

  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 10
    Par défaut Ajouter timer arrêtant le mini-jeu
    Bonjour,

    Je suis actuellement en train de développer un petit jeu en Java et je rencontre un problème (ou plutôt je ne sais pas comment faire... ).
    Le principe est que le joueur doit cliquer sur un bouton le plus de fois possible en 10 secondes, puis après cela s'arrête. Ensuite si le nombre de clics est supérieur à 50 le défi est gagné sinon c'est perdu.

    Cependant, je ne vois pas comment réaliser le timer, et comment celui-ci, une fois fini (au bout des dix secondes du coup), pourrait bloquer le nombre de clics.

    Voici les deux classes du mini-programme :

    Classe MainSpamit :
    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
     
    import java.awt.Color;
    import java.awt.Container;
    import java.awt.Font;
    import java.awt.Graphics;
    import java.awt.Image;
     
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
     
    @SuppressWarnings("serial")
    class AfficheImage extends JPanel {
    	Image SpamIt;
     
    	AfficheImage(String s) {
    		SpamIt = getToolkit().getImage(s);
    	}
     
    	public void paintComponent(Graphics g) {
    		super.paintComponent(g);
    		g.drawImage(SpamIt, 0, 0, getWidth(), getHeight(), this);
    	}
    }
     
    @SuppressWarnings("serial")
    class Click extends JFrame {
    	JLabel labelAttempt;
     
    	public Click() {
     
    		setTitle("SPAM IT");
    		setContentPane(new AfficheImage("G:\\SpamIt.png"));
    		setSize(920, 600);
    		setVisible(true);
    		setDefaultCloseOperation(EXIT_ON_CLOSE);
    		Container mainContainer = getContentPane();
    		mainContainer.setLayout(null);
     
    		JLabel labelTimer = new JLabel("TIMER HERE ");
    		labelTimer.setFont(new Font("Verdana", 1, 10));
    		labelTimer.setForeground(Color.WHITE);
    		setLocationRelativeTo(null);
    		labelTimer.setSize(500, 500);
    		labelTimer.setLocation(10, 300);
     
    		labelAttempt = new JLabel("Cliquez ci-dessous pour démarrer");
    		labelAttempt.setFont(new Font("Verdana", 1, 10));
    		labelAttempt.setForeground(Color.WHITE);
    		labelAttempt.setSize(200, 20);
    		labelAttempt.setLocation(370, 200);
     
    		JButton button = new ClickCounterSpamIt();
    		button.setSize(350, 100);
    		button.setLocation(275, 235);
     
    		mainContainer.add(labelTimer);
    		mainContainer.add(labelAttempt);
    		mainContainer.add(button);
     
    	}
     
    	public static void main(String[] args) {
    		Click Game = new Click();
    	}
    }
    Classe ClickCounterSpamIt :
    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
     
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
     
    import javax.swing.JButton;
     
    @SuppressWarnings({ "serial", "restriction" })
    public class ClickCounterSpamIt extends JButton implements ActionListener {
     
    	private int nbClicks;
     
    	public ClickCounterSpamIt() {
    		this.nbClicks = 0;
    		this.addActionListener(this);
    	}
     
    	@Override
    	public void actionPerformed(ActionEvent event) {
    		this.nbClicks++;
    		this.setText("Nombre de clics: " + nbClicks);
    	}
    }
    Pourriez vous m'éclairer sur ce sujet ?
    Merci par avance

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Avec un Timer Swing, tu indiques un délai correspondant à ton temps de jeu, et tu arrêtes le timer à la fin.

    POC:
    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
    public class DemoClickButton {
     
    	private int count;
    	private Timer timer1;
    	private Timer timer2;
    	private JButton button;
    	private JLabel label;
    	private int time;
    	public DemoClickButton(JButton button, JLabel label, int time) {
    		this.button=button;
    		this.label=label;
    		this.time=time;
    		timer1 = new Timer(1000, e-> label.setText(String.valueOf(--this.time)));
    		timer2 = new Timer(time*1000, e-> finish());
    		label.setText(String.valueOf(time));
    		button.addActionListener(e-> count++);
    		timer1.start();
    		timer2.start();
    	}
     
    	private void finish() {
    		timer1.stop();
    		timer2.stop();
    		button.setEnabled(false);
    		label.setText("Nombre de clic(s) : " + count);
    	}
     
    	public static void main(String[] args) {
    		JFrame frame = new JFrame();
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    		JButton button = new JButton("Cliquez-moi encore et encore !");
    		//button.addActionListener(e-> count++);
    		JPanel panel = new JPanel(new GridBagLayout());
    		GridBagConstraints gbc = new GridBagConstraints();
    		gbc.gridx=0;
    		gbc.gridy=GridBagConstraints.RELATIVE;
    		panel.add(button,gbc);
    		JLabel label = new JLabel();
    		label.setHorizontalAlignment(JLabel.CENTER);
    		panel.add(label, gbc);
    		frame.add(panel);
     
    		frame.setSize(300, 300);
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true);
     
    		new DemoClickButton(button, label, 10);
     
    	}
     
    }
    Attention, avec un ActionListener, le joueur pourra jouer aussi au clavier, avec son écran tactile, etc.
    Au lieu d'un ActionPerformed, tu peux utiliser un MouseAdapter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    //button.addActionListener(e-> count++);
    		button.addMouseListener(new MouseAdapter() {
    			public void mouseClicked(java.awt.event.MouseEvent e) {
    				count++;
    			}
    		});
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 10
    Par défaut
    Merci, j'essaierai demain du coup ☺

  4. #4
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 10
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    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
    public class DemoClickButton {
     
    	private int count;
    	private Timer timer1;
    	private Timer timer2;
    	private JButton button;
    	private JLabel label;
    	private int time;
    	public DemoClickButton(JButton button, JLabel label, int time) {
    		this.button=button;
    		this.label=label;
    		this.time=time;
    		timer1 = new Timer(1000, e-> label.setText(String.valueOf(--this.time)));
    		timer2 = new Timer(time*1000, e-> finish());
    		label.setText(String.valueOf(time));
    		button.addActionListener(e-> count++);
    		timer1.start();
    		timer2.start();
    	}
     
    	private void finish() {
    		timer1.stop();
    		timer2.stop();
    		button.setEnabled(false);
    		label.setText("Nombre de clic(s) : " + count);
    	}
     
    	public static void main(String[] args) {
    		JFrame frame = new JFrame();
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    		JButton button = new JButton("Cliquez-moi encore et encore !");
    		//button.addActionListener(e-> count++);
    		JPanel panel = new JPanel(new GridBagLayout());
    		GridBagConstraints gbc = new GridBagConstraints();
    		gbc.gridx=0;
    		gbc.gridy=GridBagConstraints.RELATIVE;
    		panel.add(button,gbc);
    		JLabel label = new JLabel();
    		label.setHorizontalAlignment(JLabel.CENTER);
    		panel.add(label, gbc);
    		frame.add(panel);
     
    		frame.setSize(300, 300);
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true);
     
    		new DemoClickButton(button, label, 10);
     
    	}
    Bonjour,
    J'ai testé le code ci-dessus suite à votre réponse. Cependant, le compilateur me dit qu'il ne peut pas instancier le type Timer
    De plus, il me met "discouraged access: Timer is not API" à chaque ligne où "Timer" est appelé.

    Avez-vous une idée de pourquoi cela ? (cela vient-il de ma version d'eclipse par exemple ?)

    Merci encore pour votre réponse précédente!

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Je n'ai pas mis les imports dans mon exemple, parce que ce sont des imports communs et tu as dû prendre les propositions d'Eclipse qui n'étaient pas les bonnes.

    Les bons imports sont :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    import java.awt.GridBagConstraints;
    import java.awt.GridBagLayout;
    import java.awt.event.MouseAdapter;
     
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.Timer;
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #6
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 10
    Par défaut
    En effet, j'avais bien pris les imports proposés par eclipse et qui n'étaient pas les bons.

    Merci beaucoup pour votre réponse, cela fonctionne!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Mini jeu avec quelques bugs
    Par fouedou77 dans le forum C
    Réponses: 12
    Dernier message: 27/06/2009, 09h07
  2. [68000] Création mini-jeu
    Par Hiike dans le forum Autres architectures
    Réponses: 0
    Dernier message: 13/04/2009, 20h21
  3. Mini jeu de rôle en php
    Par Sh4dow49 dans le forum Projets
    Réponses: 5
    Dernier message: 23/10/2008, 16h08
  4. ajouter une action dans un jeu
    Par lolo5169 dans le forum Projets
    Réponses: 15
    Dernier message: 28/08/2006, 09h53
  5. mini jeu en construction (débutant)
    Par samy100 dans le forum C
    Réponses: 45
    Dernier message: 23/04/2006, 23h36

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