DROOLS5 Workflow Instance--Guess number

Source: Internet
Author: User

*.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 &lt; val)
</constraint>
<constraint tonodeid= "6" totype= "Drools_default" name= "too High" priority= "1" type= "rule" dialect= "Mvel" >
Randomnumber (Val:value)
Guess (Value &gt; 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 &gt;= allowed)
</constraint>
<constraint tonodeid= "3" totype= "Drools_default" name= "more Guesses" priority= "1" type= "rule" dialect= "Mvel" >
Gamerules (allowed:allowedguesses)
Game (Guesscount &lt; 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

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.