package ball; import java.util.Random; import javax.microedition.lcdui.Canvas; import javax.microedition.lcdui.Graphics; import javax.microedition.lcdui.Image; public class WaterFall extends Canvas implements Runnable { final int Max = 1000; wparticle p[]; int AppletWidth,AppletHeight,XCenter,YCenter; Image OffScreen; Graphics drawOffScreen; Thread pThread; Random r ; public WaterFall() { setFullScreenMode(true); } public void init() { AppletWidth = getWidth(); AppletHeight = getHeight(); p = new wparticle[Max]; r = new Random(); for(int i=0; i<Max; i++) p[i] = new wparticle(r); OffScreen = Image.createImage(AppletWidth,AppletHeight); drawOffScreen = OffScreen.getGraphics(); drawOffScreen.setColor(0x0); } public void start() { pThread = new Thread(this); pThread.start(); } public void stop() { pThread = null; } public void update(Graphics g) { paint(g); } public void paint(Graphics g) { // g.drawImage(OffScreen,0,0,this); g.drawImage(OffScreen, 0, 0, Graphics.TOP | Graphics.LEFT); } public void run() { boolean reset = false; int i, t =0; while(true) { // drawOffScreen.clearRect(0,0,AppletWidth,AppletHeight); // drawOffScreen.setColor(Color.white); // drawOffScreen.drawLine(0,15,10,15); drawOffScreen.setColor(0x0); drawOffScreen.fillRect(0, 0, AppletWidth, AppletHeight); drawOffScreen.setColor(0xffffff); drawOffScreen.drawLine(0,15,10,15); for(i=0; i<Max; i++) { // drawOffScreen.fillOval((int)p[i].X,(int)p[i].Y,3,3); drawOffScreen.setColor(0xffffff); drawOffScreen.fillArc((int)p[i].X,(int)p[i].Y,3,4, 0, 360); p[i].X = p[i].X + p[i].Vx; if(p[i].X > 10) { p[i].Y += p[i].Vy*p[i].time / 1000; p[i].Vy = (int) 9.8*p[i].time; p[i].time++; } if(p[i].Y > AppletHeight) { p[i].reset(r); } } repaint(); try { Thread.sleep(100); } catch (InterruptedException e) { } } } } class wparticle { double X,Y; double Vx,Vy; int time; public wparticle(Random r) { reset( r); } public void reset(Random r) { X = (int) (r.nextDouble() * -40); Y = (int) (r.nextDouble() * 5 + 10); Vx = r.nextDouble()*3 + 1.0; Vy = 0; time = 0; } }