Package cz.cuni.mff.abacs.burglar.visual

Source Code of cz.cuni.mff.abacs.burglar.visual.VisualBurglar

/**
*
*/
package cz.cuni.mff.abacs.burglar.visual;

import cz.cuni.mff.abacs.burglar.visual.play_state.GraphicPlayState;
import org.newdawn.slick.AppGameContainer;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.state.StateBasedGame;


/**
* Main class of the game part of the program.
*
* @author abacs
*
*/
public class VisualBurglar extends StateBasedGame {
 
  // constants:
 
  /** The string put into the title bar. */
  protected static final String STR_TITLE = "Visual Burglar";
 
 
  protected static final String STR_RESOURCES = "-resources";
  protected static final String STR_HEIGHT = "-height";
  protected static final String STR_WIDTH = "-width";
  protected static final String STR_FULLSCREEN = "-full";
  protected static final String STR_FRAMERATE = "-rate";
  protected static final String STR_REPLAN_ON_KNOWLEDGE = "-replan_on_knowledge";
 
  /** The string printed to the user if the input parameters are invalid. */
  protected static final String STR_USAGE =
    "game usage:\n" +
    "\t[" + STR_WIDTH + " %d]\twidth\n" +
    "\t[" + STR_HEIGHT + " %d]\theight\n" +
    "\t[" + STR_FRAMERATE + "]\tshow frame rate\n" +
    "\t[" + STR_FULLSCREEN + "]\tfull screen mode\n" +
    "\t[" + STR_RESOURCES + " %s]\tlocation of the resources directory (default is \"./resources/\")" +
    "\t[" + STR_REPLAN_ON_KNOWLEDGE + "]\treplan when new knowledge is available\n";
   
 
  // -------------------------------------------------------------------------
 
 
  /** The default width of the drawing area. */
  protected static int DEFAULT_WIDTH  = 1200;
  /** The default height of the drawing area. */
  protected static int DEFAULT_HEIGHT = 800;
 
 
  // -------------------------------------------------------------------------
  // state identifiers:
 
  public static final int STATE_MENU = 1;
    public static final int STATE_PLAY = 2;
  public static final int STATE_LEVEL_SELECT = 3;
 
 
  // -------------------------------------------------------------------------
 
 
    /** The default width and height of the images in the resource directory. */
  public static final int RESOURCE_BLOCK_SIZE = 32;
 
 
  // -------------------------------------------------------------------------
 
 
  /** '/' terminated path to the resources directory. */
  public static String PATH_RESOURCES = "resources/";
  /** '/' terminated path to the image resources directory. */
  public static String PATH_IMAGES = PATH_RESOURCES + "images/";
  /** '/' terminated path to the sound resources directory. */
  public static String PATH_SOUNDS = PATH_RESOURCES + "sounds/";
  /** '/' terminated path to the planners directory. */
  public static String PATH_PLANNING = PATH_RESOURCES + "planning/";
  /** '/' terminated path to the maps directory. */
  public static String PATH_MAPS = PATH_RESOURCES + "maps/";
 
 
  // -------------------------------------------------------------------------
 
 
  /** If set, the agents are planning with full knowledge of the world. */
  public static boolean FLAG_ALL_KNOWING_AGENTS = false;
 
  /** If set, the planning problem files are saved with a timestamp. */
  public static boolean FLAG_SAVE_PLANNING_PROBLEMS = false;
 
  /** If set, level design is done in the gameplay itself, not in different run. */
  public static boolean FLAG_IN_GAME_LEVEL_DESIGN = false;
 
  /**  */
  public static boolean FLAG_INVALIDATE_PREVIOUS_PATH = false;
 
