*.java
Package com.sample;
public class Numguessmain
{
public static void Main (string[] args)
{
Knowledgebuilder Kbuilder = Knowledgebuilderfactory.newknowledgebuilder ();
Kbuilder.add (Resourcefactory.newclasspathresource ("NUMGUESS.DRL"), RESOURCETYPE.DRL);
Kbuilder.add (Resourcefactory.newclasspathresource ("Numguess.rf"), RESOURCETYPE.DRF);
Knowledgebase Kbase = Knowledgebasefactory.newknowledgebase ();
Kbase.addknowledgepackages (Kbuilder.getknowledgepackages ());
Statefulknowledgesession ksession = Kbase.newstatefulknowledgesession ();
Gamerules gr = new Gamerules ();
Gr.setmaxrange (100);
Gr.setallowedguesses (6);
Ksession.insert (GR);
Ksession.insert (New Randomnumber ());
Ksession.insert (New Game ());
Ksession.startprocess ("number Guess");
Ksession.fireallrules ();
Ksession.dispose ();
}
}
Public class Game
{
private int biggest;
private int smallest;
Private int guesscount;
Public Game ()
{
This.biggest = 0;
this.smallest = 100;
This.guesscount = 0;
}
public void Incrementguesscount ()
{
this.guesscount++;
}
public int getbiggest ()
{
return biggest;
}
public void setbiggest (int biggest)
{
This.biggest = biggest;
}
public int getsmallest ()
{
return smallest;
}
public void setsmallest (int smallest)
{
This.smallest = smallest;
}
public int Getguesscount ()
{
return guesscount;
}
public void Setguesscount (int guesscount)
{
This.guesscount = Guesscount;
}
}
public class Gamerules
{
private int maxrange;
private int allowedguesses;
public int Getmaxrange ()
{
return maxrange;
}
public void Setmaxrange (int maxrange)
{
This.maxrange = Maxrange;
}
public int getallowedguesses ()
{
return allowedguesses;
}
public void setallowedguesses (int allowedguesses)
{
this.allowedguesses = allowedguesses;
}
public static Boolean isnumber (String s)
{
try {
Integer.parseint (s);
return true;
} catch (Exception e) {
return false;
}
}
}
public class Guess
{
private int value;
public Guess (int value)
{
This.value = value;
}
public int GetValue ()
{
return value;
}
public void SetValue (int value)
{
This.value = value;
}
Public String toString ()
{
Return "Guess" + this.value;
}
}
public class Randomnumber
{
private int value;
Public Randomnumber ()
{
This.value = new Random (). Nextint (100);
}
public int GetValue ()
{
return value;
}
public void SetValue (int value)
{
This.value = value;
}
}
Numguess.drl
Package Com.sample
Dialect "Mvel"
Import Java.io.InputStreamReader;
Import Java.io.BufferedReader;
Rule "Get User Guess"
Ruleflow-group "Guess"
No-loop true
When
$r: Randomnumber ()
Rules:gamerules (allowed:allowedguesses)
Game:game (guesscount<allowed)
Not (Guess ())
Then
System.out.println ("You Had" + (Rules.getallowedguesses ()-game.getguesscount ()) + "Out of" +rules.getallowedguesses ( ) + "Guesses left.\nplease enter your guess from 0 to" +rules.getmaxrange ());
Br=new BufferedReader (New InputStreamReader (system.in));
S=br.readline ();
I=gamerules.isnumber (s)? (New Integer (s)): 0;
Modify (game) {guesscount+=1}
Insert (new Guess (i));
End
Rule "Record the biggest Guess"
Ruleflow-group "Guess"
No-loop true
When
Game:game (Biggestguess:biggest)
Guess ($value: value>biggestguess)
Then
Modify (game) {biggest= $value}
End
Rule "Record the smallest Guess"
Ruleflow-group "Guess"
No-loop true
When
Game:game (Small:smallest)
Guess ($val: Value<small)
Then
Modify (game) {smallest= $val}
End
Rule "guess incorrect, retract guess"
Ruleflow-group "Guess Incorrect"
When
Guess:guess ()
Then
Retract (guess);
End
Rule "No more guesses notification"
Ruleflow-group "No more guesses"
When
R:randomnumber ()
Game:game ()
Then
System.out.println ("\nyou has no more guesses\nthe correct guess was" +r.value);
System.out.println ("Your smallest guess was" +game.smallest+ "\nyour biggest guess was" +game.biggest);
End
Numguess.rf
<?xml version= "1.0" encoding= "UTF-8"?>
<process xmlns= "Http://drools.org/drools-5.0/process"
Xmlns:xs= "Http://www.w3.org/2001/XMLSchema-instance"
xs:schemalocation= "Http://drools.org/drools-5.0/process drools-processes-5.0.xsd"
Type= "Ruleflow" name= "number guess" id= "number guess" package-name= "com.sample" >
<imports>
<import name= "Com.sample.Game"/>
<import name= "Com.sample.GameRules"/>
<import name= "Com.sample.Guess"/>
<import name= "Com.sample.RandomNumber"/>
</imports>
<nodes>
<start id= "1" name= "Start" x= "" "y=" "width=" and "" Height= "/>"
<end id= "2" name= "End" x= "476" y= "462" width= "" height= "/>"
<join id= "3" name= "more guesses join" x= "" y= "174" width= "145" height= "" type= "2"/>
<ruleset id= "4" name= "guess" ruleflowgroup= "guess" x= "" "y=" 285 "width=" "" Height= "/>"
<actionnode id= "5" name= "Guess correct" x= "209" y= "368" width= "121" height= ">"
<action type= "expression" dialect= "Mvel" >system.out.println ("you guessed correctly");</action>
</actionNode>
<actionnode id= "6" name= "Too High" x= "" y= "515" width= "121" height= ">
<action type= "expression" dialect= "Mvel" >system.out.println ("Your guess is too high");</action>
</actionNode>
<actionnode id= "7" name= "Too Low" x= "All" y= "454" width= "121" height= ">
<action type= "expression" dialect= "Mvel" >system.out.println ("Your guess is too low");</action>
</actionNode>
<ruleset id= "8" name= "no More guesses" ruleflowgroup= "no" guesses "x=" 425 "y=" 292 "width=" 145 "height="/> "
<ruleset id= "9" name= "Guess incorrect" ruleflowgroup= "Guess incorrect" x= "606" y= "514" width= "a" height= "/>"
<split id= "name=" Guess correct? "x=" "y=" "376" width= "2" height= "type=" >
<constraints>
<constraint tonodeid= "7" totype= "Drools_default" name= "too Low" priority= "1" type= "rule" dialect= "Mvel" >
Randomnumber (Val:value)
Guess (Value < val)
</constraint>
<constraint tonodeid= "6" totype= "Drools_default" name= "too High" priority= "1" type= "rule" dialect= "Mvel" >
Randomnumber (Val:value)
Guess (Value > val)
</constraint>
<constraint tonodeid= "5" totype= "Drools_default" name= "correct" priority= "1" type= "rule" dialect= "Mvel" >
Randomnumber (Val:value)
Guess (value = = val)
</constraint>
</constraints>
</split>
<join id= "One" name= "Gateway" x= "427" y= "513" width= "2" height= "$ type="/>
<split id= "name=" more guesses? "x=" 634 "y=" 159 "width=" "height=" "type=" 2 ">
<constraints>
<constraint tonodeid= "8" totype= "Drools_default" name= "no More Guesses" priority= "1" type= "rule" dialect= "Mvel" >
Gamerules (allowed:allowedguesses)
Game (Guesscount >= allowed)
</constraint>
<constraint tonodeid= "3" totype= "Drools_default" name= "more Guesses" priority= "1" type= "rule" dialect= "Mvel" >
Gamerules (allowed:allowedguesses)
Game (Guesscount < allowed)
</constraint>
</constraints>
</split>
<join id= "Name=" "Gateway" x= "474" y= "381" width= "2" height= "$ type="/>
</nodes>
<connections>
<connection from= "to=" 2 "/>
<connection from= "1" to= "3"/>
<connection from= "3" to= "/>"
<connection from= "3" to= "4"/>
<connection from= "Ten" to= "5"/>
<connection from= "Ten" to= "6"/>
<connection from= "Ten" to= "7"/>
<connection from= "8" to= "/>"
<connection from= "One" to= "9"/>
<connection from= "4" to= "Ten"/>
<connection from= "6" to= "one"/>
<connection from= "7" to= "one"/>
<connection from= "9" to= "/>"
<connection from= "5" to= "/>"
<connection from= "8" to= "/>"
</connections>
</process>
DROOLS5 Workflow Instance--Guess number