1. 程式人生 > >Java小球動態屏保程式的製作

Java小球動態屏保程式的製作

一、首先建立包ball,然後建立模板類BallModel

BallModel類程式碼如下 :

package ball;

import java.awt.Color;
import java.awt.Graphics;

public class BallModel {
    int x,y,d,speed; //定義小球的x,y座標,小球直徑和速度
    Color c; 
    
    //構造方法
    public BallModel() {
        x=(int)(Math.random()*1920); //隨機生成x座標
        y=(int)(Math.random
()*1080); //隨機生成y座標 d=(int)(Math.random()*50)+10; //小球直徑 speed=12-d/6; //球直徑越小速度越快 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); } }

二、新建BallPanel類,建立物件和移動小球

BallPanel類程式碼如下 :

package ball;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import javax.swing.JPanel;

public class BallPanel extends JPanel implements MouseMotionListener
{ /** * */ private static final long serialVersionUID = 5088665161758943179L; int[] dir=new int[200]; //小球路徑陣列 BallModel[] ba=new BallModel[200]; //小球物件陣列 public BallPanel (){ for (int i = 0; i < ba.length; i++) { ba[i]=new BallModel(); //建立小球物件 dir[i]=(int)(Math.random()*4+1); //生成小球路徑 } } //畫出小球 @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 moveBall(){ new Thread(){ public void run() { //重寫run方法 super.run(); while(true){ for (int i=0;i<ba.length;i++){ //迴圈所有小球 //判斷路徑,增加值使小球前進 switch (dir[i]) { case 1:{ ba[i].x+=ba[i].speed; ba[i].y+=ba[i].speed; break; }case 2:{ ba[i].x-=ba[i].speed; ba[i].y+=ba[i].speed; break; }case 3:{ ba[i].x-=ba[i].speed; ba[i].y-=ba[i].speed; break; }case 4:{ ba[i].x+=ba[i].speed; ba[i].y-=ba[i].speed; break; }default: break; } //判斷邊界值,改變小球路徑 if(ba[i].x>1920 - ba[i].d){ if(dir[i]==1){dir[i]=2;} if(dir[i]==4){dir[i]=3;} ba[i].c=new Color((int)(Math.random()*256), (int)(Math.random()*256), (int)(Math.random()*256)); } if(ba[i].x<0){ if(dir[i]==2){dir[i]=1;} if(dir[i]==3){dir[i]=4;} ba[i].c=new Color((int)(Math.random()*256), (int)(Math.random()*256), (int)(Math.random()*256)); } if(ba[i].y>1080 - ba[i].d){ if(dir[i]==1){dir[i]=4;} if(dir[i]==2){dir[i]=3;} ba[i].c=new Color((int)(Math.random()*256), (int)(Math.random()*256), (int)(Math.random()*256)); } if(ba[i].y<0){ if(dir[i]==4){dir[i]=1;} if(dir[i]==3){dir[i]=2;} ba[i].c=new Color((int)(Math.random()*256), (int)(Math.random()*256), (int)(Math.random()*256)); } } repaint(); //重畫 try { Thread.sleep(20); //休眠20毫秒 } catch (InterruptedException e) { e.printStackTrace(); } } }; }.start(); } @Override public void mouseDragged(MouseEvent e) { System.exit(0); //退出 } @Override public void mouseMoved(MouseEvent e) { } }

三、新建BallFrame類,建立屏保視窗,新增元件

BallFrame類程式碼如下

package ball;

import javax.swing.JFrame;
import com.sun.awt.AWTUtilities;

public class BallFrame {

    public static void main(String[] args) throws InterruptedException {
        JFrame j=new JFrame();
        BallPanel b=new BallPanel();
        j.add(b);
        j.setSize(1920, 1080);
        j.setUndecorated(true);  //去邊框
        j.setLocationRelativeTo(null);  //居中
        j.setDefaultCloseOperation(3);  //預設關閉
        AWTUtilities.setWindowOpaque(j, false);  //設定透明
        j.setVisible(true);  //設為可見
        b.moveBall();  //呼叫小球移動方法
        j.addMouseMotionListener(b); //註冊監聽器
    }

}

OK,一個簡單的屏保程式就完成了。

歡迎訪問我的網站: 學長幫