public class PenguinRescue extends Maze { private static int[][] maze; public static void main(String[] args) { int width = -1; while (width <= 0) width = MiniJava.read("Wie breit soll das Labyrinth sein?"); int height = -1; while (height <= 0) height = MiniJava.read("Wie hoch soll das Labyrinth sein?"); int maxDistance = -1; while (maxDistance <= 0) maxDistance = MiniJava.read("Was ist der maximale Abstand zum Startpunkt?"); maze = generateStandardPenguinMaze(width, height); /* draw(maze); try { Thread.sleep(1000); } catch (Exception e) {} MiniJava.write("Spielfeldgröße: " + width + "x" + height + "\n" + "Maximale Entfernung: " + maxDistance); */ int saved = walk(1, 0, maxDistance); MiniJava.write("Es wurden " + saved + " Pinguine gerettet."); } public static int walk(int x, int y, int maxDistance) { System.out.println(x + ", " + y); // Zwischenspeichern, ob aktuell ein Pinguin erreicht wurde int savedPenguins = 0; if (maze[x][y] == PENGUIN) savedPenguins = 1; // Zug durchführen: maze[x][y] = PLAYER; // Spieler steht nun auf aktuellem Feld draw(maze); // Zug sichtbar machen maze[x][y] = OLD_PATH_ACTIVE; // markiere als aktiv maxDistance--; if (maxDistance > 0) { // noch was zu tun // Jedes umgebende Feld behandeln; danach jeweils zurückgehen // zur aktuellen Position (schönere Optik): for (int i = -1; i <= 1; i++) { for (int j = -1; j <= 1; j++) { int _x = x+i; int _y = y+j; // Nur auf gültige neue Felder gehen: if ( (i == 0 || j == 0) && // Digonalzüge ausschließen (_x > 0 && _y > 0) && // nicht wieder Startposition maze[_x][_y] != OLD_PATH_ACTIVE && maze[_x][_y] != OLD_PATH_DONE && maze[_x][_y] != WALL) { // Prüfe, ob Zielfeld umliegende Wand besitzt: boolean hasWall = false; for (int k = -1; k <= 1; k++) for (int m = -1; m <= 1; m++) if (maze[_x + k][_y + m] == WALL) hasWall = true; if (hasWall) { savedPenguins += walk(x+i, y+j, maxDistance); maze[x][y] = PLAYER; // Spieler wieder zurücksetzen draw(maze); // sichtbar machen maze[x][y] = OLD_PATH_ACTIVE; // wieder aktiv } } } } } maze[x][y] = OLD_PATH_DONE; // als behandelt markieren return savedPenguins; } }