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. Lazarus安装使用

    Lazarus安装使用 最后还是安装了Lazarus: 安装之后,新建了项目,还引入了Unit,就可以跑了: 学习:http://tieba.baidu.com/p/3164001113 progra ...

  2. 《从0到1》读书笔记第一章&quot;未来的挑战&quot;第2记:做老子还是做孙子

    从1到N VS 从0到1 - 别让自己的小鸡鸡抓在别人的手上 近几年国内互联网创业上非常流行一种C2C(也就是Copy to China - 复制到中国)的创业模式,打的就是一个时间差和地域差.将在国 ...

  3. hdu1034 简单模拟

    这里开一个二维数组.num[105][2];   我也不知道N有多少,随便开的,  那么这里num[i][0] 表示当前 第 i 个人拥有的糖果数,num[i][1]表示他上面一个人分给他的糖果数.详 ...

  4. vue2.0 自定义 折叠列表(Accordion)组件

    1.自定义  折叠列表 Accordion.vue (1)sass  版本 <!-- 折叠列表 组件 --> <template> <nav :class="$ ...

  5. HDU ACM 1073 Online Judge -&gt;字符串水题

    分析:水题. #include<iostream> using namespace std; #define N 5050 char a[N],b[N],tmp[N]; void Read ...

  6. jquery的一点点认识

    概述 JQuery是继prototype之后又一个优秀的Javascript库.它是轻量级的js库 .它兼容CSS3,还兼容各种浏览器(IE 6.0+, FF 1.5+, Safari 2.0+, O ...

  7. SGPIO

    http://en.wikipedia.org/wiki/SGPIO SGPIO From Wikipedia, the free encyclopedia   Serial General Purp ...

  8. viewpager 跳转到指定页面

    viewPager.setCurrentItem(getUserIndex(userId)); seCurrentItem是定位到指定页面参数是position

  9. 已迁移到http://www.coffin5257.com

    点我直达

  10. 按照HashMap中value值进行排序

    import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileNotFoundException; ...