/* <APPLET code="UnivThreadParticle.class" width=600 height=600> </APPLET> */ import java.awt.*; import java.applet.*; import java.util.*; class Particle extends Thread { String name; int pos[] = new int[2]; int dot[] = new int[2]; int acc[] = new int[2]; int width, height; int size; Particle(String n, int px, int py, int vx, int vy, int w, int h, int s) { name = n; pos[0] = px; pos[1] = py; dot[0] = vx; dot[1] = vy; width = w; height = h; size = s; } double dist(Particle p) { return( Math.sqrt( (double) ((p.pos[0]-pos[0])* (p.pos[0]-pos[0]) + (p.pos[1]-pos[1])* (p.pos[1]-pos[1])))); } void step() { pos[0] += dot[0]; pos[1] += dot[1]; dot[0] += acc[0]; dot[1] += acc[1]; if (pos[0] <= 0) { pos[0]=0; dot[0] = - dot[0];} if (pos[1] <= 0) { pos[1]=0; dot[1] = - dot[1];} if (pos[0] >= width-size) { pos[0]=width-size; dot[0] = - dot[0];} if (pos[1] >= height-size) { pos[1]=height-size; dot[1] = - dot[1];} } public void draw(Graphics g) { g.setColor(Color.black); g.fillOval(pos[0],pos[1],size,size); } public void crashdraw(Graphics g) { g.setColor(Color.yellow); g.fillOval(pos[0],pos[1],size,size); } public boolean iscrashed(Particle p, double thd) { return (dist(p) < thd); } public void run() { while (true) { step(); try { Thread.sleep(100); } catch (Exception e) { // showStatus("Error: " + e); } } } } class Rocket extends Particle { int motor[] = new int[2]; public Rocket(String n, int x0, int y0, int vx, int vy, int w, int h, int s, int mx, int my) { super(n, x0, y0, vx, vy, w, h, s); acc[0] = motor[0] = mx; acc[1] = motor[1] = my; } public void draw(Graphics g) { g.setColor(Color.black); g.fillRect(pos[0],pos[1],size,size); } public void crashdraw(Graphics g) { g.setColor(Color.red); g.fillRect(pos[0],pos[1],size,size); } } public class UnivThreadParticle extends Applet implements Runnable{ private Thread trig = null; int NumP = 6; Particle[] ps = new Particle[NumP]; Thread[] th = new Thread[NumP]; int size = 70; static int height = 600, width = 600; public void init() { ps[0] = new Particle("p1",300,100,0,2, width,height,size); ps[1] = new Particle("p2",100,100,2,0, width,height,size); ps[2] = new Particle("p3",200,100,2,2, width,height,size); ps[3] = new Rocket("r1", 50,50,2,0, width,height,size, 1,0); ps[4] = new Rocket("r2",150,50,0,2, width,height,size, 0,1); ps[5] = new Rocket("r3",250,50,2,2, width,height,size, 1,1); for (int i=0; i<NumP; i++) ps[i].start(); trig = new Thread(this); trig.start(); } public void paint(Graphics g) { boolean crashed=false; for (int i=0; i<NumP; i++) { crashed = false; for (int j=0; j<NumP; j++) { if (i!=j) { if (ps[i]. iscrashed(ps[j],(double)size)) crashed = true; } } if (crashed) ps[i].crashdraw(g); else ps[i].draw(g); } } public void run() { while (trig != null) { repaint(); try { Thread.sleep(100); } catch (Exception e) { showStatus("Error: " + e); } } } }