java版的下雪,大家圣诞快乐
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版的下雪,大家圣诞快乐的更多相关文章
- ArcGIS Server 10 Java 版的Rest服务手动配置方法
Java版的Manager中发布的服务默认只发布了该服务的SOAP接口,而REST接口需要用户在信息服务器,如Tomcat. Apache.WebLogic等中手工配置.由于在Java版的Server ...
- PetaPojo —— JAVA版的PetaPoco
背景 由于工作的一些原因,需要从C#转成JAVA.之前PetaPoco用得真是非常舒服,在学习JAVA的过程中熟悉了一下JAVA的数据组件: MyBatis 非常流行,代码生成也很成熟,性能也很好.但 ...
- 【转载】java版打字练习软件
网上找到一个java版的打字的游戏 import java.applet.Applet; import java.applet.AudioClip; import java.awt.Dimension ...
- 微博地址url(id)与mid的相互转换 Java版
原理: 新浪微博的URL都是如:http://weibo.com/2480531040/z8ElgBLeQ这样三部分. 第一部分(绿色部分)为新浪微博的域名,第二部分(红色部分)为博主Uid,第三部分 ...
- JCEF3——谷歌浏览器内核Java版实现(一):使用jawt获取窗体句柄
前言 最近一段时间研究谷歌浏览器内核.谷歌浏览器内核一直开源,并维护更新,它的开源项目中内核更新速度和Chrome浏览器版本更新进度一样!而且它不同于WebKit(值得一题的是谷歌浏览器已不使用Web ...
- Selenium关键字驱动测试框架Demo(Java版)
Selenium关键字驱动测试框架Demo(Java版)http://www.docin.com/p-803493675.html
- 第九篇 :微信公众平台开发实战Java版之如何实现自定义分享内容
第一部分:微信JS-SDK介绍 微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包. 通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照.选图.语音.位置等手机系统 ...
- 第八篇 :微信公众平台开发实战Java版之如何网页授权获取用户基本信息
第一部分:微信授权获取基本信息的介绍 我们首先来看看官方的文档怎么说: 如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑. 关于网页授权回调域 ...
- 第七篇 :微信公众平台开发实战Java版之如何获取微信用户基本信息
在关注者与公众号产生消息交互后,公众号可获得关注者的OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一的.对于不同公众号,同一用户的openid不同). 公众号可通过本接口来根据O ...
随机推荐
- Java获取当前时间戳/时间戳转换
时间戳精度有两个概念:1是精确到秒,2是精确到毫秒. 要操作时间戳和时间戳转换为时间一般对应的对象就是Date,而Date各种转换离不开SimpleDateFormat: 如果是要获取时间指定的年月日 ...
- python--文本处理1
1.字符和字符值之间的转换 内建函数:ord(),chr() >>> print ord("a") 97 >>> print chr(97) a ...
- 【Exception】查看异常出现在具体的文件名/类名/方法名/具体行号
今天在处理异常日志保存过程中,想要获取到异常抛出在具体在那个文件,哪个类下的哪个方法中的具体第几行,所以具体实现如下 try{ Integer adminID = Integer.parseInt(a ...
- Unity -- 用EasyAR制作出AR红包
第一部分:前言 实现功能:打开APP或运行该demo后,会从天而降红包,有些红包是空的(大一点的),抖动的红包里面“有钱”,点击之后会产生相应的交互. 第二部分:预览 所用到的资源: 红包模型 ...
- android中setClickable,setEnabled,setFocusable的含义及区别
setClickable 设置为true时,表明控件可以点击,如果为false,就不能点击:“点击”适用于鼠标.键盘按键.遥控器等: 注意,setOnClickListener方法会默认把控件的se ...
- sdut 面向对象程序设计上机练习九(对象指针)
面向对象程序设计上机练习九(对象指针) Time Limit: 1000MS Memory limit: 65536K 题目描写叙述 建立对象数组,内放5个学生数据(学号是字符串类型.成绩是整型).设 ...
- Cocos2d-x学习笔记(18)(TestCpp源代码分析-2)
本章主要讲controller.h/cpp文件的分析,该文件主要用于演示样例场景管理类TestController,用于显示全部演示样例的菜单. //controller.cpp #include & ...
- 用 Sencha Touch 构建移动 web 应用程序
Sencha Touch 是一个使用 HTML5.CSS3 和 JavaScript 语言构建的移动 web 应用程序框架,在本文中,学习如何应用您当前的 web 开发技能进行移动 web 开发.下载 ...
- ios文件系统文件目录操作
对于一个运行在iPhone得app,它只能访问自己根目录下得一些文件(所谓sandbox). 一个app发布到iPhone上后,目录结构如下: 1.其中获取 app root 可以用 NSHomeDi ...
- HTML5、CSS3等新特性:
HTML5:1/绘画 canvas 元素;2/用于媒介回放的 video 和 audio 元素;3/本地离线存储 localStorage 长期存储数据,浏览器关闭后数据不丢失;4/sessionSt ...