Beispiel #1
0
  /**
   * Changes the state. Checks if there is active power pills nearby, if true go eat. Checks if
   * there still is a ghost close, if true stay in state Defaults to eat pill state
   *
   * @return returns change state. Returns null if it remains in this state
   */
  public State changeState(Game game, long timeDue) {
    int pacmanPos = game.getPacmanCurrentNodeIndex();
    // Check for power pill
    int closestPowerPill = 0;
    int closestDistPowerPill = -1;
    if (game.getNumberOfActivePowerPills() > 0) {
      for (int i : game.getActivePowerPillsIndices()) {
        int temp = game.getShortestPathDistance(pacmanPos, i);
        if (closestDistPowerPill > temp || closestDistPowerPill == -1) {
          closestPowerPill = i;
          closestDistPowerPill = temp;
        }
      }
    }
    if (game.getNumberOfActivePowerPills() > 0
        && game.getShortestPathDistance(pacmanPos, closestPowerPill) < mach.DistToPowerPill) {
      // System.out.println("(RunFromGhost)Try power pill");
      return (State) mach.dataStruc.get("moveNearestPowerPill");
    }
    // Check for ghost distance

    for (GHOST ghost : GHOST.values()) {
      if (game.getGhostLairTime(ghost) > 0 || game.isGhostEdible(ghost)) {
        continue;
      }
      if (game.getShortestPathDistance(pacmanPos, game.getGhostCurrentNodeIndex(ghost))
          < mach.DistFromNonEdible) {
        mach.dataStruc.put("ghost", ghost);
        return null;
      }
    }
    // System.out.println("(RunFromGhost) Try nearest pill");
    return (State) mach.dataStruc.get("moveNearestPill");
  }
  public DataTuple(Game game, MOVE move) {
    if (move == MOVE.NEUTRAL) {
      move = game.getPacmanLastMoveMade();
    }

    this.DirectionChosen = move;

    this.mazeIndex = game.getMazeIndex();
    this.currentLevel = game.getCurrentLevel();
    this.pacmanPosition = game.getPacmanCurrentNodeIndex();
    this.pacmanLivesLeft = game.getPacmanNumberOfLivesRemaining();
    this.currentScore = game.getScore();
    this.totalGameTime = game.getTotalTime();
    this.currentLevelTime = game.getCurrentLevelTime();
    this.numOfPillsLeft = game.getNumberOfActivePills();
    this.numOfPowerPillsLeft = game.getNumberOfActivePowerPills();

    if (game.getGhostLairTime(GHOST.BLINKY) == 0) {
      this.isBlinkyEdible = game.isGhostEdible(GHOST.BLINKY);
      this.blinkyDist =
          game.getShortestPathDistance(
              game.getPacmanCurrentNodeIndex(), game.getGhostCurrentNodeIndex(GHOST.BLINKY));
    }

    if (game.getGhostLairTime(GHOST.INKY) == 0) {
      this.isInkyEdible = game.isGhostEdible(GHOST.INKY);
      this.inkyDist =
          game.getShortestPathDistance(
              game.getPacmanCurrentNodeIndex(), game.getGhostCurrentNodeIndex(GHOST.INKY));
    }

    if (game.getGhostLairTime(GHOST.PINKY) == 0) {
      this.isPinkyEdible = game.isGhostEdible(GHOST.PINKY);
      this.pinkyDist =
          game.getShortestPathDistance(
              game.getPacmanCurrentNodeIndex(), game.getGhostCurrentNodeIndex(GHOST.PINKY));
    }

    if (game.getGhostLairTime(GHOST.SUE) == 0) {
      this.isSueEdible = game.isGhostEdible(GHOST.SUE);
      this.sueDist =
          game.getShortestPathDistance(
              game.getPacmanCurrentNodeIndex(), game.getGhostCurrentNodeIndex(GHOST.SUE));
    }

    this.blinkyDir =
        game.getNextMoveTowardsTarget(
            game.getPacmanCurrentNodeIndex(), game.getGhostCurrentNodeIndex(GHOST.BLINKY), DM.PATH);
    this.inkyDir =
        game.getNextMoveTowardsTarget(
            game.getPacmanCurrentNodeIndex(), game.getGhostCurrentNodeIndex(GHOST.INKY), DM.PATH);
    this.pinkyDir =
        game.getNextMoveTowardsTarget(
            game.getPacmanCurrentNodeIndex(), game.getGhostCurrentNodeIndex(GHOST.PINKY), DM.PATH);
    this.sueDir =
        game.getNextMoveTowardsTarget(
            game.getPacmanCurrentNodeIndex(), game.getGhostCurrentNodeIndex(GHOST.SUE), DM.PATH);

    this.numberOfNodesInLevel = game.getNumberOfNodes();
    this.numberOfTotalPillsInLevel = game.getNumberOfPills();
    this.numberOfTotalPowerPillsInLevel = game.getNumberOfPowerPills();
  }