package dtmgame; import java.applet.Applet; import java.awt.Color; import java.awt.Graphics; import java.awt.Point; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import java.util.HashSet; import java.util.Set; import javax.swing.Timer; /** * @author Shaohan Hu * */ public class Particles extends Applet implements ActionListener, MouseListener, MouseMotionListener { private static final long serialVersionUID = 1L; private int numParticles = 61; private Set particles; private Timer timer; private int delay = 61; private int size = 500; private Circle c; private long startTime; private long endTime; private double duration; private boolean gameInProgress = true; private boolean moreCircleNeeded = true; public void init() { setSize(size, size); this.addMouseListener(this); this.addMouseMotionListener(this); c = new Circle(30, new Point(-30, -30)); particles = new HashSet(); for (int i = 0; i < numParticles; i++) { CircleParticle pt = new CircleParticle((int) (Math.random() * size), (int) (Math.random() * size), 2, // (int) (Math.random() * 10), (int) (Math.random() * 5) + 1, (int) (Math.random() * 5) + 1, 0, 500, 0, 500); particles.add(pt); } timer = new Timer(delay, this); timer.start(); setSize(size, size); repaint(); } public void printEndMsg(Graphics g) { g.setColor(Color.black); g.fillRect(0, 0, size, size); g.setColor(Color.white); g.drawString("You survived " + duration + " seconds.", size - 200, size - 20); g.drawString("You survived " + duration + " seconds.", size - 201, size - 20); g.drawString("You survived " + duration + " seconds.", size - 201, size - 21); } public void paint(Graphics g) { if (gameInProgress) { drawParticles(g); if (moreCircleNeeded) { c.drawPreview(g); } else { c.drawCircle(g); examine(); } } else { printEndMsg(g); drawParticles(g); c.drawCircle(g); } } public void examine() { for (CircleParticle pt : particles) { if (c.isTouched(pt.getPosition())) { endTime = System.currentTimeMillis(); timer.stop(); this.gameInProgress = false; duration = (endTime - startTime) / 1000.0; this.removeMouseListener(this); this.removeMouseMotionListener(this); this.setEnabled(false); repaint(); } } } public void drawParticles(Graphics g) { for (CircleParticle pt : particles) { pt.drawParticle(g); } } public void updateAllParticlePositions() { for (CircleParticle pt : particles) { pt.takeOneStep(); } } public void actionPerformed(ActionEvent e) { this.updateAllParticlePositions(); repaint(); } public void mouseClicked(MouseEvent e) { // TODO Auto-generated method stub } public void mouseEntered(MouseEvent e) { this.mouseMoved(e); } public void mouseExited(MouseEvent e) { // TODO Auto-generated method stub } public void mousePressed(MouseEvent e) { if (this.gameInProgress) { if (this.moreCircleNeeded) { startTime = System.currentTimeMillis(); this.moreCircleNeeded = false; repaint(); } } } public void mouseReleased(MouseEvent e) { // TODO Auto-generated method stub } public void mouseDragged(MouseEvent e) { this.mouseMoved(e); } public void mouseMoved(MouseEvent e) { if (this.gameInProgress) { this.c.setPosition(e.getPoint()); repaint(); } } }