前几天在论坛讨论了Drools后,说到了Drools的问题,根据DaDa老兄的描述,找到了Drools 3.1M1,发现From Collect真的不错。已经试着成功集成到公司开发框架中(现在可以不重新编辑,只是改改文本文件就达到调整Control层的效果),昨晚突发奇想,试着花了几个小时用Drools写了一个Tank自动对打游戏,感觉还不错。打算后续完善一下,集成同事推荐的robocode玩玩。 相信Drools3.2正式版出来以后,用这个搞开发真的会很流行
Copy一段昨晚Rule上来抛砖引玉,帮助想了解M1却不想看E文的朋友。
规则代码
- package warrule
-
- import warunit.Tank;
- import work.Hit;
- import work.Exp;
- import work.Order;
- import java.util.ArrayList;
-
- rule "destroy"
- salience 1000
- when
- tk:Tank(life <= 0 , $id:id)
- ht:Hit(to == $id ,$s:soruce)
- xp:Exp(status ==0)
- then
- System.out.println("Tank:"+ $id +" 被"+ $s +"击毁!");
- xp.setCt(1);
- xp.setId($s);
- xp.setStatus(1);
- retract(tk);
- modify(xp);
- end
-
- rule "get exp"
- salience 950
- when
- xp:Exp(status == 1,$id:id,$ct:ct)
- tk:Tank(id==$id,$xp:exp)
- then
- xp.setStatus(0);
- modify(xp);
- int nxp =$xp + $ct;
- tk.setExp(nxp);
- modify(tk);
- System.out.println("Tank:"+ $id +" 击毁Tank,获取经验:1,现有经验:"+ nxp);
- end
-
- rule "hit by enemy"
- salience 900
- when
- ht:Hit(status ==1,$t:to,$ht:hit)
- tk:Tank(id == $t,$lf:life)
- then
- int rm = $lf - $ht;
-
- ht.setStatus(0);
- tk.setLife(rm);
- modify(tk);
- modify(ht);
- end
-
-
-
- rule "hit enemy right"
- salience 800
- when
- ht:Hit(status ==0 )
- $tk:Tank(run >0 , $x:x,$y:y,$id:id,$t:team,$r:run,$ht:hit)
- li:ArrayList(size >0) from collect( Tank(x ==($x+1),y==$y,team != $t))
- then
- Tank tk1 = (Tank)li.get(0);
- System.out.print("Tank:"+ $id +" 打击右侧敌人:" + tk1.getId() );
- ht.setSoruce($id);
- ht.setTo(tk1.getId());
- ht.setHit($ht);
- ht.setStatus(1);
- $tk.setRun($r-1);
- modify($tk);
- modify(ht);
- end
-
-
-
- rule "hit enemy left"
- salience 800
- when
- ht:Hit(status ==0 )
- $tk:Tank(run >0 , $x:x,$y:y,$id:id,$t:team,$r:run,$ht:hit)
- li:ArrayList(size >0) from collect( Tank(x ==($x-1),y==$y,team != $t))
- then
- Tank tk1 = (Tank)li.get(0);
- System.out.print("Tank:"+ $id +" 打击左侧敌人:" + tk1.getId() );
- ht.setSoruce($id);
- ht.setTo(tk1.getId());
- ht.setHit($ht);
- ht.setStatus(1);
- $tk.setRun($r-1);
- modify($tk);
- modify(ht);
- end
-
-
- rule "hit enemy down"
- salience 800
- when
- ht:Hit(status ==0 )
- $tk:Tank(run >0 , $x:x,$y:y,$id:id,$t:team,$r:run,$ht:hit)
- li:ArrayList(size >0) from collect( Tank(x ==$x,y==($y+1),team != $t))
- then
- Tank tk1 = (Tank)li.get(0);
- System.out.print("Tank:"+ $id +" 打击下侧敌人:" + tk1.getId() );
- ht.setSoruce($id);
- ht.setTo(tk1.getId());
- ht.setHit($ht);
- ht.setStatus(1);
- $tk.setRun($r-1);
- modify($tk);
- modify(ht);
- end
-
- rule "hit enemy up"
- salience 800
- when
- ht:Hit(status ==0 )
- $tk:Tank(run >0 , $x:x,$y:y,$id:id,$t:team,$r:run,$ht:hit)
- li:ArrayList(size >0) from collect( Tank(x ==$x,y==($y-1),team != $t))
- then
- Tank tk1 = (Tank)li.get(0);
- System.out.print("Tank:"+ $id +" 打击上侧敌人:" + tk1.getId() );
- ht.setSoruce($id);
- ht.setTo(tk1.getId());
- ht.setHit($ht);
- ht.setStatus(1);
- $tk.setRun($r-1);
- modify($tk);
- modify(ht);
- end
-
- rule "goRight"
- salience 100
- when
- od:Order(status ==1,px:px,py:py);
- tk:Tank(x < px, run > 0,$x:x,$y:y,$r:run,$id:id )
- ArrayList(size == 0) from collect( Tank(x ==($x+1),y==$y))
- then
- int $nx = $x +1;
-
- tk.setX($nx);
- tk.setRun($r-1);
- modify(tk);
- end
-
- rule "goRightDown"
- salience 150
- when
- od:Order(status ==1,px:px,py:py);
- tk:Tank(x < px, y < py, run > 0,$x:x,$y:y,$r:run,$id:id )
- ArrayList(size == 0) from collect( Tank(x ==($x+1),y==($y+1)))
- then
- int $nx = $x +1;
- int $ny = $y +1;
-
- tk.setX($nx);
- tk.setY($ny);
- tk.setRun($r-1);
- modify(tk);
- end
-
- rule "goLeftDown"
- salience 150
- when
- od:Order(status ==1,px:px,py:py);
- tk:Tank(x > px, y < py, run > 0,$x:x,$y:y,$r:run,$id:id )
- ArrayList(size == 0) from collect( Tank(x ==($x-1),y==($y+1)))
- then
- int $nx = $x -1;
- int $ny = $y +1;
-
- tk.setX($nx);
- tk.setY($ny);
- tk.setRun($r-1);
- modify(tk);
- end
-
- rule "goLeftUp"
- salience 150
- when
- od:Order(status ==1,px:px,py:py);
- tk:Tank(x > px, y > py, run > 0,$x:x,$y:y,$r:run,$id:id )
- ArrayList(size == 0) from collect( Tank(x ==($x-1),y==($y-1)))
- then
- int $nx = $x -1;
- int $ny = $y -1;
-
- tk.setX($nx);
- tk.setY($ny);
- tk.setRun($r-1);
- modify(tk);
- end
-
- rule "goRightUp"
- salience 150
- when
- od:Order(status ==1,px:px,py:py);
- tk:Tank(x < px, y > py, run > 0,$x:x,$y:y,$r:run,$id:id )
- ArrayList(size == 0) from collect( Tank(x ==($x+1),y==($y-1)))
- then
- int $nx = $x + 1;
- int $ny = $y - 1;
-
- tk.setX($nx);
- tk.setY($ny);
- tk.setRun($r-1);
- modify(tk);
- end
-
-
- rule "goLeft"
- salience 100
- when
- od:Order(status ==1,px:px,py:py);
- tk:Tank(x > px , run > 0,$x:x,$y:y,$r:run,$id:id )
- ArrayList(size == 0) from collect( Tank(x == ($x-1),y==$y))
- then
- int $nx = $x - 1;
-
- tk.setX($nx);
- tk.setRun($r-1);
- modify(tk);
- end
-
-
- rule "goDown"
- salience 100
- activation-group "down"
- when
- od:Order(status ==1,px:px,py:py);
- tk:Tank(y < py, run > 0,$x:x,$y:y,$r:run,$id:id )
- ArrayList(size == 0) from collect( Tank(x == $x,y== ($y+1) ))
- then
- int $ny = $y +1;
-
- tk.setY($ny);
- tk.setRun($r-1);
- modify(tk);
- end
-
- rule "goDownTarget"
- salience 200
- activation-group "down"
- when
- od:Order(status ==0,tm:team,px:px,py:py);
- tk:Tank(team ==tm, y < py, run > 0,$x:x,$y:y,$r:run,$id:id )
- ArrayList(size == 0) from collect( Tank(x == $x,y== ($y+1) ))
- then
- int $ny = $y +1;
-
- tk.setY($ny);
- tk.setRun($r-1);
- modify(tk);
- end
-
- rule "goUp"
- salience 100
- when
- od:Order(status ==1,px:px,py:py);
- tk:Tank(y > py, run > 0,$x:x,$y:y,$r:run,$id:id )
- ArrayList(size == 0) from collect( Tank(x == $x,y== ($y-1)))
- then
- int $ny = $y - 1;
-
- tk.setY($ny);
- tk.setRun($r-1);
- modify(tk);
- end
-
- rule "atTarget"
- salience 0
- when
- od:Order(status ==1,px:px,py:py);
- tk:Tank(x == px, y==py,$x:x,$y:y,$r:run,$id:id)
- then
- System.out.println("Tank:["+ $id +"]到达中心["+ $x +","+ $y +"],剩余:"+ $r);
- end
分享到:
相关推荐
drools drools drools drools drools
1 Drools简介1.1 Drools的作用1.2 使用规则引擎的优势1.3 规则引擎应用场景2 Drools初体验2.1 构建项目2.2 案例描述 2.3 代码实现3 Drools语法介绍3.1 规则文件的组成3.2 规则体语法结构3.3 Pattern模式匹配 ...
drools6开发文档技术文档新手可以研究学习下
drools5.1_开发中文文档drools5.1_开发中文文档drools5.1_开发中文文档drools5.1_开发中文文档
drools的开发教程,针对版本5的,介绍比较详细
Drools5规则引擎中文开发文档,主要内容包括:开发环境搭建、开发例子
Drools5 规则引擎开发教程 图文教程 介绍drools 入门
Drools5规则引擎开发教程
Drools5.x 规则引擎开发教程 比较详细的介绍了规则引擎的作用 以及基础知识 规则编写案例 开发案例
drools
规则引擎Drools在J2EE项目开发中的应用...
drools5规则引擎的开发教程介绍 drools5规则引擎开发教程
Drools4 Demo 实例 Drools4示例 Drools4例子
Drools5规则引擎开发教程.pdfDrools5规则引擎开发教程.pdfDrools5规则引擎开发教程.pdf
Drools开发最全中文版技术指南。 Drools开发最全中文版技术指南,介绍了常见的drools如何进行开发,注意是:中文版中文版中文版! drools 中文文档 规则引擎 drools6 drools7 Java
Drools开发最全中文版技术指南,介绍了常见的drools如何进行开发,注意是:中文版中文版中文版!
Drools最新版本6.x的详细开发文档
Drools(JBoss Rules )具有一个易于访问企业策略、易于调整以及易于管理的开源业务规则引擎,符合业内标准,速度快、效率高。业务分析师或审核人员可以利用它轻松查看业务规则,从而检验是否已编码的规则执行了所需...