import java.awt.*;
import java.awt.event.*;
import java.util.Random;
import javax.swing.*;
public class rainCanvas extends Canvas implements ActionListener,Runnable,MouseListener,MouseMotionListener
{
private Rain rains[];
int x0,y0;
int k=0;
private Thread timer;
public rainCanvas()
{
Color colors[]={Color.BLUE,Color.green,Color.white,Color.red,Color.orange,Color.yellow,Color.pink};
Random a=new Random();
this.rains=new Rain[150];
for(int i=0;i<rains.length;i++)
{ Random x=new Random();
Random y=new Random();
rains[i]=new Rain(x.nextInt(700),y.nextInt(600),colors[a.nextInt(colors.length)],10);
}
this.addMouseListener(this);
this.addMouseMotionListener(this);
timer=new Thread(this);
timer.start();
}
private static class Rain
{
int x,y,r;
Color color;
boolean up,left;
Rain(int x,int y,Color color,int r)
{
this.x=x;
this.y=y;
this.color=color;
this.r=r;
up=left=false;
}
}
public void paint(Graphics g)
{ g.setColor(Color.darkGray);
g.fillRect(0, 500, 700,200);
for (int i=0; i<rains.length; i++)
{ g.setColor(rains[i].color);
if (rains[i].x<=0 || rains[i].x>=700) //到水平边更改方向
rains[i].x=10;
else
rains[i].x+=20;
if (rains[i].y<=0 || rains[i].y>=600) //到垂直边更改方向
rains[i].y=10;
else
rains[i].y+=20;
Random le=new Random();
int l=le.nextInt(30)+10;
g.drawLine( rains[i].x, rains[i].y, rains[i].x+x0/l, rains[i].y+y0/l);
int p=0;
for (int j=0; j<10; j++)
{
g.setColor(rains[j].color);
for (int m=0;k<=50&&m<=18;m++)
{
g.drawOval(p*20+k*10+30*m,535+j*20,30,20);
if(k*10+30*m>670)
k=0;
}
g.setColor(this.getBackground());
g.fillRect(0, 550+j*20,700, 15);
p++;
}
}
ImageIcon img=new ImageIcon("Pic/d.gif");
this.setBackground(Color.black);
g.drawImage(img.getImage(), 300, 400, this);
k++;
for (int i=0; i<4; i++)
{
Random co=new Random();
g.setColor(rains[co.nextInt(rains.length)].color);
Random a1=new Random();
int a=a1.nextInt(700);
Random b1=new Random();
int b=b1.nextInt(300)+400;
Random r=new Random();
int c=r.nextInt(80)+80;
g.drawOval(a+c/8, b+c/8, 4*c/5,4*c/5);
try {
timer.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
g.drawOval(a, b, c,c);
}
}
public void actionPerformed(ActionEvent e)
{
repaint();
}
public void run()
{
while(true)
{
repaint();
try {
timer.sleep(50);
} catch (InterruptedException e) {
break;
}
}
}
@Override
public void mouseClicked(java.awt.event.MouseEvent e) {
// TODO Auto-generated method stub
x0=e.getX();
y0 = e.getY();
}
@Override
public void mousePressed(java.awt.event.MouseEvent e) {
}
@Override
public void mouseReleased(java.awt.event.MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(java.awt.event.MouseEvent e) {
//x0=e.getX();
//y0 = e.getY();
}
@Override
public void mouseExited(java.awt.event.MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseDragged(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseMoved(MouseEvent e) {
// TODO Auto-generated method stub
//x0=e.getX();
// y0 = e.getY();
}
}