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);}
}