[jboss-svn-commits] JBL Code SVN: r30176 - in labs/jbossrules/trunk/drools-examples/drools-examples-drl: src/main/java/org/drools/examples and 5 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Mon Nov 16 08:18:34 EST 2009
Author: mark.proctor at jboss.com
Date: 2009-11-16 08:18:33 -0500 (Mon, 16 Nov 2009)
New Revision: 30176
Added:
labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/pacman/
labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/pacman/Cell.java
labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/pacman/CellContents.java
labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/pacman/CellType.java
labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/pacman/Character.java
labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/pacman/Direction.java
labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/pacman/DirectionEnum.java
labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/pacman/Location.java
labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/pacman/Main.java
labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/pacman/Monster.java
labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/pacman/PacMan.java
labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/pacman/PacmanGui.java
labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/pacman/ScheduledLocationUpdate.java
labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/pacman/Score.java
labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/pacman/Tick.java
labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/resources/org/drools/examples/pacman/
labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/resources/org/drools/examples/pacman/grid1.dat
labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/pacman/
labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/pacman/key-handlers.drl
labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/pacman/pacman.drl
Modified:
labs/jbossrules/trunk/drools-examples/drools-examples-drl/.classpath
Log:
JBRULES-2342 Pacman
=Initial Commit
Modified: labs/jbossrules/trunk/drools-examples/drools-examples-drl/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/.classpath 2009-11-16 12:55:15 UTC (rev 30175)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/.classpath 2009-11-16 13:18:33 UTC (rev 30176)
@@ -8,8 +8,6 @@
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="lib" path="lib/foxtrot-2.0.jar"/>
<classpathentry kind="lib" path="lib/jgoodies-forms-1.0.4.jar"/>
- <classpathentry combineaccessrules="false" kind="src" path="/drools-api"/>
- <classpathentry combineaccessrules="false" kind="src" path="/drools-compiler"/>
- <classpathentry combineaccessrules="false" kind="src" path="/drools-core"/>
+ <classpathentry kind="con" path="DROOLS/Drools"/>
<classpathentry kind="output" path="target/classes"/>
</classpath>
Added: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/pacman/Cell.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/pacman/Cell.java (rev 0)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/pacman/Cell.java 2009-11-16 13:18:33 UTC (rev 30176)
@@ -0,0 +1,25 @@
+package org.drools.examples.pacman;
+
+public class Cell {
+ private int row;
+ private int col;
+
+ public Cell(int row, int col) {
+ super();
+ this.row = row;
+ this.col = col;
+ }
+
+ public int getRow() {
+ return row;
+ }
+
+ public int getCol() {
+ return col;
+ }
+
+ @Override
+ public String toString() {
+ return "Cell " + row + ":" + col;
+ }
+}
Added: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/pacman/CellContents.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/pacman/CellContents.java (rev 0)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/pacman/CellContents.java 2009-11-16 13:18:33 UTC (rev 30176)
@@ -0,0 +1,25 @@
+package org.drools.examples.pacman;
+
+public class CellContents {
+ private Cell cell;
+ private CellType cellType;
+
+ public CellContents(Cell cell,
+ CellType cellType) {
+ this.cell = cell;
+ this.cellType = cellType;
+ }
+
+ public Cell getCell() {
+ return cell;
+ }
+
+ public CellType getCellType() {
+ return cellType;
+ }
+
+ @Override
+ public String toString() {
+ return "CellType " + cellType;
+ }
+}
Added: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/pacman/CellType.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/pacman/CellType.java (rev 0)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/pacman/CellType.java 2009-11-16 13:18:33 UTC (rev 30176)
@@ -0,0 +1,8 @@
+package org.drools.examples.pacman;
+
+public enum CellType {
+ EMPTY,
+ FOOD,
+ POWER_PILL,
+ WALL;
+}
Added: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/pacman/Character.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/pacman/Character.java (rev 0)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/pacman/Character.java 2009-11-16 13:18:33 UTC (rev 30176)
@@ -0,0 +1,14 @@
+package org.drools.examples.pacman;
+
+public class Character {
+ private int speed;
+
+ public int getSpeed() {
+ return speed;
+ }
+
+ public void setSpeed(int speed) {
+ this.speed = speed;
+ }
+
+}
Added: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/pacman/Direction.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/pacman/Direction.java (rev 0)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/pacman/Direction.java 2009-11-16 13:18:33 UTC (rev 30176)
@@ -0,0 +1,64 @@
+package org.drools.examples.pacman;
+
+public class Direction {
+ public static final int LEFT = -1;
+ public static final int RIGHT = 1;
+ public static final int UP = 1;
+ public static final int DOWN = -1;
+
+ private Character character;
+ private int horizontal;
+ private int vertical;
+
+ public Direction(Character character,
+ int horizontal,
+ int vertical) {
+ this.character = character;
+ this.horizontal = horizontal;
+ this.vertical = vertical;
+ }
+
+ public Character getCharacter() {
+ return character;
+ }
+
+ public int getHorizontal() {
+ return horizontal;
+ }
+
+ public int getVertical() {
+ return vertical;
+ }
+
+ public static Direction newDirection(Character character, DirectionEnum directionEnum) {
+ switch(directionEnum) {
+ case LEFT: {
+ return new Direction(character, -1, 0);
+ }
+ case RIGHT: {
+ return new Direction(character, 1, 0);
+ }
+ case UP: {
+ return new Direction(character, 0, 1);
+ }
+ case DOWN: {
+ return new Direction(character, 0, -1);
+ }
+ default: {
+
+ }
+ }
+ throw new IllegalArgumentException( "Direction must be a valid DirectionEnum" );
+ }
+
+ @Override
+ public String toString() {
+ if ( horizontal != 0 ) {
+ return "Direction " + character + " " + ((horizontal == LEFT) ? "LEFT" : "RIGHT");
+ } else {
+ return "Direction " + character + " " + ((vertical == UP) ? "UP" : "DOWN");
+ }
+
+ }
+
+}
Added: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/pacman/DirectionEnum.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/pacman/DirectionEnum.java (rev 0)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/pacman/DirectionEnum.java 2009-11-16 13:18:33 UTC (rev 30176)
@@ -0,0 +1,8 @@
+/**
+ *
+ */
+package org.drools.examples.pacman;
+
+public enum DirectionEnum {
+ UP, DOWN, LEFT, RIGHT;
+}
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/pacman/Location.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/pacman/Location.java (rev 0)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/pacman/Location.java 2009-11-16 13:18:33 UTC (rev 30176)
@@ -0,0 +1,40 @@
+package org.drools.examples.pacman;
+
+public class Location {
+ private Character character;
+ private int row;
+ private int col;
+
+ public Location(Character character,
+ int row,
+ int col) {
+ this.character = character;
+ this.row = row;
+ this.col = col;
+ }
+
+ public Character getCharacter() {
+ return character;
+ }
+
+ public void setRow(int row) {
+ this.row = row;
+ }
+
+ public int getRow() {
+ return row;
+ }
+
+ public int getCol() {
+ return col;
+ }
+
+ public void setCol(int col) {
+ this.col = col;
+ }
+
+ @Override
+ public String toString() {
+ return "Location " + character + " " + row + ":" + col;
+ }
+}
Added: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/pacman/Main.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/pacman/Main.java (rev 0)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/pacman/Main.java 2009-11-16 13:18:33 UTC (rev 30176)
@@ -0,0 +1,128 @@
+package org.drools.examples.pacman;
+
+import java.io.BufferedReader;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseFactory;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderFactory;
+import org.drools.builder.ResourceType;
+import org.drools.io.ResourceFactory;
+import org.drools.logger.KnowledgeRuntimeLoggerFactory;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.rule.ConsequenceException;
+
+public class Main {
+ StatefulKnowledgeSession ksession = null;
+ PacMan pacMan;
+
+ public static void main(String[] args) throws Exception {
+ Main main = new Main();
+ main.initKsession();
+ main.buildGrid();
+ main.initGui();
+ main.run();
+ }
+
+ public void run() {
+ try {
+ // run forever
+ this.ksession.fireUntilHalt();
+ } catch ( ConsequenceException e ) {
+ throw e;
+ }
+ }
+
+ public void initKsession() {
+ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.add( ResourceFactory.newClassPathResource( "key-handlers.drl",
+ getClass() ),
+ ResourceType.DRL );
+ kbuilder.add( ResourceFactory.newClassPathResource( "pacman.drl",
+ getClass() ),
+ ResourceType.DRL );
+
+ if ( kbuilder.hasErrors() ) {
+ System.out.println( kbuilder.getErrors() );
+ }
+
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+
+ this.ksession = kbase.newStatefulKnowledgeSession();
+
+ this.pacMan = new PacMan();
+ this.pacMan.setSpeed( 1 );
+ this.ksession.insert( this.pacMan );
+
+ this.ksession.insert( new Score() );
+
+ KnowledgeRuntimeLoggerFactory.newThreadedFileLogger( this.ksession,
+ "pacman.log",
+ 3000 );
+
+ Location location = new Location( this.pacMan,
+ 1,
+ 1 );
+ this.ksession.insert( location );
+
+ Tick tick = new Tick( 0 );
+ this.ksession.insert( tick );
+
+ // execute initialisation data and return
+ this.ksession.fireAllRules();
+ }
+
+ public void buildGrid() throws Exception {
+
+ BufferedReader reader = new BufferedReader( ResourceFactory.newClassPathResource( "grid1.dat",
+ Main.class ).getReader() );
+
+ String line = null;
+ List<String> lines = new ArrayList<String>();
+ while ( (line = reader.readLine()) != null ) {
+ lines.add( line );
+ }
+
+ for ( int row = lines.size() - 1; row >= 0; row-- ) {
+ line = lines.get( row );
+ for ( int col = 0; col < line.length(); col++ ) {
+ char c = line.charAt( col );
+
+ Cell cell = new Cell( lines.size() - row - 1,
+ col );
+ CellContents contents = null;
+ switch ( c ) {
+ case '*' : {
+ contents = new CellContents( cell,
+ CellType.WALL );
+ break;
+ }
+ case '.' : {
+ contents = new CellContents( cell,
+ CellType.FOOD );
+ break;
+ }
+ case '_' : {
+ contents = new CellContents( cell,
+ CellType.EMPTY );
+ break;
+ }
+ default : {
+ throw new IllegalArgumentException( "'" + c + "' is an invalid cell type" );
+ }
+ }
+ System.out.println( cell + " : " + contents );
+ ksession.insert( cell );
+ ksession.insert( contents );
+ }
+ }
+ }
+
+ public void initGui() {
+ PacmanGui.init( this.ksession );
+ }
+
+}
Added: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/pacman/Monster.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/pacman/Monster.java (rev 0)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/pacman/Monster.java 2009-11-16 13:18:33 UTC (rev 30176)
@@ -0,0 +1,5 @@
+package org.drools.examples.pacman;
+
+public class Monster extends Character {
+
+}
Added: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/pacman/PacMan.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/pacman/PacMan.java (rev 0)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/pacman/PacMan.java 2009-11-16 13:18:33 UTC (rev 30176)
@@ -0,0 +1,8 @@
+package org.drools.examples.pacman;
+
+public class PacMan extends Character {
+ @Override
+ public String toString() {
+ return "pacman speed = " + getSpeed();
+ }
+}
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/pacman/PacmanGui.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/pacman/PacmanGui.java (rev 0)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/pacman/PacmanGui.java 2009-11-16 13:18:33 UTC (rev 30176)
@@ -0,0 +1,151 @@
+package org.drools.examples.pacman;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+import javax.swing.JButton;
+import javax.swing.JFrame;
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+import javax.swing.UIManager;
+import javax.swing.UnsupportedLookAndFeelException;
+
+import org.drools.runtime.ExitPoint;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.rule.WorkingMemoryEntryPoint;
+
+public class PacmanGui extends JFrame
+ implements
+ KeyListener,
+ ActionListener {
+ JTextArea displayArea;
+ static final String newline = System.getProperty( "line.separator" );
+ WorkingMemoryEntryPoint keyListenerEntryPoint;
+
+ public static void init(final StatefulKnowledgeSession ksession) {
+ try {
+ UIManager.setLookAndFeel( "com.sun.java.swing.plaf.windows.WindowsLookAndFeel" );
+ //UIManager.setLookAndFeel("com.sun.java.swing.plaf.gtk.GTKLookAndFeel");
+ //UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
+ } catch ( UnsupportedLookAndFeelException ex ) {
+ ex.printStackTrace();
+ } catch ( IllegalAccessException ex ) {
+ ex.printStackTrace();
+ } catch ( InstantiationException ex ) {
+ ex.printStackTrace();
+ } catch ( ClassNotFoundException ex ) {
+ ex.printStackTrace();
+ }
+ UIManager.put( "swing.boldMetal",
+ Boolean.FALSE );
+
+ //Schedule a job for event dispatch thread:
+ //creating and showing this application's GUI.
+ try {
+ javax.swing.SwingUtilities.invokeAndWait( new Runnable() {
+ public void run() {
+ createAndShowGUI(ksession);
+ }
+ } );
+ } catch ( Exception e ) {
+ throw new RuntimeException( e );
+ }
+ }
+
+ private static void createAndShowGUI(StatefulKnowledgeSession ksession) {
+ //Create and set up the window.
+ PacmanGui frame = new PacmanGui( "KeyEventDemo", ksession );
+ frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
+
+ //Set up the content pane.
+ frame.addComponentsToPane();
+
+ //Display the window.
+ frame.pack();
+ frame.setVisible( true );
+ }
+
+ public void appendText(final String string) {
+ javax.swing.SwingUtilities.invokeLater( new Runnable() {
+ public void run() {
+ displayArea.append( string );
+ displayArea.setCaretPosition(displayArea.getDocument().getLength());
+ }
+ } );
+ }
+
+ private void addComponentsToPane() {
+ JButton button = new JButton( "Clear" );
+ button.addActionListener( this );
+
+ displayArea = new JTextArea();
+ displayArea.setEditable( false );
+ JScrollPane scrollPane = new JScrollPane( displayArea );
+ scrollPane.setPreferredSize( new Dimension( 600,
+ 600 ) );
+ displayArea.addKeyListener( this );
+
+ getContentPane().add( scrollPane,
+ BorderLayout.CENTER );
+ getContentPane().add( button,
+ BorderLayout.PAGE_END );
+ }
+
+ public PacmanGui(String name, StatefulKnowledgeSession ksession) {
+ super( name );
+ this.keyListenerEntryPoint = ksession.getWorkingMemoryEntryPoint( "KeyListener" );
+ ksession.registerExitPoint( "ConsoleExitPoint", new ConsoleExitPoint( this ) );
+ }
+
+ public static class ConsoleExitPoint implements ExitPoint {
+ private PacmanGui gui;
+
+ public ConsoleExitPoint(PacmanGui gui) {
+ this.gui = gui;
+ }
+
+ public void insert(final Object arg) {
+ gui.appendText( (String) arg );
+ }
+
+ }
+
+ /** Handle the key typed event from the text field. */
+ public void keyTyped(KeyEvent e) {
+ // do nothing
+ }
+
+ public void keyPressed(KeyEvent e) {
+ // do nothing
+ }
+
+ public void keyReleased(KeyEvent e) {
+// switch ( e.getKeyCode() ) {
+// case 38 : { // UP
+// break;
+// }
+// case 40 : { // DOWN
+// break;
+// }
+// case 37 : { // LEFt
+// break;
+// }
+// case 39 : { // RIGHT
+// break;
+// }
+// default: {
+//
+// }
+// }
+ //System.out.println( e );
+ this.keyListenerEntryPoint.insert( e );
+ }
+
+ public void actionPerformed(ActionEvent e) {
+ displayArea.setText( "" );
+ }
+
+}
Added: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/pacman/ScheduledLocationUpdate.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/pacman/ScheduledLocationUpdate.java (rev 0)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/pacman/ScheduledLocationUpdate.java 2009-11-16 13:18:33 UTC (rev 30176)
@@ -0,0 +1,51 @@
+package org.drools.examples.pacman;
+
+public class ScheduledLocationUpdate {
+ private Location location;
+ private int row;
+ private int col;
+ private int tock;
+
+ public ScheduledLocationUpdate(Location location,
+ int row,
+ int col,
+ int tock) {
+ this.location = location;
+ this.row = row;
+ this.col = col;
+ this.tock = tock;
+ }
+
+ public Location getLocation() {
+ return location;
+ }
+
+ public void setRow(int row) {
+ this.row = row;
+ }
+
+ public int getRow() {
+ return row;
+ }
+
+ public int getCol() {
+ return col;
+ }
+
+ public void setCol(int col) {
+ this.col = col;
+ }
+
+ public int getTock() {
+ return tock;
+ }
+
+ public void setTock(int tock) {
+ this.tock = tock;
+ }
+
+ @Override
+ public String toString() {
+ return "ScheduledLocationUpdate " + location.getCharacter() + " " + row + ":" + col;
+ }
+}
Added: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/pacman/Score.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/pacman/Score.java (rev 0)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/pacman/Score.java 2009-11-16 13:18:33 UTC (rev 30176)
@@ -0,0 +1,15 @@
+package org.drools.examples.pacman;
+
+public class Score {
+ private int score;
+
+ public int getScore() {
+ return score;
+ }
+
+ public void setScore(int score) {
+ this.score = score;
+ }
+
+
+}
Added: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/pacman/Tick.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/pacman/Tick.java (rev 0)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/pacman/Tick.java 2009-11-16 13:18:33 UTC (rev 30176)
@@ -0,0 +1,18 @@
+package org.drools.examples.pacman;
+
+public class Tick {
+ private int tock;
+
+ public Tick(int tock) {
+ this.tock = tock;
+ }
+
+ public void setTock(int tock) {
+ this.tock = tock;
+ }
+
+ public int getTock() {
+ return tock;
+ }
+
+}
Added: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/resources/org/drools/examples/pacman/grid1.dat
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/resources/org/drools/examples/pacman/grid1.dat (rev 0)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/resources/org/drools/examples/pacman/grid1.dat 2009-11-16 13:18:33 UTC (rev 30176)
@@ -0,0 +1,11 @@
+***********
+*.........*
+*.*******.*
+*.*******.*
+*.*******.*
+*.*******.*
+*.*******.*
+*.*******.*
+*.........*
+*_........*
+***********
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/pacman/key-handlers.drl
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/pacman/key-handlers.drl (rev 0)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/pacman/key-handlers.drl 2009-11-16 13:18:33 UTC (rev 30176)
@@ -0,0 +1,79 @@
+package org.drools.examples.pacman
+
+import java.awt.event.KeyEvent;
+
+
+/**
+ * Create a Direction for a character, based on a given keyCode. Return null
+ * if the keyCode does not map to an arrow key.
+ */
+function Direction createDirection(Character character, KeyEvent keyCode) {
+ DirectionEnum directionEnum;
+ switch ( keyCode.getKeyCode() ) {
+ case 38 : { // UP
+ directionEnum = DirectionEnum.UP;
+ break;
+ }
+ case 40 : { // DOWN
+ directionEnum = DirectionEnum.DOWN;
+ break;
+ }
+ case 37 : { // LEFT
+ directionEnum = DirectionEnum.LEFT;
+ break;
+ }
+ case 39 : { // RIGHT
+ directionEnum = DirectionEnum.RIGHT;
+ break;
+ }
+ default: {
+ return null;
+ }
+ }
+ return Direction.newDirection( character, directionEnum );
+}
+
+/**
+ * This is relevant to game initialisation. No direction exists yet. When a keypress (release)
+ * is detected it creates derived possible Direction and validates it. If it's valid
+ * then insert it.
+ */
+rule keyListenerRuleNoDirection dialect "mvel" no-loop when
+ $keyEvent : KeyEvent() from entry-point "KeyListener"
+ $l : Location()
+ $newD : Direction() from createDirection( $l.character, $keyEvent )
+ $target : Cell( row == ($l.row + $newD.vertical), col == ($l.col + $newD.horizontal) )
+ CellContents( cell == $target, cellType != CellType.WALL )
+ not Direction( character == $l.character )
+then
+ exitPoints["ConsoleExitPoint" ].insert( "insert " + $newD + "\n" );
+ retract( $keyEvent );
+ insert( $newD );
+end
+
+/**
+ * Detects a new keypress (release). Creates derived possible Direction and validates it.
+ * If the Direction is valid, delete the old Direction and replace with the new one.
+ */
+rule keyListenerRule dialect "mvel" no-loop when
+ $keyEvent : KeyEvent() from entry-point "KeyListener"
+ $l : Location()
+ $newD : Direction() from createDirection( $l.character, $keyEvent )
+ $target : Cell( row == ($l.row + $newD.vertical), col == ($l.col + $newD.horizontal) )
+ CellContents( cell == $target, cellType != CellType.WALL )
+ $oldD : Direction( character == $l.character )
+then
+ exitPoints["ConsoleExitPoint" ].insert( "insert " + $newD + "\n" );
+ retract( $keyEvent );
+ retract( $oldD );
+ insert( $newD );
+end
+
+/**
+ * This rule is needed to stop events building up, so if they don't match and fire, retract anyway
+ */
+rule keyListenerRuleRetractEvent dialect "mvel" salience -5 when
+ $keyEvent : KeyEvent() from entry-point "KeyListener"
+then
+ retract( $keyEvent );
+end
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/pacman/pacman.drl
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/pacman/pacman.drl (rev 0)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/pacman/pacman.drl 2009-11-16 13:18:33 UTC (rev 30176)
@@ -0,0 +1,68 @@
+package org.drools.examples.pacman
+
+/**
+ * This controls the flow of time in pacman, currently it's slow 500ms, to make it easy to visualise things as
+ * they happen
+ */
+rule increaseTick dialect "mvel" salience -1 duration 500 when
+ $t : Tick()
+then
+ modify( $t ) { tock += 1 };
+ exitPoints["ConsoleExitPoint" ].insert( "tick " + $t.tock + "\n" );
+end
+
+/**
+ * The current Direction would move the Location into a WALL, so we can't move and need to retract the Direction,
+ * so that no futher movement for is attempted
+ */
+rule invalidDirection dialect "mvel" no-loop when
+ $l : Location( )
+ $d : Direction( character == $l.character )
+ $target : Cell( row == ($l.row + $d.vertical), col == ($l.col + $d.horizontal) )
+ $ct : CellContents( cell == $target, cellType == CellType.WALL )
+ Tick()
+then
+ exitPoints["ConsoleExitPoint" ].insert( "retract " + $d + "\n" );
+ retract( $d );
+end
+
+/**
+ * Checks that the current Direction moves to a valid location, i.e. not a WALL.
+ * It does not set the new direction straight away, this is because we need movement to be intime
+ * with the Tick increase, so we schedule the new Location instead.
+ */
+rule validDirection dialect "mvel" no-loop when
+ $l : Location( )
+ $d : Direction( character == $l.character )
+ $target : Cell( row == ($l.row + $d.vertical), col == ($l.col + $d.horizontal) )
+ CellContents( cell == $target, cellType != CellType.WALL )
+ not ScheduledLocationUpdate( location == $l )
+ $t : Tick()
+then
+ insert( new ScheduledLocationUpdate($l, $l.row += $d.vertical, $l.col += $d.horizontal, $t.tock + 1) );
+end
+
+/**
+ * When the Tick increases, update any Locations from inserted scheduled updates.
+ */
+rule setNewDirection dialect "mvel" no-loop when
+ $s : ScheduledLocationUpdate()
+ $l : Location( this == $s.location )
+ Tick( tock == $s.tock )
+then
+ exitPoints["ConsoleExitPoint"].insert( "set new Location " + $l + "\n" );
+ modify( $l ) { row = $s.row, col = $s.col };
+ retract( $s );
+end
+
+/**
+ * When we move onto a FOOD cell, increase the score
+ */
+rule eatFood dialect "mvel" no-loop when
+ $l : Location( )
+ $target : Cell( row == $l.row, col == $l.col)
+ CellContents( cell == $target, cellType == CellType.FOOD )
+ $s : Score()
+then
+ modify( $s ) { score += 1 };
+end
\ No newline at end of file
More information about the jboss-svn-commits
mailing list