Swing动画之敌机工厂

一、游戏效果图:敌军飞机向我方袭来

二、实现原理:在窗体的最上方,沿着X轴按照一定的时间间隔重绘一群敌方飞机,敌方飞机组会沿着Y轴运动,当被我方飞机打中或越界,就定这个敌机已坠毁或与子弹进行了碰撞。代码里创建了一个飞机工厂类与一个飞机管理类,其中飞机管理器中用了Timer ,定时去让飞机工厂去生产飞机,部分代码如下。

三、代码 :

package com.jack;

import com.jack.imp.IPlan;

/**
 * 敌机工厂类: 用泛型时行了两层限制:1.必须是CLASS类型,2.必须是IEnemy实现类
 *
 * @author laughing
 * @date 2014年11月20日 下午9:46:46
 */
public abstract class AbstractEnemyFactory {
	public abstract <T extends IPlan> T createEnemy(Class<T> c);
}
package com.jack;

import com.jack.imp.IPlan;

/**
 *
 * @author laughing
 * @date 2014年11月20日 下午9:50:22
 */
public class EnemyFactory extends AbstractEnemyFactory {

	@Override
	public <T extends IPlan> T createEnemy(Class<T> c) {
		IPlan enemy = null;
		try {
			enemy = (IPlan) Class.forName(c.getName()).newInstance();
		} catch (Exception e) {
			System.out.println("敌机生产失败.");
		}
		return (T) enemy;
	}

}
package com.jack;

import java.util.HashMap;
import java.util.Map;
import java.util.TimerTask;

import com.jack.imp.IPlan;

/**
 *
 * @author laughing
 * @email [email protected]
 * @date 2014年11月20日 下午10:07:29
 */
public class EnemyManager {
	public static EnemyManager			instance;
	public static Map<Integer, IPlan>	enemyMap	= new HashMap<Integer, IPlan>();
	public static final int				limtNum		= 3;
	private int							enemyID		= 0;
	public EnemyFactory					factory		= new EnemyFactory();

	public EnemyManager() {
		cratePlan();
	}

	/**
	 * @return the enemyMap
	 */
	public static Map<Integer, IPlan> getEnemyMap() {
		return enemyMap;
	}

	public void cratePlan() {
		java.util.Timer timer = new java.util.Timer(true);

		TimerTask task = new TimerTask() {
			public void run() {
				for (int i = 0; i < limtNum; i++) {

					IPlan plan = null;
					if (i == 0) {
						plan = factory.createEnemy(Enemy1.class);
					} else if (i == 1) {
						plan = factory.createEnemy(Enemy2.class);
					} else {
						plan = factory.createEnemy(Enemy3.class);
					}

					enemyMap.put(++enemyID, plan);
				}
			}
		};

		timer.schedule(task, 1000, 2000);

	}

	public void clearEnemy(int key) {
		enemyMap.remove(key);
	}

	/**
	 * @return the instance
	 */
	public static EnemyManager getInstance() {
		if (instance == null) {
			instance = new EnemyManager();
		}
		return instance;
	}

}

四、源码: 点击打开链接

时间: 2024-10-13 08:17:26

Swing动画之敌机工厂的相关文章

Java Swing 动画(二)

一.动画效果:实现了飞机飞行的动画效果,也实现了飞机的移动. 二.实现原理: 1.飞机飞行 的效果:其实也还是重写paintComponent,按照一定的时间间隔更换图片就有了飞行的效果,动画就是更换图片. 2.移动飞机:实现KeyListener这个接口,这个接口可以接收键盘的事件.用这个面板容器去监听些事件. 三.代码: package com.jack; import java.awt.GridLayout; import java.awt.List; import javax.swing

Swing动画之子弹

一.游戏效果图: 飞机发射的子弹 二.实现原理:重写paintComponet方法,按照一定的时间间隔,让子弹的坐标一直向Y轴递减,这样这实现了子弹的运动效果,子弹重画的开始位置就是飞机的坐标. 三.代码:在前两次的基础,把代码进行一些简单优化,如下: package com.jack; import java.awt.Graphics; import java.awt.Image; import java.awt.image.ImageObserver; import javax.swing.

jq动画分析1

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

jq动画分析

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

一款简洁而强大的前端框架JQUery—动画效果及剪刀石头布小游戏

jQuery是什么? jQuery是一个快速.简洁的JavaScript框架,它封装JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作.事件处理.动画设计和Ajax交互.它封装JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作.事件处理.动画设计和Ajax交互. JQuery效果-隐藏和显示 .show()让隐藏的元素显示.效果为:同时修改元素的高度.宽度.opacity属性 .hide()让显示

jq时间戳动画

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Typ

一个类似于jq的小型库

本人写了一个类似于jq的小型库,不过只是写了部分方法而已.并没有jq那么全面,下面就介绍下有哪些方法可以使用 第一个是选择器, 选择器比较简单 只支持ID选择器 $(‘#id_name’) Class选择器$(‘.class_name’) 标签选择器$(‘tag _name’) 并没有像jq那样拥有高级的选择器. 方法有 Js延迟加载 Ready     $(document).ready(function(){ // 在这里写你的代码... }); $(functoin(){ }) 事件有 C

【干货篇】步步为营,带你轻松掌握jQuery!

写在前面:经过系统的学习了原生JS之后,会发现其具有以下三个特点: 1.是一种解释性脚本语言(代码不进行预编译). 2.主要用来向 HTML 页面添加交互行为. 3.可以直接嵌入 HTML 页面,但写成单独的js文件有利于结构和行为的分离. 而接下来要讲的jQuery 就对原生javascript的一个扩展,封装,就是让javascript更好用,更简单. 换而言之,jquery就是要用更少的代码,漂亮的完成更多的功能.{Write less, Do more!} 1. jQuery 作为 Ja

Jcrop最新手册

目录 Jcrop简介 Jcrop 是一个功能强大的 jQuery 图像裁剪插件,结合后端程序(例如:PHP)可以快速的实现图片裁剪的功能. Jcrop是一款免费的软件,采用MIT License发布. 注:本文主要围绕 Jcrop v2.0.0-RC1 版本进行介绍,一些参数或API在 Jcrop v0.9.12 及之前版本中可能并不支持. 版本 Jcrop v0.9.12 支持画一个框截取图片. Jcrop v2.0.0-RC1 相比于老版本,新增了支持画多框的功能. 下载地址: http:/