  /** If set, the agents are replanning after gathering new knowledge. */
  public static boolean FLAG_REPLAN_ON_NEW_KNOWLEDGE = false;
 
 
  /**  */
  public static boolean FLAG_SOLID_BACKGROUND = true;
 
 
  /**  */
  public static boolean FLAG_PLAYER_CONTROL_MODE = false;
 
 
  // -------------------------------------------------------------------------
  // constructors:
 
 
  /**
   *
   */
  public VisualBurglar() throws SlickException {
    // set the title:
    super(STR_TITLE);
    // set the states:
    this.addState(new MenuState(STATE_MENU));
    this.addState(new GraphicPlayState(STATE_PLAY));
    this.addState(new LevelSelectionState(STATE_LEVEL_SELECT));
    // start:
    this.enterState(STATE_MENU);
  }
 
 
  // -------------------------------------------------------------------------
 
 
  /**
   * Initialize the used states.
   *
   * @param container
   */
  @Override
  public void initStatesList(GameContainer container) throws SlickException {
    this.getState(STATE_MENU).init(container, this);
    this.getState(STATE_PLAY).init(container, this);
    this.getState(STATE_LEVEL_SELECT).init(container, this);
  }
 
 
  // -------------------------------------------------------------------------
 
 
  /**
   *
   *
   * arguments:
   * "-w %d": width
   * "-h %d": height
   * "-r": show frame rate
   * "-f": full screen mode
   */
  public static void main(String[] args) {
   
    boolean showFrameRate = false;
    boolean fullScreen = false;
    boolean replanOnKnowledge = false;
    int width  = VisualBurglar.DEFAULT_WIDTH;
    int height = VisualBurglar.DEFAULT_HEIGHT;
   
    // process the arguments:
    for(int index = 0; index < args.length; index++){
     
      // frame rate:
      if(args[index].equals(STR_FRAMERATE)){
        showFrameRate = true;
        continue;
      }
     
      // full screen:
      if(args[index].equals(STR_FULLSCREEN)){
        fullScreen = true;
        continue;
      }
     
      // full screen:
      if(args[index].equals(STR_REPLAN_ON_KNOWLEDGE)){
        replanOnKnowledge = true;
        continue;
      }
     
      // width:
      if(args[index].equals(STR_WIDTH)){
        if(args.length < index + 2){
          System.out.println(STR_USAGE);
          System.exit(-1);
        }
        try{
          width = Integer.valueOf(args[++index]);
        }catch(NumberFormatException e){
          System.err.println(STR_USAGE);
          System.exit(-1);
        }
        continue;
      }
     
      // height:
      if(args[index].equals(STR_HEIGHT)){
        if(args.length < index + 2){
          System.out.println(STR_USAGE);
          System.exit(-1);
        }
        try{
          height = Integer.valueOf(args[++index]);
        }catch(NumberFormatException e){
          System.err.println(STR_USAGE);
          System.exit(-1);
        }
        continue;
      }
     
      // resources:
      if(args[index].equals(STR_RESOURCES)){
        if(index + 1 < args.length){
          VisualBurglar.changeResourcesPath(args[index + 1]);
          index++;
        }else{
          System.err.println(STR_USAGE);
          System.exit(-1);
        }
      }
    }
   
    try{
      AppGameContainer app = new AppGameContainer(new VisualBurglar());
      VisualBurglar.FLAG_REPLAN_ON_NEW_KNOWLEDGE = replanOnKnowledge;
      app.setDisplayMode(width, height, fullScreen);
      app.setShowFPS(showFrameRate);
      // render even when invisible
      app.setAlwaysRender(true);
      // synchronize the rendering cycles with the monitor's frame rate
      app.setVSync(true);
      // start the main loop:
      app.start();
    }catch(SlickException e){
      e.printStackTrace();
    }
  }
 
 
  /** Updates the resource paths. */
  public static void changeResourcesPath(String newPath) {
    PATH_RESOURCES = newPath;
    PATH_IMAGES = PATH_RESOURCES + "images/";
    PATH_SOUNDS = PATH_RESOURCES + "sounds/";
    PATH_PLANNING = PATH_RESOURCES + "planning/";
    PATH_MAPS = PATH_RESOURCES + "maps/";
  }
 
}
TOP

Related Classes of cz.cuni.mff.abacs.burglar.visual.VisualBurglar

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.