黑马程序员技术交流社区

标题: 从别的地方看来了 用Java实现字符雨 [打印本页]

作者: 冰心冷恋    时间: 2015-3-30 22:34
标题: 从别的地方看来了 用Java实现字符雨
package zfy;

import java.awt.Canvas;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.util.Random;

import javax.swing.JFrame;

class RainCanvas extends Canvas implements Runnable{
     private int width, height;
     private Image offScreen; // 缓冲图片
    private char[][] charset; // 随机字符集合
    private int[] pos; // 列的起始位置
    private Color[] colors = new Color[30]; // 列的渐变颜色
    public RainCanvas(int width, int height) {
             this.width = width;
             this.height = height;
             // 生成ASCII可见字符集合
            Random rand = new Random();
             charset = new char[width / 10][height / 10];
             for (int i = 0; i < charset.length; i++) {
                     for (int j = 0; j < charset[i].length; j++) {
                             charset[i][j] = (char) (rand.nextInt(96) + 48);
                     }
             }
             // 随机化列起始位置
            pos = new int[charset.length];
             for (int i = 0; i < pos.length; i++) {
                     pos[i] = rand.nextInt(pos.length);
             }
             // 生成从黑色到绿色的渐变颜色,最后一个保持为白色
            for (int i = 0; i < colors.length - 1; i++) {
                     colors[i] = new Color(0, 255 / colors.length * (i + 1), 0);
             }
             colors[colors.length - 1] = new Color(255, 255, 255);
             setBackground(Color.BLACK);
             setSize(width, height);
             setVisible(true);
     }
     
     public void startRain() {
             new Thread(this).start();
     }
     public void drawRain() {
             if (offScreen == null) {
                     return;
             }
             Random rand = new Random();
             Graphics g = offScreen.getGraphics();
             g.clearRect(0, 0, width, height);
             g.setFont(new Font("Arial", Font.PLAIN, 14));
             //
             for (int i = 0; i < charset.length; i++) {
                     int speed = rand.nextInt(3);
                     for (int j = 0; j < colors.length; j++) {
                             int index = (pos[i] + j) % charset[i].length;
                             g.setColor(colors[j]);
                             g.drawChars(charset[i], index, 1, i * 10, index * 10);
                     }
                     pos[i] = (pos[i] + 1) % charset[i].length;
             }
     }
     @Override
     public void update(Graphics g) {
             paint(g);
     }
     public void run() {
             while (true) {
                     drawRain();
                     repaint();
                     try {
                             Thread.sleep(50); // 可改变睡眠时间以调节速度
                    }
                     catch (InterruptedException e) {
                             System.out.println(e);
                     }
             }
     }
     @Override
     public void paint(Graphics g) {
             // 当组件显示时检测是否要创建缓冲图片,在组件还不可见时调用createImage将返回null
             if (offScreen == null) {
                     offScreen = createImage(width, height);
             }
             g.drawImage(offScreen, 0, 0, this);
     }
}


public class ZFYTest extends JFrame{

         private RainCanvas canvas = new RainCanvas(1366, 768);
         
         public ZFYTest() {
                 super("ZFY");
                 setUndecorated(true);
         setExtendedState(JFrame.MAXIMIZED_BOTH);
         setVisible(true);
         canvas = new RainCanvas(this.getWidth(), this.getHeight());
         //canvas = new RainCanvas(800,600);
         getContentPane().add(canvas);
         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                 
         }
         
         public static void main(String[] args) {
                 
                 ZFYTest test = new ZFYTest();
                 test.canvas.startRain();
                 
         }
         
}
作者: 李大大    时间: 2015-3-30 22:54
支持黑马,黑马最强
作者: smile2015    时间: 2015-3-31 01:12
支持一下




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2