[NAO RESOLVIDO] Jogo de cliques com imagens em movimento

DÚVIDA ATUAL - Ainda sem resolução…

Consegui implementar o clique na imagem. Agora preciso que o jogo aconteça em “fases”, ou seja, o jogo consistiria assim:

  1. Primeira imagem passa em movimento na tela;
  2. Usuário deve clicar na imagem, então:
    2.1) Caso o usuário consiga clicar antes de a imagem chegar ao final da tela, o sistema deve parar momentâneamente, apresentar na tela um texto e então passar ao item 3.
    2.2) Caso o usuário não consiga clicar na imagem antes de ela chegar ao final da tela, o sistema apresenta na tela um outro texto e então passa ao item seguinte;
  3. A segunda imagem passa em movimento na tela e segue o item 2 para ela;
  4. E assim segue o jogo até que tenham passado na tela todas as imagens.

Não sei como dividir dessa forma o código. Segue abaixo o que já consegui fazer. Mas no meu exemplo, as duas imagens se movimentam juntas. :confused:

Desde já fico agradecido pela ajuda!


package gradue_poo;

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
        
public class Principal extends JFrame {
    
    double anos=0.0;
    int concluido[] = new int[54];
    
    JLabel r0 = new JLabel(new ImageIcon(getClass().getResource("r0.png")));
    JLabel r1 = new JLabel(new ImageIcon(getClass().getResource("r0.png")));

    public Principal(){
        editarJanela();
        new Movimento().start();
    }
    
    public void editarJanela(){
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(600,400);
        setLocationRelativeTo(null);
        setVisible(true);
        setLayout(null);
        
        r0.setBounds(-100,150,100,100);
        add(r0);
        r1.setBounds(-100,50,100,100);
        add(r1);
    }
    
    public class Movimento extends Thread{
        public void run(){
            while(true){
                try{sleep(20);}catch(Exception erro){}
                if(r0.getX()<600 && concluido[0]!=1){
                    r0.setBounds(r0.getX()+5,150,100,100);
                    r0.addMouseListener(new MouseListener(){

                        @Override
                        public void mouseClicked(MouseEvent e) {
                            anos += 0.075;
                            r0.setBounds(600,150,100,100);
                            concluido[0]=1;
                        }

                        @Override
                        public void mousePressed(MouseEvent e) {}
                        @Override
                        public void mouseReleased(MouseEvent e) {}
                        @Override
                        public void mouseEntered(MouseEvent e) {}
                        @Override
                        public void mouseExited(MouseEvent e) {}
                    });
                }
                if(r1.getX()<600 && concluido[1]!=1){
                    r1.setBounds(r1.getX()+10,150,100,100);
                    r1.addMouseListener(new MouseListener(){

                        @Override
                        public void mouseClicked(MouseEvent e) {
                            anos += 0.075;
                            r1.setBounds(600,150,100,100);
                            concluido[1]=1;
                        }

                        @Override
                        public void mousePressed(MouseEvent e) {}
                        @Override
                        public void mouseReleased(MouseEvent e) {}
                        @Override
                        public void mouseEntered(MouseEvent e) {}
                        @Override
                        public void mouseExited(MouseEvent e) {}
                    });
                }
            }
        }
    }
            
    public static void main(String[] args) {
        new Principal();
    }
}

====================================
POSTAGEM ORIGINAL

Olá pessoal, bom dia!

Estou fazendo um programa, onde até agora consegui fazer uma imagem “correr” pela tela. Agora eu preciso que enquanto ela estiver correndo, caso o usuário consiga clicar nela, eu guarde em uma variável uma pontuação. Porque depois pretendo criar outras imagens “correndo” e cada vez que o usuário conseguir clicar na imagem, essa pontuação vai aumentando. Como posso implementar isso? Segue abaixo o código que tenho até agora:

package gradue_poo;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
        
public class Principal extends JFrame {
    
    JLabel r1 = new JLabel(new ImageIcon(getClass().getResource("r1.png")));

    public Principal(){
        editarJanela();
        new Movimento().start();
    }
    
    public void editarJanela(){
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(600,400);
        setLocationRelativeTo(null);
        setVisible(true);
        setLayout(null);
        
        r1.setBounds(-100,300,100,100);
        add(r1);
    }
    
    public class Movimento extends Thread{
        public void run(){
            while(true){
                try{sleep(20);}catch(Exception erro){}
                if(r1.getX()<600){
                    r1.setBounds(r1.getX()+5,150,100,100);
                }
            }
        }
    }
            
