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

📄 bounceball.java

📁 小球动能动量守衡,比较简单的... ... ... ..
💻 JAVA
字号:
import java.awt.*;
import java.applet.*;

public class bounceBall extends Applet implements Runnable
{
	Color ballColor[]={Color.GREEN,Color.ORANGE};		//定义两个小球的颜色
	//定义小球的长半轴和短半轴
	final int deltaX=30;								
	final int deltaY=30;
	
	//定义小球的初始坐标
	int ballX[]={250,400};
	int ballY[]={100,100};
	
	//定义小球的初始速度
	int ballXSpeed[]={-1,2};
	
	//小球是否被重画过
	boolean drawn=false;
	
	//小球的个数
	int numBalls=ballX.length;
	
	//创建线程
	Thread animatorThread;
	
	//两个线程之间的延时
	int delay=10;
	
	//初始化APPLET		
	public void init(){ }
	
	
	//如果线程未被创建则创建线程,否则运行线程
	public void start()
	{
		if(animatorThread==null)
		   animatorThread=new Thread(this);
		animatorThread.start();
	}
	
	//暂停APPLET
	public void stop()
	{
		animatorThread=null;
	}
	
	//重画图象
	public void update(Graphics g)
	{
		paint(g);	
	}
	
	//将原来的小球画成白色,移动一小段后,新的小球画为相应的颜色
	public void paint(Graphics g)
	{
		g.setXORMode(Color.WHITE);
		if(drawn)
		{
			for(int i=0;i<numBalls;i++)
			{
				g.setColor(ballColor[i]);
				g.fillOval(ballX[i],ballY[i],deltaX,deltaY);
			}
		}
		
		moveBalls();
		
		for(int i=0;i<numBalls;i++)
		{
			g.setColor(ballColor[i]);
			g.fillOval(ballX[i],ballY[i],deltaX,deltaY);
		}
			
		drawn=true;
		
	}
	
	
	//如果小球的圆心之间的距离等于半径,则根据动量,能量守衡定律,交换小球速度,
	//否则按原来的速度前进
	public void moveBalls()
	{
		if(Math.abs(ballX[0]-ballX[1])>deltaX) 
		{
			ballX[0]+=ballXSpeed[0];
			ballX[1]+=ballXSpeed[1];
		}
		else
		{	
			
				int temp;
				temp=ballXSpeed[0];
				ballXSpeed[0]=ballXSpeed[1];
				ballXSpeed[1]=temp;
			for(int i=0;i<numBalls;i++)
			{ballX[i]+=ballXSpeed[i];}
		}
		
		//小球碰壁则反弹
		for(int i=0;i<numBalls;i++)
		{
			if(ballX[i]<=0||(ballX[i]>=getWidth()-deltaX))
			{
				ballXSpeed[i]=-ballXSpeed[i];
			}
		}	
		
	}
	
	//运行线程
	public void run()
	{
		Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
		long startTime=System.currentTimeMillis();
		while(Thread.currentThread()==animatorThread)
		{
			repaint();
			try
			{
				startTime+=delay;
				Thread.sleep(Math.max(0,startTime-System.currentTimeMillis()));
			}
			
			catch(InterruptedException e){
				break;
			}
		}
	}
}

⌨️ 快捷键说明

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