Swing动画之敌机工厂实例



Swing动画之敌机工厂实例。

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

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

三、代码 :

 

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

 

  1. package com.jack;
  2. import com.jack.imp.IPlan;
  3. /**
  4.  *
  5.  * @author laughing
  6.  * @date 2014年11月20日 下午9:50:22
  7.  */
  8. public class EnemyFactory extends AbstractEnemyFactory {
  9.     @Override
  10.     public <T extends IPlan> T createEnemy(Class<T> c) {
  11.         IPlan enemy = null;
  12.         try {
  13.             enemy = (IPlan) Class.forName(c.getName()).newInstance();
  14.         } catch (Exception e) {
  15.             System.out.println(“敌机生产失败.”);
  16.         }
  17.         return (T) enemy;
  18.     }
  19. }

 

  1. package com.jack;
  2. import java.util.HashMap;
  3. import java.util.Map;
  4. import java.util.TimerTask;
  5. import com.jack.imp.IPlan;
  6. /**
  7.  *
  8.  * @author laughing
  9.  * @email john.cha@qq.com
  10.  * @date 2014年11月20日 下午10:07:29
  11.  */
  12. public class EnemyManager {
  13.     public static EnemyManager          instance;
  14.     public static Map<Integer, IPlan> enemyMap    = new HashMap<Integer, IPlan>();
  15.     public static final int             limtNum     = 3;
  16.     private int                         enemyID     = 0;
  17.     public EnemyFactory                 factory     = new EnemyFactory();
  18.     public EnemyManager() {
  19.         cratePlan();
  20.     }
  21.     /**
  22.      * @return the enemyMap
  23.      */
  24.     public static Map<Integer, IPlan> getEnemyMap() {
  25.         return enemyMap;
  26.     }
  27.     public void cratePlan() {
  28.         java.util.Timer timer = new java.util.Timer(true);
  29.         TimerTask task = new TimerTask() {
  30.             public void run() {
  31.                 for (int i = 0; i < limtNum; i++) {
  32.                     IPlan plan = null;
  33.                     if (i == 0) {
  34.                         plan = factory.createEnemy(Enemy1.class);
  35.                     } else if (i == 1) {
  36.                         plan = factory.createEnemy(Enemy2.class);
  37.                     } else {
  38.                         plan = factory.createEnemy(Enemy3.class);
  39.                     }
  40.                     enemyMap.put(++enemyID, plan);
  41.                 }
  42.             }
  43.         };
  44.         timer.schedule(task, 1000, 2000);
  45.     }
  46.     public void clearEnemy(int key) {
  47.         enemyMap.remove(key);
  48.     }
  49.     /**
  50.      * @return the instance
  51.      */
  52.     public static EnemyManager getInstance() {
  53.         if (instance == null) {
  54.             instance = new EnemyManager();
  55.         }
  56.         return instance;
  57.     }
  58. }

 

四、源码: 点击打开链接

http://blog.csdn.net/laughing2me/article/details/41357861