⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rocket.java

📁 java程序
💻 JAVA
字号:
//这个类表示一个Rocket
import java.awt.*;
import java.applet.*;
import java.util.*;
import java.net.*;

class Rocket
{
public boolean sleep=true;
private int energy,patch,length,
mx,my,       //显示区域长度,宽度
gravity,     //重力大小,表示碎片下降快慢
centerRocketX,centerRocketY,       //Rocket中心坐标
vx[],vy[],   //Rocket中保存碎片patch末坐标点的数组赋值
			 //坐标点以Rocket中心为原点
offX,offY,		 //patch相对于Rocket偏移的坐标
red,blue,green,
t;
private Random random;

public Rocket(int a,int b,int g)
{
mx=a;
my=b;
gravity=g;
}

public void init(int e,int p,int l,long seed)
{
//e:Rocket爆炸能量
//p:Rocket中patch个数
//l:每一个patch长度
//seed:限制init()方法中几个随机数的最大值
int i;
energy=e;  //给烟火Rocket能量赋值
patch=p;   //给爆炸碎片个数赋值
length=l;  //给碎片长度赋值

random=new Random(seed);
//创建碎片数组
vx=new int[patch];
vy=new int[patch];
red=(int)(random.nextDouble()*128)+128;
blue=(int)(random.nextDouble()*128)+128;
green=(int)(random.nextDouble()*128)+128;

//给Rocket中心坐标赋值
centerRocketX=(int)(Math.random()*mx/2)+mx/4;
centerRocketY=(int)(Math.random()*my/2)+my/4;

//给每一个patch末坐标点赋值
for(i=0;i<patch;i++)
{
	vx[i]=(int)(Math.random()*energy)-energy/2;
	vy[i]=(int)(Math.random()*energy*7/8)-energy/8;
}
}

public void start()
{
t=0;
sleep=false;
}

public void show(Graphics g)
{ 
if(!sleep)
	    if(t<length)
	    { 
		    int i,c;
		    double s;
		    Color color;
		    //随机设置显示颜色
		    c=(int)(random.nextDouble()*64)-32+red;
		    if(c>=0&&c<256)
			    red=c;
		    c=(int)(random.nextDouble()*64)-32+blue;
		    if(c>=0&&c<256)
			    blue=c;
		    c=(int)(random.nextDouble()*64)-32+green;
		    if(c>=0&&c<256)
			    green=c;
		    color=new Color(red,blue,green);
		    for(i=0;i<patch;i++)
		    {
			    s=(double)t/100;
			    offX=(int)(vx[i]*s);
			    offY=(int)(vy[i]*s-gravity*s*s);
			    g.setColor(color);
			    //在坐标(centerRocketX+offX,
			    //		 centerRocketX-offY)处画点
			    g.drawLine(centerRocketX+offX,centerRocketY-offY,
					      centerRocketX+offX,centerRocketY-offY);
			    //如果这个patch远离Rocket,则应画两个点
			    if(t>=length/2)
				    for(int j=0;j<2;j++)
				    {
					    s=(double)((t-length/2)*2+j)/100;
					    offX=(int)(vx[i]*s);
					    offY=(int)(vy[i]*s-gravity*s*s);
					    g.setColor(Color.black);
					    //在坐标(centerRocketX+offX,
					    //		centerRocketX-offY)处画点
					    g.drawLine(centerRocketX+offX,centerRocketY-offY,
							       centerRocketX+offX,centerRocketY-offY);
				    }
		    }      //for
		    t++;
	    }		   //if		
	    else
	    {
		    sleep=true;
	    }
}             //show()
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -