*.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 have "+(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 have 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" >

<header>
<imports>
<import name="com.sample.Game" />
<import name="com.sample.GameRules" />
<import name="com.sample.Guess" />
<import name="com.sample.RandomNumber" />
</imports>
</header>

<nodes>
<start />
</nodes>

<connections>
<connection from="13" to="2" />
<connection from="1" to="3" />
<connection from="12" to="3" />
<connection from="3" to="4" />
<connection from="10" to="5" />
<connection from="10" to="6" />
<connection from="10" to="7" />
<connection from="12" to="8" />
<connection from="11" to="9" />
<connection from="4" to="10" />
<connection from="6" to="11" />
<connection from="7" to="11" />
<connection from="9" to="12" />
<connection from="5" to="13" />
<connection from="8" to="13" />
</connections>

</process>

drools5工作流实例--猜数字

相关文章:

  • 2022-01-21
  • 2021-07-20
  • 2022-12-23
  • 2021-08-20
  • 2021-04-25
猜你喜欢
  • 2021-11-12
  • 2021-11-23
  • 2021-06-29
  • 2021-08-30
  • 2022-12-23
  • 2022-02-05
  • 2021-07-06
相关资源
相似解决方案