/
victor_t
/
rogue
Обзор
Документация
Войти
/
victor_t
/
rogue
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
1
CI/CD
Аналитика
Безопасность
master
src/presentation/VisitedManager.java
121 строка
4 KB
Victor
add: project source code
07 июл 2026, 07:15
07 июл 2026, 07:15
0ff2a00
Код
Авторство
О чём код?
package presentation; import domain.CharacterAndEnemies.EnemyType; import domain.GameSession; import domain.Levels.Block; import domain.Levels.GenerationType; import domain.Levels.Room; import domain.Position; import java.util.ArrayList; import java.util.List; public class VisitedManager { public static void addVisitedRoomToMap(GameSession gameSession, boolean[][] mapVisited, int indexRoom) { Room room = gameSession.getCurrentLevel().getGeneration().getBlocks().get(indexRoom).getRoom(); for (int i = room.getLeftY(); i < room.getRightY() + 1; i++) { for (int j = room.getLeftX(); j < room.getRightX() + 1; j++) { mapVisited[i][j] = true; } } } public static Integer getPlayerRoomIndex(GameSession gameSession, boolean includeBounds) { int x = gameSession.getPlayer().getPosition().getX(); int y = gameSession.getPlayer().getPosition().getY(); List<Block> blocks = gameSession.getCurrentLevel().getGeneration().getBlocks(); for (int i = 0; i < blocks.size(); i++) { Room room = blocks.get(i).getRoom(); if (includeBounds) { if (x >= room.getLeftX() && x <= room.getRightX() && y >= room.getLeftY() && y <= room.getRightY()) { return i; } } else { if (x > room.getLeftX() && x < room.getRightX() && y > room.getLeftY() && y < room.getRightY()) { return i; } } } return null; } public static void addVisitedPlaceToMap(GameSession gameSession, boolean[][] mapVisited, List<Integer> visitedRooms, Integer indexRoom, boolean[][] currentlyVisible) { if (indexRoom == null) { int x = gameSession.getPlayer().getPosition().getX(), y = gameSession.getPlayer().getPosition().getY(); Character[][] map = gameSession.getCurrentLevel().getGeneration().toMap(); List<Character> validCharacters = new ArrayList<>(); for (int i = 0; i < 5; i++) { validCharacters.add(EnemyType.getType(i).getValue()); } validCharacters.add(GenerationType.WAY.getValue()); validCharacters.add(GenerationType.EXIT.getValue()); /*все 4 позиции соседних клеток 1 2 * 3 4 */ List<Position> positions = new ArrayList<>(); positions.add(new Position(x - 1, y)); positions.add(new Position(x, y - 1)); positions.add(new Position(x + 1, y)); positions.add(new Position(x, y + 1)); Integer playerInExitRoom = getPlayerRoomIndex(gameSession, true); if (playerInExitRoom != null) { VisibilityCalculate.calculateVisibility(gameSession, currentlyVisible, mapVisited, visitedRooms); deleteOtherFromVisionMap(gameSession, currentlyVisible); } for (Position pos : positions) { if (!mapVisited[pos.getY()][pos.getX()] && validCharacters.contains(map[pos.getY()][pos.getX()])) { mapVisited[pos.getY()][pos.getX()] = true; break; } } } else { addVisitedRoomToMap(gameSession, mapVisited, indexRoom); if (!visitedRooms.contains(indexRoom)) visitedRooms.add(indexRoom); } } public static void removeInnerVisitedRooms(GameSession gameSession, boolean[][] mapVisited, List<Integer> visitedRooms, Integer indexRoom) { for (Integer indexVisitedRoom: visitedRooms) { if (indexVisitedRoom != indexRoom) { Room room = gameSession.getCurrentLevel().getGeneration().getBlocks().get(indexVisitedRoom).getRoom(); for (int i = room.getLeftY() + 1; i < room.getRightY(); i++) { for (int j = room.getLeftX() + 1; j < room.getRightX(); j++) { mapVisited[i][j] = false; } } } } } private static void deleteOtherFromVisionMap(GameSession gameSession, boolean[][] currentlyVisible) { Integer indexRoom = getPlayerRoomIndex(gameSession, true); if (indexRoom != null) { Room room = gameSession.getCurrentLevel().getGeneration().getBlocks().get(indexRoom).getRoom(); for (int i = 0; i < currentlyVisible.length; i++) { for (int j = 0; j < currentlyVisible[i].length; j++) { if (!(i >= room.getLeftY() && i <= room.getRightY() && j >= room.getLeftX() && j <= room.getRightX())) { currentlyVisible[i][j] = false; } } } } } }