吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5185|回复: 11
收起左侧

[Java 转载] Java实现字符雨

  [复制链接]
15193643451 发表于 2014-10-27 17:22
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.length; j++) {
                            charset[j] = (char) (rand.nextInt(96) + 48);
                    }
            }
            // 随机化列起始位置
            pos = new int[charset.length];
            for (int i = 0; i < pos.length; i++) {
                    pos = rand.nextInt(pos.length);
            }
            // 生成从黑色到绿色的渐变颜色,最后一个保持为白色
            for (int i = 0; i < colors.length - 1; i++) {
                    colors = 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 + j) % charset.length;
                            g.setColor(colors[j]);
                            g.drawChars(charset, index, 1, i * 10, index * 10);
                    }
                    pos = (pos + 1) % charset.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();
               
        }
        
}

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

羽小时 发表于 2014-10-27 17:42
问个脑残的问题。。。这个怎么用
刺蝴蝶De箫启灵 发表于 2014-10-27 17:47
WuAiFenXiang 发表于 2014-10-27 17:56
Mr.K 发表于 2014-10-28 17:45
无语 无法加载主类
manbajie 发表于 2014-10-28 23:01
看看怎么做到的
十一月的红薯 发表于 2014-11-25 19:28
{:1_902:},收藏,试一下
morigin 发表于 2014-11-25 21:14
不错 学习了!~ java菜鸟路过,,,,膜拜
dtsygz 发表于 2014-11-25 21:24
java菜鸟路过
w596761132 发表于 2014-11-25 22:30
没看懂啊   呵呵
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-27 15:34

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表