前几天在论坛讨论了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 是一个强大的规则引擎和业务规则管理系统,用于在Java应用程序中实现复杂的业务逻辑。它基于规则推理,允许用户以声明式的方式定义规则,并在运行时执行这些规则。drools 提供了一个高效的决策自动化框架,...
### Drools 6 开发文档知识点详解 #### 一、Drools 规则引擎基本介绍 ##### 1.1 Drools 基本介绍 Drools 是一款使用 Java 编写的开源规则引擎,其核心功能是提供一种声明式的方式来表达业务逻辑,允许开发者以非 ...
Drools能够快速、低成本地更新业务规则,并允许业务人员直接管理系统中的规则,而不需要程序开发人员的参与。其作用和优点包括将业务规则与业务系统分离,解耦合,实现自然语言描述的规则逻辑,提高复杂逻辑代码的可...
接下来是搭建开发环境,这包括下载并安装 Eclipse 3.4 版本的集成开发环境(IDE)以及 Drools5 提供的 Eclipse 插件版 IDE 和开发工具包。这些资源可以从 Eclipse 官网和 JBoss Drools 下载页面获得。安装过程中需要...
### Drools5规则引擎开发文档知识点详解 #### 一、Drools5规则引擎简介 Drools是一款基于Java的开源规则引擎,广泛应用于业务逻辑处理领域,它可以帮助开发者快速地构建灵活且复杂的业务规则系统。Drools支持多种...
3.1 Drools HelloWorld 初识Drools,通常从HelloWorld开始,它会演示如何创建一个简单的规则,并在运行时触发这个规则。 3.2 Drools语言 Drools规则语言包含了规则文件、规则定义、LHS(Left-Hand Side,规则条件)...
** Drools 概述 ** Drools 是一个开源规则引擎,它允许开发者编写和执行业务规则,使得软件系统能够根据预定义的条件自动做出决策。Drools 提供了一个强大的规则语言(DRL - Drools Rule Language)来声明规则,...
在J2EE项目开发中,规则引擎Drools扮演着重要的角色,它是一个开源的业务规则管理系统(BRMS),能够帮助开发者将业务规则从应用程序逻辑中分离出来,从而实现更灵活、可维护的代码结构。Drools的核心功能是解析、...
这个“Drools5规则引擎开发教程”将带你深入理解Drools5的核心概念和功能,帮助你有效地在业务应用中实施规则引擎。 一、Drools5简介 Drools5是JBOSS公司推出的开源规则引擎,其核心是基于Rete算法的推理引擎。Rete...
《Drools5规则引擎开发教程》是一本深入解析Drools5这一强大规则引擎的指导书籍。Drools5是JBOSS公司推出的一款开源业务规则管理系统(BRMS),它基于Java语言,旨在帮助开发者将业务逻辑从应用程序中分离出来,实现...
Drools工作台(Drools Workbench)是一款基于规则引擎Drools的集成开发环境,主要用于创建、测试和管理业务规则。它提供了一个图形化的用户界面,使得业务分析师和开发人员可以方便地进行规则的编写和管理。在这个...
在实际开发中,Drools的使用通常包括以下几个步骤: 1. 规则定义:使用DRL或图形化的规则编辑器(如Guvnor)编写规则。 2. 规则编译:将DRL文件编译成内部格式,供执行引擎使用。 3. 创建KieSession:创建一个执行上...
《Drools 5.1 开发中文文档》是一份详尽的指南,专注于Drools这一开源规则引擎的最新版本。Drools是一个强大的业务规则管理和决策支持系统,其5.1版本引入了多项改进和增强,旨在提高灵活性、性能和易用性。 在介绍...
为了在 MyEclipse 环境中顺利地开发 Drools 规则引擎项目,我们需要完成一系列的基础配置工作,包括但不限于 MyEclipse 的安装与注册、Drools 插件的安装以及 JBoss 和 JDK 的设置。 ##### 1.1 安装与注册 ...
### Drools 5.3 官方手册知识点总结 #### 一、Apache Camel 集成 ##### 1.1 Camel Camel 提供了一个轻量级的消息总线框架,用于将信息输入到 Drools 中并从中输出。为了简化集成过程,Drools 引入了两个关键组件...