1. [代码][Java]代码    
package com.yk.tools.game;
 
import java.applet.AudioClip;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.io.IOException;
import java.net.URL;
import java.util.Iterator;
import java.util.Random;
import java.util.Vector;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
 
import javax.imageio.ImageIO;
import javax.swing.JApplet;
import javax.swing.JPanel;
import javax.swing.JWindow;
 
import com.sun.awt.AWTUtilities;
 
/**
 * @author lifetime
 * 
 */
public class MerryChristmas extends JWindow implements Runnable {
    private static final int[] WindType = new int[] { -1, 1 };
    private Image[] xueHuaImages;
    private Dimension screenSize;
    private Vector<XueHua> list;
    private Lock lock;
 
    public MerryChristmas() {
        list = new Vector<XueHua>();
        lock = new ReentrantLock();
        initImages();
        setAlwaysOnTop(true);
        JPanel rootPanel = new JPanel();
        setContentPane(rootPanel);
        screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        setSize(screenSize);
        AWTUtilities.setWindowOpaque(this, false);
        URL audioPath = getClass().getResource("music.wav");
        AudioClip audio = JApplet.newAudioClip(audioPath);
        audio.loop();
        this.setVisible(true);
        Thread t = new Thread(new Runnable() {
            public void run() {
                while (true) {
                    try {
                        Thread.sleep(300);
                        create();
                        repaint();
                    } catch (InterruptedException e) {
                    }
                }
            }
        });
        t.start();
    }
 
    public void paint(Graphics g) {
        super.paint(g);
        if (lock.tryLock()) {
            try {
                for (Iterator<XueHua> iterator = list.iterator(); iterator.hasNext();) {
                    XueHua xh = iterator.next();
                    g.drawImage(xh.img, xh.x, xh.y, null);
                }
            } finally {
                lock.unlock();
            }
        }
    }
 
