[rules-dev] pacman

Mauricio Salatino salaboy at gmail.com
Mon Nov 16 08:59:33 EST 2009


heh.. nice.. I will add the Wii mote (
http://en.wikipedia.org/wiki/Wii_Remote) support for that game, it's pretty
easy. I have an example working.

On Mon, Nov 16, 2009 at 11:55 AM, Mark Proctor <mproctor at codehaus.org>wrote:

> For anyone interested i just did an initial commit for the rudementary
> implementation parts for a Pacman game. Loads a Grid  and a Character
> into the working memory and listens to the arrow keys to move the
> Character around (text output only). It only accepts valid directions
> and the Character cannot move off the grid, and score is updated as it
> eats Food.
>
> It also demostrates entry and exit points. For instance this rule has
> it's "KeyListener" entry point hooked up to a KeyListener impl that
> inserts KeyEvents. From the KeyEvent it creates a Derived (not in
> working memory) possible Direction, validates that Direction. If valid
> the old Direction is retracted and the new one inserted. I use the
> exitpoint to send print information to a channel, which is appended to
> the GUI.
>
> /**
>  * 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" 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
>
> As the Tick, simulated time, increases we attempt to change it's
> Location based on the given Direction. We make sure the new Location is
> valid, and if so schedule the new Location, in time with the Tick.
> /**
>  * 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" 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" 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
>
> Notice the whole thing id driven relationally, because everything is
> linked relationally we can exploit that to drive the engine
> declaratively with only a few rules.
>
> I've committed everything to drools-examples for now, you'll need drools
> trunk, as there are a few fixes necessary for this to work:
>
> http://anonsvn.jboss.org/repos/labs/labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/pacman/
>
> http://anonsvn.jboss.org/repos/labs/labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/resources/org/drools/examples/pacman/
>
> http://anonsvn.jboss.org/repos/labs/labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/pacman/
>
> The grid1.dat holds the grid layout, it's a declarative symbol layout,
> trivial to change to explore new grids.
>
> It's still very basic. Next I want to work on variable speed for
> characters, then I'll start to add Monsters and power pellets. Once we
> have the full backend working, the idea is to hook it up to an existing
> pacman gui such as SwtPacman. SwtPacman source code is available here:
> http://www.jboss.org/community/wiki/pacman
>
> I'll probably blog this later, as a few more bits are added. But
> hopefully this will start to demonstrate to people some more complex
> problems, and also help drive the drools team on how to improve our
> language and engine.
>
> Mark
>
> _______________________________________________
> rules-dev mailing list
> rules-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-dev
>



-- 
- http://salaboy.wordpress.com
- http://www.jbug.com.ar
- Salatino "Salaboy" Mauricio -
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-dev/attachments/20091116/7e39b044/attachment.html 


More information about the rules-dev mailing list