Package org.drools.examples.wumpus

Source Code of org.drools.examples.wumpus.WumpusWorldServer

package org.drools.examples.wumpus;

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.examples.wumpus.view.GameUI;
import org.drools.examples.wumpus.view.GameView;
import org.drools.examples.wumpus.view.SensorsView;
import org.drools.io.ResourceFactory;
import org.drools.logger.KnowledgeRuntimeLogger;
import org.drools.logger.KnowledgeRuntimeLoggerFactory;
import org.drools.runtime.StatefulKnowledgeSession;

public class WumpusWorldServer {

    public static void main(String[] args) throws InterruptedException  {
        WumpusWorldServer ww = new WumpusWorldServer();
        ww.init();
    }

    public void init() throws InterruptedException {
        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
        kbuilder.add( ResourceFactory.newClassPathResource( "commands.drl", getClass() ), ResourceType.DRL );

        if ( kbuilder.hasErrors() ) {
            throw new RuntimeException( "failed to build:\n" + kbuilder.getErrors().toString() );
        }

        kbuilder.add( ResourceFactory.newClassPathResource( "sensors.drl", getClass() ), ResourceType.DRL );

        if ( kbuilder.hasErrors() ) {
            throw new RuntimeException( "failed to build:\n" + kbuilder.getErrors().toString() );
        }

        kbuilder.add( ResourceFactory.newClassPathResource( "collision.drl", getClass() ), ResourceType.DRL );

        if ( kbuilder.hasErrors() ) {
            throw new RuntimeException( "failed to build:\n" + kbuilder.getErrors().toString() );
        }
       
        kbuilder.add( ResourceFactory.newClassPathResource( "ui.drl", GameView.class ), ResourceType.DRL );

        if ( kbuilder.hasErrors() ) {
            throw new RuntimeException( "failed to build:\n" + kbuilder.getErrors().toString() );
        }     
       

        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
        kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );


       
        GameView data = new GameView();
        data.setKbase( kbase );
        data.setWumpusWorld( this );
        setData(data);
        GameUI.run(data );
        //Thread.sleep( 10 * 10000 );
    }
   
    public void setData(GameView data) {
        KnowledgeBase kbase = data.getKbase();

        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();       
        KnowledgeRuntimeLogger klogger = KnowledgeRuntimeLoggerFactory.newFileLogger(ksession, "log/wumpus");  
        data.setKlogger( klogger );

        List<Pitt> pitts = new ArrayList<Pitt>();
        java.util.Random gen = new java.util.Random();
        Cell[][] cells = new Cell[5][5];
        for ( int i = 0; i < 5; i++ ) {
            for ( int j = 0; j < 5; j++ ) {
                Cell cell = new Cell( i, j );
                cells[i][j] = cell;
                if ( i == 0 && j == 0 ) {
                    cell.setHidden( false );
                }
                ksession.insert( cell );
                if ( j != 0 && i != 0 && gen.nextInt( 99 ) <= 19 ) {
                    // 20% chance of pitt
                    Pitt pitt = new Pitt( i, j );
                    ksession.insert( pitt );
                    pitts.add( pitt );
                }
            }
        }

        int row = 0;
        int col = 0;
        while ( (row == 0 && col == 0) || pitts.contains( new Pitt( row, col ) ) ) {
            row = gen.nextInt( 4 );
            col = gen.nextInt( 4 );
        }
        Wumpus wumpus = new Wumpus( row, col );

        row = 0;
        col = 0;
        while ( (row == 0 && col == 0) || (wumpus.getRow() == row && wumpus.getCol() == col) || pitts.contains( new Pitt( row, col ) ) ) {
            row = gen.nextInt( 4 );
            col = gen.nextInt( 4 );
        }
        Gold gold = new Gold( row, col );
        Hero hero = new Hero( 0, 0 );

        SensorsView sensors = new SensorsView();
       
        ksession.insert( wumpus );
        ksession.insert( gold );
        ksession.insert( hero );
        ksession.insert( sensors );
        ksession.insert( data );
       
        ksession.fireAllRules();   
        data.init(cells, sensors, pitts, wumpus, gold, hero );
        data.setKsession( ksession );
    }
}
TOP

Related Classes of org.drools.examples.wumpus.WumpusWorldServer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.