Problema com Paint

0 respostas
java
I

Pessoal eu tô com um problema que não sei mais o que fazer, sou iniciante na programação, me ajudeeem. É o seguinte, tenho que fazer esse jogo usando essas classes, porém com o metodo paint os carros não param de piscar mesmo parados

OBS: Pro jogo começar você precisa apostar em um dos carros, porém os botões só aparecem se você passar o mouse em cima. *Parte inferior da tela

Classe Principal

package Principal;

import ArrayVitorias.Vencedor;
import Desenhos.Carro;
import java.awt.Graphics;
import static javax.swing.JFrame.EXIT_ON_CLOSE;
import Desenhos.Pista;
import Exceptions.ExceptionCarro;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Serializable;
import static java.lang.Thread.sleep;
import java.util.ArrayList;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

/**
 *
 * @author Igor Mascarenhas
 */

public final class Principal extends JFrame implements Serializable {

    public void gravar(String a) {

        File arquivo = new File("Vitorias.txt");

        try {
            arquivo.createNewFile();

            FileWriter fileWriter = new FileWriter(arquivo);
            BufferedWriter escrever = new BufferedWriter(fileWriter);
            escrever.write(a);
            escrever.close();
            fileWriter.close();

        } catch (IOException ex) {
        }
    }
    
    JButton bIniciar = new JButton("Iniciar");
    JButton bParar = new JButton("Parar");
    JButton bApostar1 = new JButton("CARRO 1");
    JButton bApostar2 = new JButton("CARRO 2");
    JButton bApostar3 = new JButton("CARRO 3");

    ArrayList<Vencedor> vit = new ArrayList();
    Vencedor vcarro1 = new Vencedor();
    Vencedor vcarro2 = new Vencedor();
    Vencedor vcarro3 = new Vencedor();
    
    public void Vcarros(){       
        
       vcarro1.setCarro("Carro1");
       vcarro1.setVitorias(0);
      
       vcarro2.setCarro("Carro2");
       vcarro2.setVitorias(0);
       
       vcarro2.setCarro("Carro3");
       vcarro2.setVitorias(0);
       
    }

    public Carro carro1;
    public Carro carro2;
    public Carro carro3;
    public Pista Pista;
    byte aposta = 0;
    byte carro;
    short vitorias;

    boolean teste = true;
        

    public void botoes() {
        bIniciar.setBounds(700, 405, 100, 50);
        bParar.setBounds(840, 405, 100, 50);
        bApostar1.setBounds(30, 410, 90, 40);
        bApostar2.setBounds(150, 410, 90, 40);
        bApostar3.setBounds(270, 410, 90, 40);

        add(bIniciar);
        add(bParar);
        add(bApostar1);
        add(bApostar2);
        add(bApostar3);
    }
    public void tela() {
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.setSize(1200, 500);
        this.setLocationRelativeTo(null);
        this.setVisible(true);
        this.setLayout(null);

    }
        
    public void reset() {
        carro1.setX(40);
        carro1.setY(70);
        carro2.setX(40);
        carro2.setY(190);
        carro3.setX(40);
        carro3.setY(315);
    }


    public Principal() {
        carro1 = new Carro(40, 70, "Carro1.gif");
        carro2 = new Carro(40, 190, "Carro2.gif");
        carro3 = new Carro(40, 315, "Carro3.gif");
        Pista = new Pista(0, 30, "Pista.png");
        tela();
        botoes();
        acaoBotao();

    }