    public static void main(String[] args) {
        new Principal();
    }
}

No seu caso, um OnClickListener no JLabel.

Mas idealmente, desenho em um JPanel e confira a colisão com a area no OnClick do JPanel.

Dica: www.pontov.com.br

[quote=Marky.Vasconcelos]No seu caso, um OnClickListener no JLabel.

Mas idealmente, desenho em um JPanel e confira a colisão com a area no OnClick do JPanel.

Dica: www.pontov.com.br[/quote]

Olá amigo, muito obrigado pela ajuda. Consegui implementar o clique na imagem. Agora preciso que o jogo aconteça em “fases”, ou seja, o jogo consistiria assim:

  1. Primeira imagem passa em movimento na tela;
  2. Usuário deve clicar na imagem, então:
    2.1) Caso o usuário consiga clicar antes de a imagem chegar ao final da tela, o sistema deve parar momentâneamente, apresentar na tela um texto e então passar ao item 3.
    2.2) Caso o usuário não consiga clicar na imagem antes de ela chegar ao final da tela, o sistema apresenta na tela um outro texto e então passa ao item seguinte;
  3. A segunda imagem passa em movimento na tela e segue o item 2 para ela;
  4. E assim segue o jogo até que tenham passado na tela todas as imagens.

Não sei como dividir dessa forma o código. Segue abaixo o que já consegui fazer. Mas no meu exemplo, as duas imagens se movimentam juntas. :confused:

Desde já fico agradecido pela ajuda!


package gradue_poo;

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
        
public class Principal extends JFrame {
    
    double anos=0.0;
    int concluido[] = new int[54];
    
    JLabel r0 = new JLabel(new ImageIcon(getClass().getResource("r0.png")));
    JLabel r1 = new JLabel(new ImageIcon(getClass().getResource("r0.png")));

    public Principal(){
        editarJanela();
        new Movimento().start();
    }
    
    public void editarJanela(){
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(600,400);
        setLocationRelativeTo(null);
        setVisible(true);
        setLayout(null);
        
        r0.setBounds(-100,150,100,100);
        add(r0);
        r1.setBounds(-100,50,100,100);
        add(r1);
    }
    
    public class Movimento extends Thread{
        public void run(){
            while(true){
                try{sleep(20);}catch(Exception erro){}
                if(r0.getX()<600 && concluido[0]!=1){
                    r0.setBounds(r0.getX()+5,150,100,100);
                    r0.addMouseListener(new MouseListener(){

                        @Override
                        public void mouseClicked(MouseEvent e) {
                            anos += 0.075;
                            r0.setBounds(600,150,100,100);
                            concluido[0]=1;
                        }

                        @Override
                        public void mousePressed(MouseEvent e) {}
                        @Override
                        public void mouseReleased(MouseEvent e) {}
                        @Override
                        public void mouseEntered(MouseEvent e) {}
                        @Override
                        public void mouseExited(MouseEvent e) {}
                    });
                }
                if(r1.getX()<600 && concluido[1]!=1){
                    r1.setBounds(r1.getX()+10,150,100,100);
                    r1.addMouseListener(new MouseListener(){

                        @Override
                        public void mouseClicked(MouseEvent e) {
                            anos += 0.075;
                            r1.setBounds(600,150,100,100);
                            concluido[1]=1;
                        }

                        @Override
                        public void mousePressed(MouseEvent e) {}
                        @Override
                        public void mouseReleased(MouseEvent e) {}
                        @Override
                        public void mouseEntered(MouseEvent e) {}
                        @Override
                        public void mouseExited(MouseEvent e) {}
                    });
                }
            }
        }
    }
            
    public static void main(String[] args) {
        new Principal();
    }
}

Da uma olhada nesse exemplo de jogo em Java que fiz:

[quote=Marky.Vasconcelos]Da uma olhada nesse exemplo de jogo em Java que fiz:

https://github.com/MarkyVasconcelos/TDGame[/quote]

Infelizmente, ou felizmente, seu jogo têm os códigos muito complicado para o meu nível. A meu ver é um “Java Avançado” e eu gostaria de criar o jogo de forma simples, o jogo é simples, usando conceitos básicos. Mas agradeço muitíssimo pela contribuição!

Estou ansioso para ver se tem alguém que possa me orientar pelo básico passo a passo… :confused: