和时间赛跑!

我会追上时间

 
 Blog首页我的首页 我的文章我的像册我的圈子后台管理给我留言聚合
当前位置:首页-和时间赛跑!->文章内容
细化一下大峡的格斗
评论数() 阅读次数(289)发布时间:2006-12-06 14:58
昨天看大峡写的AOP切面的格斗游戏,挺有趣,顺手给他更加细致化一下,增加几个切入点,增加一个无敌英雄easyjf,使得观察战斗更加细致,RecordGame.aj代码如下:
public aspect RecordGame {
 private static java.text.SimpleDateFormat df = new java.text.SimpleDateFormat(
   "yyyy-MM-dd H:m:s");
 pointcut doRecord():execution(boolean Soldier.attack(Soldier));
 pointcut supperRole(Soldier s): target(s)&&execution(boolean Soldier.canTreat());
 pointcut doDodge():execution(boolean Soldier.dodge());
 pointcut doMove():call(void Soldier.move());
    pointcut supperAdmin(Soldier s):target(s)&&execution(boolean Soldier.dodge());
 after() returning(boolean value) :doRecord()
  {
  Soldier s = (Soldier) thisJoinPoint.getTarget();
  Soldier t = (Soldier) thisJoinPoint.getArgs()[0];
  System.out.println(df.format(new java.util.Date()) + ":" + s.getName()
    + " 向 " + t.getName() + " 发动了一次攻击!--结果:"
    + (value ? "成功" : "失败"));
  System.out.println(s.getName() + "生命值:" + s.getHealth() + ";"
    + t.getName() + "生命值:" + t.getHealth());
  System.out.println(s.getName() + "的位置是:X:" + s.getX() + ",Y:"
    + s.getY());
  System.out.println(t.getName() + "的位置是:X:" + t.getX() + ",Y:"
    + s.getY());
 }
 after() returning(boolean value):doDodge(){
  Soldier s = (Soldier) thisJoinPoint.getTarget();
  if (value) {
   System.out.println(s.getName() + "躲闪成功");
  } else {
   System.out.println(s.getName() + "躲闪失败");
  }
 }
 after():doMove(){
  Soldier s = (Soldier) thisJoinPoint.getTarget();
  System.out.println(s.getName() + "开始移动");
  System.out.println(s.getName() + "新的位置是:x:" + s.getX() + "y:"+ s.getY());
   }
 after(Soldier s)returning(boolean value):target(s)&&call(boolean Soldier.canTreat())
  {
  if (value)
   System.out.println(s.getName() + "得到治疗!");
 }
 boolean around(Soldier s): supperRole(s)
  {
  if ("super".equals(s.getName()))
   return true;
  else
   return proceed(s);
 }
boolean around(Soldier s):supperAdmin(s){
 if("easyjf".equals(s.getName())){
  return true;
 }else{
  return proceed(s);
 }
}
},
测试一下:
    public static void main(String[] args) {
  // TODO Auto-generated method stub
  Soldier p1=new Soldier();
  p1.setName("死亡使者");
  Soldier p2=new Soldier();
  p2.setName("月精灵"); 
  int i=0;
  while(p1.getHealth()>0 && p2.getHealth()>0)
  {
   p2.attack(p1);
   p1.attack(p2);
   i+=2;
  } 
  System.out.println("战斗次数:"+i);
  if(p1.getHealth()>0)System.out.println("死亡使者战胜!");
  else System.out.println("月精灵战胜!");
  },
运行一下(我是使用eclipse来建aspect的):
2006-12-05 9:49:37:月精灵 向 死亡使者 发动了一次攻击!--结果:失败
月精灵生命值:144;死亡使者生命值:153
月精灵的位置是:X:261,Y:279
死亡使者的位置是:X:287,Y:279
月精灵躲闪成功
死亡使者开始移动
死亡使者新的位置是:x:289y:272
死亡使者得到治疗!
2006-12-05 9:49:37:死亡使者 向 月精灵 发动了一次攻击!--结果:失败
死亡使者生命值:170;月精灵生命值:144
死亡使者的位置是:X:289,Y:272
月精灵的位置是:X:261,Y:272
死亡使者躲闪成功
月精灵开始移动
月精灵新的位置是:x:262y:279
月精灵得到治疗!
... ... ... ...
2006-12-05 9:49:37:死亡使者 向 月精灵 发动了一次攻击!--结果:成功
死亡使者生命值:-7;月精灵生命值:184
死亡使者的位置是:X:834,Y:800
月精灵的位置是:X:812,Y:800
战斗次数:806
月精灵战胜!
,换个无敌英雄“easyjf”看看,肯定任何人没有任何机会打败他,不信你可以试一试哈!
 
 【评论】 【加入收藏】 【推荐给朋友】 【字体:  】 【关闭】   

 
Aboutus | 联系我们 | 程序开发 | 网站地图 | 留言板
Copyright (C) 2005 EasyJF.com, All Rights Reserved
版权所有 简易java框架网
渝ICP备06004507 如有意见请与我们联系 Powered by EasyJFramework