    public void acaoBotao() {
        bIniciar.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                new Movimento().start();
            }
        });

        bParar.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
               gravar(vcarro1.toString()+"  "+vcarro2.toString()+"  "+vcarro3.toString()+  "Você venceu: "+vitorias);
               System.out.println(vcarro1.getVitorias());
               System.out.println(vcarro2.getVitorias());
               System.out.println(vcarro3.getVitorias());
               System.exit(0);
            }
        });
        
        bApostar1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                aposta = 1;

            }
        });

        bApostar2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                aposta = 2;
            }
        });

        bApostar3.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                aposta = 3;
            }
        });
    }

        
        
    public void venceu(Vencedor v) {
        if (vit.contains(v)) {
            v.setVitorias(v.getVitorias() + 1);
        } else {
            v.setVitorias(v.getVitorias() + 1);
            vit.add(v);
        }
    }
	
	public static void main(String[] args) {
		new Principal();
              
	}

        
    public class Movimento extends Thread {

        public void run() {
            Random r = new Random();

            while (true) {
                try {
                    sleep(20);
                    if (aposta == 0) {
                        throw new ExceptionCarro(aposta);
                    }
                    if (carro1.getX() < 1100) {
                        carro1.moverDireita();
                        repaint();
                        if (carro1.getX() >= 1100) {
                            venceu(vcarro1);
                            if (aposta == 1) {
                                vitorias++;
                                JOptionPane.showMessageDialog(null, "VOCÊ VENCEU - Vencedor carro 1");
                                reset();

                            } else {
                                carro = 1;
                                JOptionPane.showMessageDialog(null, "Você perdeu Vencedor carro " + carro);
                                reset();

                            }
                        }
                    }
                    if (carro2.getX() < 1100) {
                        carro2.moverDireita();
                        repaint();
                        if (carro2.getX() >= 1100) {
                            venceu(vcarro2);
                            if (aposta == 2) {
                                vitorias++;
                                JOptionPane.showMessageDialog(null, "VOCÊ VENCEU - Vencedor carro 2");
                                reset();
                            } else {
                                carro = 2;
                                JOptionPane.showMessageDialog(null, "Você perdeu: Vencedor carro " + carro);
                                reset();
                            }
                        }
                    }
                    if (carro3.getX() < 1100) {
                        carro3.moverDireita();
                        repaint();
                        if (carro3.getX() >= 1100) {
                            venceu(vcarro3);
                            if (aposta == 3) {
                                vitorias++;
                                JOptionPane.showMessageDialog(null, "VOCÊ VENCEU - Vencedor carro 3");
                                reset();
                            } else {
                                carro1.setX((int) (carro1.getX() + r.nextDouble() * 10));
                                carro = 3;
                                JOptionPane.showMessageDialog(null, "Você perdeu Vencedor carro " + carro);
                                reset();

                            }
                        }
                    }

                } catch (ExceptionCarro e) {
                    JOptionPane.showMessageDialog(null, "Você precisa apostar em um dos carros");
                    break;
                } catch (Exception erro) {
                    erro.printStackTrace();
                }

            }
        }
            
        }
        
        
    public void paint(Graphics g) {
        g.drawImage(carro3.getImg(), carro3.getX(), carro3.getY(), this);
        g.drawImage(carro2.getImg(), carro2.getX(), carro2.getY(), this);
        g.drawImage(carro1.getImg(), carro1.getX(), carro1.getY(), this); 
        g.drawImage(Pista.getImg(), Pista.getX(), Pista.getY(), null);

    }


}

Classe Desenho

import java.awt.Image;
import java.awt.Toolkit;

public class Desenho {

private Image img;

private int x;

private int y;
public Image getImg() {

return img;

}
public void setImg(String path) {

this.img = Toolkit.getDefaultToolkit().createImage(path);

}
public int getX() {

return x;

}
public void setX(int x) {

this.x = x;

}
public int getY() {

return y;

}
public void setY(int y) {

this.y = y;

}

}

Classe DesenhoMovel

import java.util.Random;

public class DesenhoMovel extends Desenho

implements Runnable {

Random r = new Random();

public void run() {

this.moverDireita();

}
public void moverDireita()

{

this.setX((int) (this.getX()+ r.nextDouble()*10));

}

}

Classe Carro

import java.io.Serializable;
/**
*

  • @author Igor Mascarenhas
    */
    public class Carro extends DesenhoMovel implements Serializable {

    public Carro(){

    }

    public Carro(int x, int y, String path){
    
    super.setX(x);
    
    super.setY(y);
    
    super.setImg(path);
    
    }
    

}

Classe Pista

public class Pista extends Desenho {

public Pista() {

super();

}

public Pista(int x, int y, String path) {

super.setX(x);
  super.setY(y);
  super.setImg(path);

}

}

Criado 2 de dezembro de 2018
Respostas 0
Participantes 1