/** * _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); } } } }
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; }
/** _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--; }
/** _update lair times. */ private void _updateLairTimes() { for (Ghost ghost : fantasmas.values()) if (ghost.lairTime > 0) if (--ghost.lairTime == 0) ghost.currentNodeIndex = laberintoActua.initialGhostNodeIndex; }