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. Java实验--关于课上找“水王”问题分析

    问题的表述就是说有那么一个人,他在一个论坛上发帖,然后每贴必回,自己也发帖.那么这个人在发帖的数目上就超过了整个论坛的帖子数目的一半以上. 我对这个问题一开始的思路是,用SQL语句获取整个列表中的数据 ...

  2. redis容量预估

    2.存储的数据内容:前端系统登录用到的Token,类型:key:string(32),value:string(32)3.业务场景存数据:用户登录验证成功后,ICORE-PAP后台产生Token(st ...

  3. SilverLight:基础控件使用(3)-DataGrid控件

    ylbtech-SilverLight-Basic-Control:基础控件使用(3)-DataGrid控件 DataGrid控件-后台绑定 自动生成表列 不自动生成表列 1.A,返回顶部Person ...

  4. Git以及github的使用方法(六),管理修改

    现在,假定你已经完全掌握了暂存区的概念.下面,我们要讨论的就是,为什么Git比其他版本控制系统设计得优秀,因为Git跟踪并管理的是修改,而非文件. 你会问,什么是修改?比如你新增了一行,这就是一个修改 ...

  5. 嵌入式Linux驱动案例之中的一个

    前几天解决一个嵌入式Linux驱动问题,做为一个案例进行记录. 本案例是一个CPU通过LocalBus总线訪问外围一个设备,详细设备是一个DSP器件.在实际应用中,性能要求非常高,对数据訪问速度提出比 ...

  6. jquery的一点点认识

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

  7. MySQL的timeout那点事

    http://www.mysqlops.com/2011/11/24/mysql_timeout.html

  8. 搭建mongoDB 配置副本集 replSet

    mongodb的master_slave和ReplSet是很常见的两种构架: 下面记录下搭建mongodbReplSet 的过程: 首先,进入到一个指定目录下 >cd /opt 下载mongod ...

  9. 三星note3 N900刷机包 4.4.2 ZSUDNE3 官方原汁原味 稳定流畅

    ROM介绍 此ROM基于最新的4.4.2 ZSUDNE3 制作,加入一些必要功能,其它性能基本与官方无差距,各方面感觉都非常不错了.此ROM本人自用,所以制作风格有点个人倾向.不论什么建议或者问题欢迎 ...

  10. Java中的枚举类为何不能有public构造器

    声明:本博客为原创博客.未经同意.不得转载!原文链接为http://blog.csdn.net/bettarwang/article/details/27262809. 从Java 5開始有了枚举类, ...