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. Endless Pallet(min-max容斥)

    地址:传送门 分析: 设$x_i$表示第i个点被染成黑色的时间,所求即为$E(max \left \{x_i  \right \})$ 因为$E(X)=\sum_{k=1}^{\infty}i \ti ...

  2. 公共返回JSON信息的方法

    java代码: public void returnMessage(HttpServletResponse response, Object str){ PrintWriter write = nul ...

  3. mysql InnoDb存储引擎索引

    B+树索引:使用B+树索引查找数据时,并不能找到一个给定键值的具体行,只是找到被查找数据行所在的页,然后数据库通过把页读取到内存,再在内存中进行查找,最后得到要查找的数据. 聚集索引:按照表中主键构造 ...

  4. JRoll 2 使用文档(史上最强大的下拉刷新,滚动,无限加载插件)

    概述 说明 JRoll,一款能滚起上万条数据,具有滑动加速.回弹.缩放.滚动条.滑动事件等功能,兼容CommonJS/AMD/CMD模块规范,开源,免费的轻量级html5滚动插件. JRoll第二版是 ...

  5. 四个很好的开源app项目

    Open Source and the iOS App Store Today, we are open-sourcing 4 iOS apps: ThatInbox, an email client ...

  6. 关于在iOS设备上探测WIFI,3G,GPRS使用情况的细节

    由于设计的游戏需要有一些联网请求,但有时候在设备未连接网络的情况下,如果对网络情况不加以判断,则可能造成游戏为了等游戏超时,浪费不必要的时间. 所以在游戏启动时检测一下网络状况是很必要的,而且当玩家的 ...

  7. Android -- 开机启动无界面后台程序

    简单的说,这是一个没有界面的后台运行的应用程序 而且,还有一功能:开机自启动,启动运行一个服务 程序结构非常简单,两个类,一个是service的扩展类,一个是BroadcastReceiver扩展类 ...

  8. 您也使用托管C++吗? 【转】

    http://blog.csdn.net/Muf/article/details/656920 转向.NET后,手头上往往仍有旧的模块要重用.也许这些模块是Delphi写的,也许是C/C++写的,或者 ...

  9. DNS 域名解析过程

    当用户在浏览器中输入域名并按下回车键后,DNS解析会有如下7个步骤 浏览器缓存 浏览器会检查缓存中有没有这个域名对应的解析过的IP地址,如果缓存中有,这个解析过程就将结束.浏览器缓存域名也是有限制的, ...

  10. php-fpm.conf配置说明(重点要改动和优化的地方)

    <?xml version="1.0" ?> <configuration> All relative paths in this config are r ...