/* Simple 2D social A.I. simulation */ import java.awt.*; import java.util.*; public class AI3 extends BufferedApplet { int w = 0, h = 0; double time = 0, diameter = .03; Swarm3 swarm = new Swarm3(); public void render(Graphics g) { if (w == 0) { w = bounds().width; h = bounds().height; swarm.create(500, (float)diameter); } double time = getTime(); swarm.animate(this.time == 0 ? 0 : (float)(time - this.time)); this.time = time; renderSwarm(g, swarm, w, h, diameter); animating = true; } void renderSwarm(Graphics g, Swarm3 swarm, int w, int h, double diameter) { g.setColor(Color.white); g.fillRect(0,0,w,h); int r = (int)(w * diameter / 2); g.setColor(Color.black); for (int i = 0 ; i < swarm.size() ; i++) { int x = (int)(w/2 + w * swarm.getX(i)); int y = (int)(h/2 - w * swarm.getY(i)); g.drawOval(x - r, y - r, 2 * r, 2 * r); } } public boolean mouseDrag(Event e, int x, int y) { swarm.setSplitY(.5f - (float)y / w); return true; } public boolean keyUp(Event e, int key) { switch (key) { case 'l': swarm.setLineUp(! swarm.getLineUp()); break; case 'x': swarm.setSplitX(true); break; case 'y': swarm.setSplitY(true); break; case 'j': swarm.setSplitX(false); swarm.setSplitY(false); break; } return true; } double getTime() { return System.currentTimeMillis() / 1000.; } }