//Also nur die Methoden in blauer Schrift verstehe ich nicht
import javax.swing.JOptionPane;
//blatt 6,die Lösungen
public class Pinguin_6_2 extends Maze {
static int [][] maze;
public static void main(String[] args) {
int width=Integer.parseInt(JOptionPane.showInputDialog("geben sie eine Breite des Labyrinths"));
int height=Integer.parseInt(JOptionPane.showInputDialog("geben sie eine Höhe des Labyrinths"));
int maxDistance=Integer.parseInt(JOptionPane.showInputDialog("geben sie die maximale Distanze"));
maze=generatePenguinMaze(width, height);
System.out.println(maze.length+", maze[0].length : "+maze[0].length);
if(width <3 || height <3 || maxDistance <1) {
System.out.println("fehlerhafte Eingabe");
}
maze[1][0]=PLAYER;
draw(maze);
int pinguins=walk(1,0,maxDistance);
System.out.println("Gerette Pinuine :"+ pinguins);
}
// testet ,ob sich eine Wand an den gegebenen Koordinaten befindet
public static boolean wall(int x,int y) {
return maze[x][y]==WALL;
}
// Testet,ob sich an den gegebenen Koordinaten keine Wand befindet;die
//Koordinaten können außerhalb des Labyrinths liegen
//????????????????? x**maze[0].length??
public static boolean noWall(int x, int y) {
if(x<0 || y<0|| x>=maze.length || y>=maze[0].length)
return false;
return maze[x][y]!=WALL;
}
public static int walk(int x, int y, int maxDistance) {
if(maxDistance <0)
return 0;
// sind wir in Begriff, aus dem Labyrinth zu laufen
if(x<0 || y <0|| x>=maze.length || y>= maze[0].length)
return 0;
// sind wir in Begriff,uns auf ein wandfreis Feld zu wagen?
if(noWall(x-1,y-1) && noWall(x-1,y)&& noWall(x-1,y+1)&& noWall(x,y-1)&& noWall(x,y)&&
noWall(x,y+1) && noWall(x+1,y-1)&& noWall(x+1,y)&& noWall(x+1,y+1))
return 0;
// sind wir in Begriff, in eine wand oder auf Feld zu laufen, auf dem wir schon waren?
if(maze[x][y]==WALL || maze[x][y]==OLD_PATH_ACTIVE || maze[x][y]==OLD_PATH_DONE) {
return 0;
}
int penguins=maze[x][y]==PENGUIN ?1: 0;
//wir betreten das Feld
maze[x][y]=PLAYER;
//draw(maze);
maze[x][y]=OLD_PATH_ACTIVE;
penguins+=walk(x+1,y,maxDistance-1);
//An diesem punkt sind wir aus der Rekursion zurückgekommen.wir betreten das Feld
//daher erneut
maze[x][y]=PLAYER;
//draw(maze);
maze[x][y]=OLD_PATH_ACTIVE;
penguins+=walk(x,y+1,maxDistance);
// An diesem punkt sind wir aus der Rekursion zurückgekommen. wir betreten das feld
// daher erneut
maze[x][y]=PLAYER;
//draw(maze);
maze[x][y]=OLD_PATH_ACTIVE;
penguins+=walk(x-1,y,maxDistance);
// An diesem punkt sind wir aus der Rekursion zurückgekommen. wir betreten das feld
// daher erneut
maze[x][y]=PLAYER;
//draw(maze);
maze[x][y]=OLD_PATH_ACTIVE;
penguins+=walk(x,y-1,maxDistance);
// An diesem punkt sind wir aus der Rekursion zurückgekommen. wir betreten das feld
// daher erneut
maze[x][y]=PLAYER;
//draw(maze);
// Suche in alle Richtungen abgeschlossen , mit diesem Feld sind wir fertig
maze[x][y]=OLD_PATH_DONE;
return penguins;
}
}
import javax.swing.JOptionPane;
//blatt 6,die Lösungen
public class Pinguin_6_2 extends Maze {
static int [][] maze;
public static void main(String[] args) {
int width=Integer.parseInt(JOptionPane.showInputDialog("geben sie eine Breite des Labyrinths"));
int height=Integer.parseInt(JOptionPane.showInputDialog("geben sie eine Höhe des Labyrinths"));
int maxDistance=Integer.parseInt(JOptionPane.showInputDialog("geben sie die maximale Distanze"));
maze=generatePenguinMaze(width, height);
System.out.println(maze.length+", maze[0].length : "+maze[0].length);
if(width <3 || height <3 || maxDistance <1) {
System.out.println("fehlerhafte Eingabe");
}
maze[1][0]=PLAYER;
draw(maze);
int pinguins=walk(1,0,maxDistance);
System.out.println("Gerette Pinuine :"+ pinguins);
}
// testet ,ob sich eine Wand an den gegebenen Koordinaten befindet
public static boolean wall(int x,int y) {
return maze[x][y]==WALL;
}
// Testet,ob sich an den gegebenen Koordinaten keine Wand befindet;die
//Koordinaten können außerhalb des Labyrinths liegen
//????????????????? x**maze[0].length??
public static boolean noWall(int x, int y) {
if(x<0 || y<0|| x>=maze.length || y>=maze[0].length)
return false;
return maze[x][y]!=WALL;
}
public static int walk(int x, int y, int maxDistance) {
if(maxDistance <0)
return 0;
// sind wir in Begriff, aus dem Labyrinth zu laufen
if(x<0 || y <0|| x>=maze.length || y>= maze[0].length)
return 0;
// sind wir in Begriff,uns auf ein wandfreis Feld zu wagen?
if(noWall(x-1,y-1) && noWall(x-1,y)&& noWall(x-1,y+1)&& noWall(x,y-1)&& noWall(x,y)&&
noWall(x,y+1) && noWall(x+1,y-1)&& noWall(x+1,y)&& noWall(x+1,y+1))
return 0;
// sind wir in Begriff, in eine wand oder auf Feld zu laufen, auf dem wir schon waren?
if(maze[x][y]==WALL || maze[x][y]==OLD_PATH_ACTIVE || maze[x][y]==OLD_PATH_DONE) {
return 0;
}
int penguins=maze[x][y]==PENGUIN ?1: 0;
//wir betreten das Feld
maze[x][y]=PLAYER;
//draw(maze);
maze[x][y]=OLD_PATH_ACTIVE;
penguins+=walk(x+1,y,maxDistance-1);
//An diesem punkt sind wir aus der Rekursion zurückgekommen.wir betreten das Feld
//daher erneut
maze[x][y]=PLAYER;
//draw(maze);
maze[x][y]=OLD_PATH_ACTIVE;
penguins+=walk(x,y+1,maxDistance);
// An diesem punkt sind wir aus der Rekursion zurückgekommen. wir betreten das feld
// daher erneut
maze[x][y]=PLAYER;
//draw(maze);
maze[x][y]=OLD_PATH_ACTIVE;
penguins+=walk(x-1,y,maxDistance);
// An diesem punkt sind wir aus der Rekursion zurückgekommen. wir betreten das feld
// daher erneut
maze[x][y]=PLAYER;
//draw(maze);
maze[x][y]=OLD_PATH_ACTIVE;
penguins+=walk(x,y-1,maxDistance);
// An diesem punkt sind wir aus der Rekursion zurückgekommen. wir betreten das feld
// daher erneut
maze[x][y]=PLAYER;
//draw(maze);
// Suche in alle Richtungen abgeschlossen , mit diesem Feld sind wir fertig
maze[x][y]=OLD_PATH_DONE;
return penguins;
}
}