Mam napisać program w którym pojazdy (max 12) będą stosować się do zasad ruchu drogowego na skrzyżowaniu równorzędnym, a że dopiero zacząłem przygodę z Javą to nie wiem jak utworzyć kilka obiektów i sterować nimi oddzielnie (migotają kiedy jest wywołany więcej niż 1 obiekt)
sądzę, że to przez metodę paint mi tak "migają" proszę o pomoc.
Może ktoś ma pomysł jak to przerobić, albo co z tym zrobić żeby ruszyło to dalej..
Proszę o pomoc
Dodaje paczkę plików i kod źródłowy:
Main.java:
package auto_anim;
import java.awt.Dimension;
import javax.swing.JFrame;
public class Main {
public static void main(String[] args) {
JFrame frame = new JFrame("Auto Animacja");
frame.add(new Operacje());
frame.setSize(new Dimension(407, 429));
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.show();
}
}
Operacje.java
package auto_anim;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
public final class Operacje extends JPanel implements Runnable{
Dude p;
Image img;
public Thread thread;
boolean narysowano = false;
public Operacje() {
p = new Dude();
setFocusable(true);
ImageIcon i = new ImageIcon("C:/tlo.jpg");
img = i.getImage();
start();
}
public void start(){
System.out.println("Start uruchomiono!");
if (thread == null) {
thread = new Thread(this);
thread.start();
}
}
public void stop(){
System.out.println("Stop uruchomiono!");
if (thread != null){
thread = null;
}
}
public void run() {
System.out.println("Run uruchomiono!");
while(thread != null){
repaint();
p.move();
try{
Thread.sleep((int) ((Math.random()*20)+50));
}catch(InterruptedException exc){return;}
}
}
@Override
public void paint(Graphics g) {
super.paint(g);
System.out.println("Paint uruchomiono!");
Graphics2D g2d = (Graphics2D) g;
g.setColor(Color.black);
g.drawLine(0, 150, 150, 150);
g.drawLine(0, 250, 150, 250);
g.drawLine(150, 0, 150, 150);
g.drawLine(150, 250, 150, 400);
g.drawLine(250, 150, 400, 150);
g.drawLine(250, 0, 250, 150);
g.drawLine(250, 250, 250, 400);
g.drawLine(250, 250, 400, 250);
//g2d.drawImage(img, 0, 0, null);
g2d.drawImage(p.getImage(), p.getX(), p.getY(), null);
}
}
Dude.java
package auto_anim;
import java.awt.*;
import javax.swing.*;
public class Dude {
int x, y, predkosc;
int kierunek;
private int[][] pozycja_poczatkowa = {
{212, 375},
{375, 162},
{0, 212},
{162, 0}
};
Image still;
public Dude(){
ImageIcon i = new ImageIcon("C:/obiekt.jpg");
still = i.getImage();
kierunek = (int)Math.round(Math.random()*3);
System.out.println("Kierunek to: "+ kierunek);
x = pozycja_poczatkowa[kierunek][0];
y = pozycja_poczatkowa[kierunek][1];
predkosc = Math.round((int)(Math.random()*3)+1);
}
public void move(){
System.out.println("Move uruchomiono!");
if(kierunek == 0){
y = y - predkosc ;
}else if(kierunek == 1){
x = x - predkosc ;
}else if(kierunek == 2){
x = x + predkosc ;
}else if(kierunek == 3){
y = y + predkosc ;
}
}
public int getX(){
return x;
}
public int getY(){
return y;
}
public Image getImage(){
return still;
}
}
P.S. W paczce jest folder z całym zestawem plików do importu i obrazek, który jest pobierany bezpośrednio z dysku C.