小球碰撞屏保
你好! 这是本人的第一篇文章,仅供参考。
一、首先建立一个ball的类
ball类的具体代码如下(初始化小球的属性以及书写与小球有关的方法):
package ball;
import java.awt.Color;
import java.awt.Graphics;
public class Ball {
int x,y,speed,d;//x为小球横坐标,与为小球纵坐标,speed为小球移动速度,d为直径
Color c;
int dir; //定义路径
public static final int LEFT_UP=1;
public static final int LEFT_DOWN=2;
public static final int RIGHT_UP=3;
public static final int RIGHT_DOWN=4;
public Ball(){//构造方法,定义球的属性
dir=(int)(Math.random()*4)+1;
x=(int)(Math.random()*1920);//随机生成x坐标
y=(int)(Math.random()*1080);//随机生成y坐标
speed=(int)(Math.random()*10)+5;//给小球一个随机的速度
d=(int)(Math.random()*50)+10;//随机生成大小不一样的小球
c=new Color((int)(Math.random()*256),(int)(Math.random()*256),(int)(Math.random()*256));//生成的球颜色不一样
}
public void DrawBall(Graphics g){//画出小球
g.setColor(c);
g.fillOval(x, y, d, d);
}
public void change(){
switch (dir) {
case LEFT_UP:
x-=speed;
y-=speed;
if(y<0){//判断是否超出屏幕
dir=LEFT_DOWN;
}
if(x<0){
dir=RIGHT_UP;
}
break;
case LEFT_DOWN:
x-=speed;
y+=speed;
if(y>1080){
dir=LEFT_UP;
}
if(x<0){
dir=RIGHT_DOWN;
}
break;
case RIGHT_UP:
x+=speed;
y-=speed;
if(y<0){
dir=RIGHT_DOWN;
}
if(x>1920){
dir=LEFT_UP;
}
break;
default:
case RIGHT_DOWN:
x+=speed;
y+=speed;
if(y>1080){
dir=RIGHT_UP;
}
if(x>1920){
dir=LEFT_DOWN;
}
break;
}
}
}
二、建立BallFrame类
BallFrame类的具体代码如下:
package ball;
import javax.swing.JFrame;
import com.sun.awt.AWTUtilities;
public class BallFrame {
public static void main(String arg[]) {
JFrame j=new JFrame();
BallPanel b=new BallPanel();
j.add(b);
j.setSize(1920,1080);
j.setDefaultCloseOperation(3);
j.setUndecorated(true);//去边框
AWTUtilities.setWindowOpaque(j, false);//透明
j.setVisible(true);
b.move();
}
}
- 使用import com.sun.awt.AWTUtilities时,可能会出错。
- 解决方法:在项目中Build Path ->Libraries中重新导入JRE。
三.建立BallPanel类
BallPanel类的具体代码如下:
package ball;
import java.awt.Graphics;
import javax.swing.JPanel;
public class BallPanel extends JPanel{
/**
*
*/
private static final long serialVersionUID = 1L;
Ball[] ba=new Ball[100];//小球对象数组
public BallPanel(){
for (int i = 0; i < ba.length; i++) {
ba[i]=new Ball();//创建小球
}
}
@Override
public void paint (Graphics g){//画出小球
super.paint(g);
setOpaque(false);
for (int i = 0; i < ba.length; i++) {
ba[i].DrawBall(g);
}
}
public void move(){
new Thread(){//新建线程
public void run(){
while(true){
for (int i = 0; i < ba.length; i++) {
ba[i].change();
}
repaint();//重画
try{
Thread.sleep(30);
}catch(Exception e){
}
}
}
}.start();
}
}
一个简单的程序便完成了。