Quiero un ejemplo mas que nada sencillo, porque en una materia de la universidad nos estan masacrando con esto. Tengo una semana mas, para tratar de hacer algo. Mira aqui hay algo de codigo de como pense que podrian ser los threads de los autos.
package bolaanimad;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class BolaAnimad {
public static void main(String[] args) {
JFrame frame = new CajaRebotar();
frame.show();
}
}
class CajaRebotar extends JFrame {
public CajaRebotar() {
setSize(300, 200);
setTitle("Caja Rebotar");
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
Container contentPane = getContentPane();
canvas = new JPanel();
contentPane.add(canvas, "Center");
JPanel p = new JPanel();
addButton(p, "Nueva bola", new ActionListener() {
public void actionPerformed(ActionEvent evt) {
new Animacion(canvas).start();
}
});
addButton(p, "Cerrar", new ActionListener() {
public void actionPerformed(ActionEvent evt) {
canvas.setVisible(false);
System.exit(0);
}
});
contentPane.add(p, "South");
}
public void addButton(Container c, String title, ActionListener a) {
JButton b = new JButton(title);
c.add(b);
b.addActionListener(a);
}
private JPanel canvas;
}
class Animacion extends Thread {
private JPanel caja;
private static final int XSIZE = 10;
private static final int YSIZE = 10;
private int x = 0;
private int y = 0;
private int dx = 2;
private int dy = 2;
public Animacion(JPanel caja) {
this.caja = caja;
}
public void draw() {
Graphics g = caja.getGraphics();
g.fillRect(x, y, XSIZE, YSIZE);
g.dispose();
}
/* public void moveVertical(){
Graphics g = caja.getGraphics();
g.setXORMode(caja.getBackground());
g.fillRect(x, y, XSIZE, YSIZE);
Dimension d = caja.getSize();
Integer n,b;
n=0;
b=y%100;
while(n!=b)
{
y =y+ dy;
b=y%100;
if (y < 0) {
y = 0;
dy = -dy;
}
if (y + YSIZE >= d.height) {
y = d.height - YSIZE;
dy = -dy;
}
}
g.fillRect(x, y, XSIZE, YSIZE);
g.dispose();
}
public void moveHorizontal()
{
Graphics g = caja.getGraphics();
g.setXORMode(caja.getBackground());
g.fillRect(x, y, XSIZE, YSIZE);
Dimension d = caja.getSize();
Integer n,b;
n=0;
b=x%100;
while(n!=b)
{
x =x+ dx;
b=x%100;
if (x < 0) {
x = 0;
dx = -dx;
}
if (x + XSIZE >= d.width) {
x = d.width - XSIZE;
dx = -dx;
}
}
g.fillRect(x, y, XSIZE, YSIZE);
g.dispose();
}*/
public void move(int Z) {
if (!caja.isVisible()) {
return;
}
Graphics g = caja.getGraphics();
g.setXORMode(caja.getBackground());
g.fillRect(x, y, XSIZE, YSIZE);
// int Z = ((int) Math.random() * 3);
// System.out.println(Z);
/* if(Z==1)
moveHorizontal();
else
moveVertical();*/
//x =x + dx;
//y =y+ dy;
Dimension d = caja.getSize();
if(Z==0){
if (x < 0) {
x = 0;
dx = -dx;
}
if (x + XSIZE >= d.width) {
x = d.width - XSIZE;
dx = -dx;
}
g.fillRect(x, y, XSIZE, YSIZE);
g.dispose();
}
if(Z!=0){
if (y < 0) {
y = 0;
dy = -dy;
}
if (y + YSIZE >= d.height) {
y = d.height - YSIZE;
dy = -dy;
}
g.fillRect(x, y, XSIZE, YSIZE);
g.dispose();
}
g.fillRect(x, y, XSIZE, YSIZE);
g.dispose();
}
public void run() {
try {
draw();
for (int i = 1; i <= 1000; i++) {
int Z=(int)(Math.random()*2);
System.out.println(Z);
move(Z);
sleep(5);
}
} catch (InterruptedException e) {
}
}
}
Es un codigo de una pelota que se movia por todos lados, trate de hacer que se mueva aleatoriamente(de forma independiente por la pantalla). Pero no me deja girar hacia los lados... Algo asi es como estaba encarando al menos el problema de los autos... Si me pueden ayudar... Gracias.