/** * Метод, рисующий всё содержимое игры, используя Graphics2D. * * @param g объект класса Graphics для рисования в панели */ @Override public void paint(Graphics g) { super.paint(g); Graphics2D g2d = (Graphics2D) g; g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); drawScore(g); // рисование панели с очками и жизнями drawMap(g); // рисование самой карты drawPellets(g); // рисование точек for (int i = 0; i < ghostNum; i++) ghost[i].paint(g2d, i); // рисование привидений pacman.paint(g2d); // и Пакмана if (!inGame) { // если игра не запущена showIntroScreen(g2d); // начальный экран refresh(); // обновление карты } }
public static void main(String[] args) throws IOException { System.out.println("Welcome to Pac Man problem !!"); Pacman obj = new Pacman(); int selection = Integer.parseInt(args[0]); String[] files = { "smallSearch.txt", "trickySearch.txt", }; File mazeFile = new File(files[selection]); BufferedReader br = new BufferedReader(new FileReader(mazeFile)); String line; int M = 0; int N = 0; while ((line = br.readLine()) != null) { M++; String[] items = line.split(""); N = items.length; } br.close(); char[][] maze = new char[M][N]; // Initialize start point and read maze obj.readMaze(mazeFile, maze, start); // Print maze obj.printMaze(maze); // Get goals for the start state start.goals = obj.goals(maze); // Run A star search obj.astar(maze); }
/** * Метод, объединящий движение героев игры. * * <p>Для движения привидений используется метод Move(), а для движения Пакмана move() или * demoMove, в зависимости от режима игры, т.е. значения переменной demo. * * @throws FileNotFoundException * @throws InterruptedException */ public void move() throws FileNotFoundException, InterruptedException { if (!demo && !replay) { // обычный режим игры if (!pause) { pacman.setDemo(false); pacman.setReplay(false); for (int i = 0; i < ghostNum; i++) ghost[i].Move(); pacman.move(); repaint(); } } else if (demo) { // автоматический режим pacman.setDemo(true); for (int i = 0; i < ghostNum; i++) ghost[i].Move(); pacman.demoMove(); repaint(); } else if (replay) { // повтор игры pacman.setReplay(true); for (int i = 0; i < ghostNum; i++) ghost[i].notationMove(); // ghost[i].Move(); pacman.notationMove(); if (pacman.collision()) { pacman.lives--; continueLevel(); } repaint(); } }
/** * Метод продолжения уровня после столкновения Пакмана с привидением. * * <p>Герои устанавливаются в свои исходные координаты. * * <p>Если количество жизней Пакмана равно 0, то вызывается вывод окна о проигрыше. */ public void continueLevel() { if (pacman.lives == 0) { if (replay) { score += 1; } repaint(); finish = true; gameOver(); // окно "Конец игры" } // восстанавливаем начальное положение pacman.x = 25; // пакмана и привидений pacman.y = 25; pacman.dx = 0; pacman.dy = 0; for (int i = 0; i < ghostNum; i++) { ghost[i].x = 325; ghost[i].y = 350; ghost[i].dx = 0; ghost[i].dy = 0; } }
/** * Метод обновления (восстановления) карты. * * <p>Матрица перезаписывается начальными значениями, герои устанавливаются в свои исходные * координаты. */ public void refresh() { for (int i = 0; i < 25; i++) for (int j = 0; j < 26; j++) { grid[i][j] = grid2[i][j]; // восстанавливаем карту } // finish = false; pacman.lives = 3; // задаём начальные значения score = 0; // жизней, очков, координат pacman.x = 25; pacman.y = 25; pacman.dx = 0; pacman.dy = 0; for (int i = 0; i < ghostNum; i++) { ghost[i].x = 325; ghost[i].y = 350; ghost[i].dx = 0; ghost[i].dy = 0; } }
/** {@inheritDoc} */ @Override @requires("java-runtime>=7") public boolean invoke(final String command, final boolean consumed, final Scanner scanner) { if (command.equals("help")) { if (consumed) return true; System.out.println("COMMANDS: DESCRIPTIONS:"); System.out.println("help Leads here..."); System.out.println("show c Show copyright notice."); System.out.println("show w Show warranty notice."); System.out.println("show l Show licenses."); System.out.println("version Print version information about this program."); System.out.println("credits Shows the credits of this program and all aktiv plug-ins."); } else if (command.equals("show c")) { if (consumed) return true; System.out.println("Paradis — Ever growing network for parallell and distributed computing."); System.out.println("Copyright © 2012 Mattias Andrée"); System.out.println(); System.out.println("This program is free software: you can redistribute it and/or modify"); System.out.println( "it under the terms of the GNU Affero General Public License as published by"); System.out.println("the Free Software Foundation, either version 3 of the License, or"); System.out.println("(at your option) any later version."); System.out.println(); System.out.println( "You should have received a copy of the GNU Affero General Public License"); System.out.println("along with this program. If not, see <http://www.gnu.org/licenses/>."); } else if (command.equals("show w")) { if (consumed) return true; System.out.println("This program is distributed in the hope that it will be useful,"); System.out.println("but WITHOUT ANY WARRANTY; without even the implied warranty of"); System.out.println("MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the"); System.out.println("GNU Affero General Public License for more details."); } else if (command.equals("show l")) { if (consumed) return true; final String pager = Properties.getPager(); if (FileHandler.fileExists("res/COPYING+colour")) Pager.pageFile(pager, "Copyright information", "res/COPYING+colour"); else if (FileHandler.fileExists("res/COPYING")) Pager.pageFile(pager, "Copyright information", "res/COPYING"); else Pager.pageFile(pager, "Copyright information", "COPYING"); if (FileHandler.fileExists("res/LICENSE.AGPL3+colour")) Pager.pageFile(pager, "GNU Affero General Public License v3", "res/LICENSE.AGPL3+colour"); else if (FileHandler.fileExists("res/LICENSE.AGPL3")) Pager.pageFile(pager, "GNU Affero General Public License v3", "res/LICENSE.AGPL3"); else Pager.pageFile(pager, "GNU Affero General Public License v3", "LICENSE.AGPL3"); if (FileHandler.fileExists("res/LICENSE.GPL3+colour")) Pager.pageFile(pager, "GNU General Public License v3", "res/LICENSE.GPL3+colour"); else if (FileHandler.fileExists("res/LICENSE.GPL3")) Pager.pageFile(pager, "GNU General Public License v3", "res/LICENSE.GPL3"); else Pager.pageFile(pager, "GNU General Public License v3", "LICENSE.GPL3"); if (FileHandler.fileExists("res/LICENSE.GPL2+colour")) Pager.pageFile(pager, "GNU General Public License v2", "res/LICENSE.GPL2+colour"); else if (FileHandler.fileExists("res/LICENSE.GPL2")) Pager.pageFile(pager, "GNU General Public License v2", "res/LICENSE.GPL2"); else Pager.pageFile(pager, "GNU General Public License v2", "LICENSE.GPL2"); } else if (command.equals("version")) { if (consumed) return true; System.out.println("Package: " + Program.PACKAGE); System.out.println("Fork path: " + Program.FORK); System.out.println("Version: " + Program.VERSION); System.out.println(); System.out.println("Website: " + Program.WEBSITE); } else if (command.equals("credits")) { if (consumed) return true; System.out.println("Paradis — Ever growing network for parallell and distributed computing."); System.out.println("Copyright © 2012 Mattias Andrée"); } else if (command.equals("shell")) { if (consumed) return true; String shell = Properties.getShell(); if ((shell == null) || shell.isEmpty()) System.out.println( "Impossible to determine shell, your shell should export SHELL to it's file name (e.g. bash)."); else try { final ProcessBuilder builder = new ProcessBuilder(shell); builder.inheritIO(); builder.start().waitFor(); } catch (final Throwable err) { System.out.print("Cannot manage to start shell"); } } else if (command.equals("pacman") || command.startsWith("pacman ")) { if (consumed) return true; Pacman.main( command.equals("pacman") ? new String[0] : command.substring("pacman ".length()).split(" ")); } else if (command.equals("makepkg") || command.startsWith("makepkg ")) { if (consumed) return true; Makepkg.main( command.equals("makepkg") ? new String[0] : command.substring("makepkg ".length()).split(" ")); } else return false; return true; }