Beispiel #1
0
  /**
   * _update ghosts.
   *
   * @param moves the moves
   */
  private void _updateGhosts(EnumMap<GHOST, MOVE> moves) {
    for (Entry<GHOST, MOVE> entry : moves.entrySet()) {
      Ghost ghost = fantasmas.get(entry.getKey());

      if (ghost.lairTime == 0) {
        if (ghost.edibleTime == 0 || ghost.edibleTime % GHOST_SPEED_REDUCTION != 0) {
          ghost.lastMoveMade = _checkGhostDir(ghost, entry.getValue());
          moves.put(entry.getKey(), ghost.lastMoveMade);
          ghost.currentNodeIndex =
              laberintoActua.graph[ghost.currentNodeIndex].neighbourhood.get(ghost.lastMoveMade);
        }
      }
    }
  }
Beispiel #2
0
  private boolean _reverseGhosts(EnumMap<GHOST, MOVE> moves, boolean force) {
    boolean reversed = false;
    boolean globalReverse = false;

    if (Math.random() < GHOST_REVERSAL) globalReverse = true;

    for (Entry<GHOST, MOVE> entry : moves.entrySet()) {
      Ghost ghost = fantasmas.get(entry.getKey());

      if (tiempoLvlActual > 1 && ghost.lairTime == 0 && ghost.lastMoveMade != MOVE.NEUTRAL) {
        if (force || (pildoraPoderFueComida || globalReverse)) {
          ghost.lastMoveMade = ghost.lastMoveMade.opposite();
          ghost.currentNodeIndex =
              laberintoActua.graph[ghost.currentNodeIndex].neighbourhood.get(ghost.lastMoveMade);
          reversed = true;
          timeOfLastGlobalReversal = tiempoTotal;
        }
      }
    }

    return reversed;
  }
Beispiel #3
0
  /** _eat power pill. */
  private void _eatPowerPill() {
    pildoraPoderFueComida = false;

    int powerPillIndex = laberintoActua.graph[pacman.currentNodeIndex].powerPillIndex;

    if (powerPillIndex >= 0 && powerPills.get(powerPillIndex)) {
      score += POWER_PILL;
      fastamasComerMultiplicador = 1;
      powerPills.clear(powerPillIndex);

      int newEdibleTime =
          (int)
              (EDIBLE_TIME
                  * (Math.pow(EDIBLE_TIME_REDUCTION, cuentaElLvl % LEVEL_RESET_REDUCTION)));

      for (Ghost ghost : fantasmas.values())
        if (ghost.lairTime == 0) ghost.edibleTime = newEdibleTime;
        else ghost.edibleTime = 0;

      pildoraPoderFueComida = true;
    }
  }
Beispiel #4
0
  /** _feast. */
  private void _feast() {
    pacmanFueComido = false;

    for (GHOST ghost : GHOST.values()) fantasmaComido.put(ghost, false);

    for (Ghost ghost : fantasmas.values()) {
      int distance = getShortestPathDistance(pacman.currentNodeIndex, ghost.currentNodeIndex);

      if (distance <= EAT_DISTANCE && distance != -1) {
        if (ghost.edibleTime > 0) // pac-man eats ghost
        {
          score += GHOST_EAT_SCORE * fastamasComerMultiplicador;
          fastamasComerMultiplicador *= 2;
          ghost.edibleTime = 0;
          ghost.lairTime =
              (int)
                  (COMMON_LAIR_TIME
                      * (Math.pow(LAIR_REDUCTION, cuentaElLvl % LEVEL_RESET_REDUCTION)));
          ghost.currentNodeIndex = laberintoActua.lairNodeIndex;
          ghost.lastMoveMade = MOVE.NEUTRAL;

          fantasmaComido.put(ghost.type, true);
        } else // ghost eats pac-man
        {
          pacman.numberOfLivesRemaining--;
          pacmanFueComido = true;

          if (pacman.numberOfLivesRemaining <= 0) juegoTerminado = true;
          else _levelReset();

          return;
        }
      }
    }

    for (Ghost ghost : fantasmas.values()) if (ghost.edibleTime > 0) ghost.edibleTime--;
  }
Beispiel #5
0
 /** _update lair times. */
 private void _updateLairTimes() {
   for (Ghost ghost : fantasmas.values())
     if (ghost.lairTime > 0)
       if (--ghost.lairTime == 0) ghost.currentNodeIndex = laberintoActua.initialGhostNodeIndex;
 }