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