    void initImages() {
        xueHuaImages = new Image[4];
        try {
            for (int i = 1; i <= 4; i++) {
                xueHuaImages[i - 1] = ImageIO.read(getClass().getResourceAsStream(i + ".png"));
            }http://www.enterdesk.com/special/shouhui/手绘图片
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
 
    protected void create() {
        XueHua e = randomNext(0);
        if (lock.tryLock()) {
            try {
                list.add(e);
            } finally {
                lock.unlock();
            }
        }
    }
 
    XueHua randomNext(int y) {
        Random random = new Random();
        int x = random.nextInt(screenSize.width);
        XueHua hua = new XueHua();
        hua.x = x;
        hua.y = y;
        hua.wind = WindType[random.nextInt(2)];
        hua.windSpeed = hua.wind * 3;
        hua.img = xueHuaImages[random.nextInt(xueHuaImages.length)];
        hua.x += hua.img.getWidth(null);
        if (hua.x >= screenSize.width) {
            hua.x = screenSize.width - hua.img.getWidth(null);
        }
        return hua;
    }
 
    public void run() {
        while (true) {
            try {
                Thread.sleep(50);
                down();
                repaint();
            } catch (InterruptedException e) {
            }
        }
    }
 
    protected void down() {
        if (lock.tryLock()) {
            try {
                for (Iterator<XueHua> it = list.iterator(); it.hasNext();) {
                    XueHua xh = it.next();
                    if (xh.y > screenSize.height) {
                        it.remove();
                        continue;
                    }
                    if (xh.x < 0 || xh.x > (screenSize.width - xh.img.getWidth(null))) {
                        xh.wind *= -1;
                        xh.windSpeed *= -1;
                    }
                    xh.x += xh.windSpeed;
                    xh.y += 3;
                }
            } finally {
                lock.unlock();
            }
        }
    }
 
    class XueHua {
        public int x;
        public int y;
        public int wind;
        public int windSpeed;
        public Image img;
    }
 
    public static void main(String[] args) {
        Thread start = new Thread(new MerryChristmas());
        start.start();
    }
}

java版的下雪,大家圣诞快乐的更多相关文章

  1. ArcGIS Server 10 Java 版的Rest服务手动配置方法

    Java版的Manager中发布的服务默认只发布了该服务的SOAP接口,而REST接口需要用户在信息服务器,如Tomcat. Apache.WebLogic等中手工配置.由于在Java版的Server ...

  2. PetaPojo —— JAVA版的PetaPoco

    背景 由于工作的一些原因,需要从C#转成JAVA.之前PetaPoco用得真是非常舒服,在学习JAVA的过程中熟悉了一下JAVA的数据组件: MyBatis 非常流行,代码生成也很成熟,性能也很好.但 ...

  3. 【转载】java版打字练习软件

    网上找到一个java版的打字的游戏 import java.applet.Applet; import java.applet.AudioClip; import java.awt.Dimension ...

  4. 微博地址url(id)与mid的相互转换 Java版

    原理: 新浪微博的URL都是如:http://weibo.com/2480531040/z8ElgBLeQ这样三部分. 第一部分(绿色部分)为新浪微博的域名,第二部分(红色部分)为博主Uid,第三部分 ...

  5. JCEF3——谷歌浏览器内核Java版实现(一):使用jawt获取窗体句柄

    前言 最近一段时间研究谷歌浏览器内核.谷歌浏览器内核一直开源,并维护更新,它的开源项目中内核更新速度和Chrome浏览器版本更新进度一样!而且它不同于WebKit(值得一题的是谷歌浏览器已不使用Web ...

  6. Selenium关键字驱动测试框架Demo(Java版)

    Selenium关键字驱动测试框架Demo(Java版)http://www.docin.com/p-803493675.html

  7. 第九篇 :微信公众平台开发实战Java版之如何实现自定义分享内容

    第一部分:微信JS-SDK介绍 微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包. 通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照.选图.语音.位置等手机系统 ...

  8. 第八篇 :微信公众平台开发实战Java版之如何网页授权获取用户基本信息

    第一部分:微信授权获取基本信息的介绍 我们首先来看看官方的文档怎么说: 如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑. 关于网页授权回调域 ...

  9. 第七篇 :微信公众平台开发实战Java版之如何获取微信用户基本信息

    在关注者与公众号产生消息交互后,公众号可获得关注者的OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一的.对于不同公众号,同一用户的openid不同). 公众号可通过本接口来根据O ...

随机推荐

  1. 【Maven jar】打包单个或多个文件,有依赖jar包的将架包一起打包成一个jar包供别的项目引用

    之前有一片文章,是打包单个java文件的.这次想要将http://www.cnblogs.com/sxdcgaq8080/p/8398780.html  打包成jar包,发现这个java文件中引用了多 ...

  2. Unity -- 入门教程一

    首先声明一下,我用的Unity版本是4.6.6,编译环境是VS2010,其余的我会慢慢介绍,安装的过程这里我就不做讲解了,度娘那会做的比我详细.安装包可以在最下面的联系方式找我要,现在开始进入主题.  ...

  3. Mingw/Code::Block/wxWidgets 搭建

    Mingw The MinGW project maintains and distributes a number of different core components and suppleme ...

  4. 这一篇里面有很多关于scala的list的操作的好的知识

    https://www.cnblogs.com/weilunhui/p/5658860.html 1.++[B]   在A元素后面追加B元素 1 2 3 4 5 6 7 8 9 10 11 12 13 ...

  5. C#遇见的函数

    1.类Stopwatch    提供一组方法和属性,可用于准确地测量运行时间. 命名空间:   System.Diagnostics Stopwatch timePerParse = Stopwatc ...

  6. react 通过 classnames 处理 多个class 的问题

    react原生动态添加多个className会报错: import style from './style.css' <div className={style.class1 style.cla ...

  7. Odoo10尝鲜: 采购协议

    Odoo10 对 call for bid 进行了 改进, 作为 '采购协议' 进入 采购, 选择 'Purchase agreement' 在 agreement 列表 建立新的 协议 选择 协议类 ...

  8. 实现TextView中link的点击效果

    朋友们,你们在TextView处理link的时候是不是一直被苦逼的android默认的方式困扰?每次点击link的时候,点击效果是整个textview来响应.非常烂吧?原因就不多赘述了. 那么以下这个 ...

  9. professional cuda c programming--CUDA库简单介绍

    CUDA Libraries简单介绍   上图是CUDA 库的位置.本文简要介绍cuSPARSE.cuBLAS.cuFFT和cuRAND.之后会介绍OpenACC. cuSPARSE线性代数库,主要针 ...

  10. iOS开发 - UIViewController控制器管理

    创建一个控制器 控制器常见的创建方式有下面几种 //通过storyboard创建 //直接创建 ViewController *vc = [[ViewController alloc] init]; ...