为学习添加点乐趣---过年放烟花

[来源] 达内    [编辑] 达内   [时间]2013-08-13

为学习添加点乐趣---过年放烟花

参赛学员:刘吉超

获奖奖项:三等奖

 一、使用
    我做得烟花的程序,用鼠标点击界面,将出现的烟花效果,中间将会出现新年快乐。由于无法上图,就没法查看效果啦,用到的知识点有:鼠标事件的监听,Graphics类和随机类Random以及JPanel等。
二、代码及注释如下
    首先是,Fire类,含有main方法   
package day01;

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

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class Fire extends JFrame{

    private static final long serialVersionUID = 1L;

    int x, y;
    char[] chars={'新','年','快','了'};  //要显示的文字

    public Fire() {
        super("烟火");
    }

    public static void main(String[] args) {
        Fire frame = new Fire();
        
        frame.init();
        frame.setSize(800, 500); //设置窗体的大小
        frame.setLocationRelativeTo(null); //使窗体在屏幕上居中
        frame.setVisible(true);//设置窗体显示
    }

    public void init() {  
        JPanel panel = new JPanel(); 
        panel.setBackground(Color.black);
        getContentPane().add(panel);//更改窗体内容窗格为Jpane
        addMouseListener(new MouseAdapter(){//添加事件
            public void mouseClicked(MouseEvent e) {
                super.mouseClicked(e);
                x = e.getX();
                  y = e.getY();
                  Graphics g1 = getGraphics();
                  drawOval one = new drawOval(x,y,g1,chars);
                  one.start();
            }
        });
    }
}

下面这个用于创建椭圆型烟花   drawOval.java

package day01;

import java.awt.Color;
import java.awt.Graphics;
import java.util.Random;

public class drawOval extends Thread {

    int x, y;

    Graphics g1;
    char[] chars;

    drawOval(int x, int y, Graphics g1,char[] chars) {
        this.x = x;
        this.y = y;
        this.g1 = g1;
        this.chars=chars;
    }

    public void run() {
        int y_move, y_click, x_click;
        int v;
        x_click = x;
        y_click = y;
        y_move = 400;
        v = 3;
        int r, g, b;
        
        while (y_move > y_click){ //这个循环用于生成烟花上升那个轨迹
            g1.setColor(Color.black);
            g1.fillOval(x_click,y_move,5,5);
            y_move -= 5;
            Random color=new Random(); //通过Random生成上升轨迹的随机颜色
            r = color.nextInt(256);
            g = color.nextInt(256);
            b = color.nextInt(256);
            g1.setColor(new Color(r, g, b));
            g1.fillOval(x_click,y_move,5,5);
            for(int j = 0;j <= 10;j++) {
                r = color.nextInt(256);
                g = color.nextInt(256);
                b = color.nextInt(256);
                g1.setColor(new Color(r,g,b));
                g1.fillOval(x_click,y_move+j*5,5,5);
            }
            g1.setColor(Color.black);
            g1.fillOval(x_click,y_move+5*10,5,5);
            
            try {  //-----作延迟用,这些效果好,否则单击后很快就执行完了 看不到效果
                Thread.sleep(v++);
            } catch (InterruptedException e) {
            }
        }
        
        for(int j = 0;j <= 10;j++) {
            g1.setColor(Color.black);
            g1.fillOval(x_click,y_move+j*5,5,5);
        }

        for (int i = 0; i <= 25; i++) {
            
            Random color=new Random();  //生成烟花的随机颜色
            r = color.nextInt(256);
            g = color.nextInt(256);
            b = color.nextInt(256);
            g1.setColor(new Color(r, g, b));
            g1.drawOval(x_click-3*i,y_click-3*i,6*i,6*i); //绘制
            
            if(i<23)
            {
                g1.drawOval(x_click-3*(i+1),y_click-3*(i+1),6*(i+1),6*(i+1));
                g1.drawOval(x_click-3*(i+2),y_click-3*(i+2),6*(i+2),6*(i+2));
                g1.drawOval(x_click-3*(i+3),y_click-3*(i+3),6*(i+3),6*(i+3));
            }
            
            if(i>5){
                drawChars two = new drawChars(x,y,g1,chars);
                  two.start();
            }
            
            try {
                Thread.sleep(v++);//在指定的毫秒数内让当前正在执行的线程休眠
                 } catch(InterruptedException e){
            }
                 
            g1.setColor(Color.black);
            g1.drawOval(x_click-3*i,y_click-3*i,6*i,6*i);
            try {
                    Thread.sleep(v++);
            } catch (InterruptedException e) {
            }
            g1.setColor(Color.black);
            g1.drawOval(x_click-3*i,y_click-3*i,6*i,6*i);
            if(i==25){
                x_click = x-5*(chars.length);
                g1.setColor(Color.black);
                g1.drawChars(chars, 0, chars.length, x_click, y_click);
            }
        }
    }
}

下面这个类用于生成文字   drawChars.java

package day01;

import java.awt.Color;
import java.awt.Graphics;
import java.util.Random;

public class drawChars  extends Thread {
    int x, y;

    Graphics g1;
    char[] chars;

    drawChars(int x, int y, Graphics g1,char[] chars) {
        this.x = x;
        this.y = y;
        this.g1 = g1;
        this.chars=chars;
    }

    public void run() {
        int y_click, x_click;
        x_click = x-5*(chars.length);
        y_click = y;
        int r, g, b;
        
        for (int i = 0; i <= 25; i++) {//实现文字颜色变换
            
            Random color=new Random();
            r = color.nextInt(256);
            g = color.nextInt(256);
            b = color.nextInt(256);
            g1.setColor(new Color(r, g, b));
            g1.drawChars(chars, 0, chars.length, x_click, y_click);
        }
    }
}

网友评论 已有 0 条评论,查看更多评论»

评论内容:
验证码:
【网友评论仅供其表达个人看法,并不表明本站同意其观点或证实其描述。】

就业案例

最新开课信息