/
victor_t
/
rogue
Обзор
Документация
Войти
/
victor_t
/
rogue
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
1
CI/CD
Аналитика
Безопасность
master
src/app/Main.java
114 строк
3 KB
Victor
add: project source code
07 июл 2026, 07:15
07 июл 2026, 07:15
0ff2a00
Код
Авторство
О чём код?
package app; import com.googlecode.lanterna.input.KeyStroke; import datalayer.data.SaveManager; import datalayer.data.dto.RunStatistics; import datalayer.data.dto.StatisticsRepository; import domain.CharacterAndEnemies.Enemy; import domain.GameSession; import domain.Items.Treasure; import domain.Position; import presentation.Presentation; import presentation.VisibilityCalculate; import java.util.List; public class Main { public static void main(String[] args) throws Exception { Presentation presentation = new Presentation(); presentation.start(); int index = presentation.renderMenu(); while (index != -1) { switch (index) { case 0 -> { play(false, presentation); } case 1 -> { play(true, presentation); } case 2 -> { rating(presentation); } } index = presentation.renderMenu(); } presentation.end(); System.out.println("\nПрограмма завершена."); } public static void play(boolean mode, Presentation presentation) throws Exception { GameSession gameSession = new GameSession(); boolean flag = mode; if (mode) { if (SaveManager.hasSaveFile() && SaveManager.loadToSession(gameSession)) { StatisticsRepository.remove(gameSession.getStatistics().currentId); System.out.println("Загрузка игры"); } else { flag = false; System.out.println("Новая игра"); } } RunStatistics statistics = gameSession.getStatistics(); presentation.setGameSession(gameSession); presentation.setStatistics(statistics); presentation.initializeVisitedMap(flag); presentation.renderGame(); boolean running = true; while (running) { KeyStroke keyStroke = presentation.getScreen().pollInput(); if (keyStroke != null) { running = presentation.handleKey(keyStroke); VisibilityCalculate.clearArray(presentation.getCurrentlyVisible()); } processDeadEnemies(gameSession, statistics, presentation); if(gameSession.getCurrentLevel().getLevel() > 21) running = false; Thread.sleep(20); } if (!gameSession.getPlayer().isAlive() || gameSession.getCurrentLevel().getLevel() > 21) { StatisticsRepository.append(gameSession.getStatistics()); SaveManager.clearFile(); } else { SaveManager.save(gameSession); StatisticsRepository.append(gameSession.getStatistics()); } presentation.clear(); } private static void rating(Presentation presentation) throws Exception { List<RunStatistics> allRuns = StatisticsRepository.loadAllRuns(); presentation.renderRating(allRuns); } private static void processDeadEnemies(GameSession gameSession, RunStatistics statistics, Presentation presentation) throws Exception { List<Enemy> enemyDeadList = gameSession.getCurrentLevel().getGeneration().getEnemies().stream() .filter(enemy -> !enemy.isAlive()) .toList(); if (!enemyDeadList.isEmpty()) { for (Enemy enemy : enemyDeadList) { statistics.enemiesDefeated++; Position pos = enemy.getPosition(); gameSession.getCurrentLevel().getGeneration().getItems().add( new Treasure(pos, gameSession.getCurrentLevel().getLevel(), enemy.getType()) ); } gameSession.getCurrentLevel().getGeneration().getEnemies() .removeIf(enemy -> !enemy.isAlive()); presentation.renderGame(); } } }