📄 bounceball.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 + -