次の 2 次元配列では、# は迷路の壁を表し、ドットは迷路を通る可能性のある経路の正方形を表します。移動は、ドットを含む配列内の場所に対してのみ行うことができます...迷路を「歩く」には、再帰的なメソッド mazeTraverse が必要です。配列と迷路の開始位置を引数として受け取る必要があります。迷路からの出口を見つけようとするとき、パスの各四角に文字「X」を配置する必要があります。このメソッドは、各移動後に迷路を表示して、ユーザーが迷路が解かれているのを見ることができるようにする必要があります。
これを過ぎてどのように進歩するかはよくわかりません。助けてくれる人に感謝します。
public class BonusMaze {
public static void main(String args[]){
char field[][]={
{'#','#','#','#','#','#','#','#','#','#','#','#'},
{'#','•','•','•','#','•','•','•','•','•','•','#',},
{'•','•','#','•','#','•','#','#','#','#','•','#',},
{'#','#','#','•','#','•','•','•','•','#','•','#',},
{'#','•','•','•','•','#','#','#','•','#','•','•',},
{'#','#','#','#','•','#','•','#','•','#','•','#',},
{'#','•','•','#','•','#','•','#','•','#','•','#',},
{'#','#','•','#','•','#','•','#','•','#','•','#',},
{'#','•','•','•','•','•','•','•','•','#','•','#',},
{'#','#','#','#','#','#','•','#','#','#','•','#',},
{'#','•','•','•','•','•','•','#','•','•','•','#',},
{'#','#','#','#','#','#','#','#','#','#','#','#'},
};
printField(field);
mazeTraverse(field,2,0);
}
public static void mazeTraverse(char[][] field, int x, int y){
field[2][0]='X';
if(field[x+1][y]=='•'){
field[x+1][y]='X';
printField(field);
mazeTraverse(field,x+1,y);
}
else if(field[x-1][y]=='•'){
field[x-1][y]='X';
printField(field);
mazeTraverse(field,x+1,y);
}
else if(field[x][y+1]=='•'){
field[x][y+1]='X';
printField(field);
mazeTraverse(field,x+1,y);
}
else if(field[x][y-1]=='•'){
field[x][y-1]='X';
printField(field);
mazeTraverse(field,x+1,y);
}
}
public static void printField(char[][] field){
for(int x=0; x<11; x++){
for(int y=0; y<11; y++){
System.out.print(field[x][y]);
}
System.out.println();
}
System.out.print("\n\n");
}
}
これに変更しましたが、すべて奇抜です:
public class BonusMaze {
public static boolean east=true, north=false, south=false, west=false;
/*
east=false;
north=false;
south=false;
west=false;
*/
public static void main(String args[]){
char field[][]={
{'#','#','#','#','#','#','#','#','#','#','#','#'},
{'#','•','•','•','#','•','•','•','•','•','•','#',},
{'•','•','#','•','#','•','#','#','#','#','•','#',},
{'#','#','#','•','#','•','•','•','•','#','•','#',},
{'#','•','•','•','•','#','#','#','•','#','•','•',},
{'#','#','#','#','•','#','•','#','•','#','•','#',},
{'#','•','•','#','•','#','•','#','•','#','•','#',},
{'#','#','•','#','•','#','•','#','•','#','•','#',},
{'#','•','•','•','•','•','•','•','•','#','•','#',},
{'#','#','#','#','#','#','•','#','#','#','•','#',},
{'#','•','•','•','•','•','•','#','•','•','•','#',},
{'#','#','#','#','#','#','#','#','#','#','#','#'},
};
printField(field);
field[2][0]='X';
mazeTraverse(field,2,0);
}
public static void mazeTraverse(char[][] field, int x, int y){
if(x==2&&y==0){
field[2][1]='X';
mazeTraverse(field,2,1);
printField(field);
}
if(east){
if(field[x][y+1]=='•' || field[x+1][y]=='X'){
field[x][y+1]='X';
}
if(field[x+1][y+1]=='•'){
east=false;
north=false;
south=false;
west=false;
south=true;
printField(field);
mazeTraverse(field,x+1,y);
}
else if(field[x][y+2]=='•'){
east=false;
north=false;
south=false;
west=false;
east=true;
printField(field);
mazeTraverse(field,x+1,y);
}
else if(field[x-1][y+1]=='•'){
east=false;
north=false;
south=false;
west=false;
north=true;
printField(field);
mazeTraverse(field,x+1,y);
}
else if(field[x][y+1]=='#'){
east=false;
north=false;
south=false;
west=false;
west=true;
printField(field);
mazeTraverse(field,x-1,y);
}
}
else if(west){
if(field[x-1][y]=='•' || field[x-1][y]=='X'){
field[x-1][y]='X';
}
if(field[x+1][y+1]=='•'){
east=false;
north=false;
south=false;
west=false;
south=true;
printField(field);
mazeTraverse(field,x+1,y);
}
else if(field[x][y+2]=='•'){
east=false;
north=false;
south=false;
west=false;
east=true;
printField(field);
mazeTraverse(field,x+1,y);
}
else if(field[x-1][y+1]=='•'){
east=false;
north=false;
south=false;
west=false;
north=true;
printField(field);
mazeTraverse(field,x+1,y);
}
else if(field[x][y+1]=='#'){
east=false;
north=false;
south=false;
west=false;
west=true;
printField(field);
mazeTraverse(field,x-1,y);
}
}
else if(north){
if(field[x][y+1]=='•' || field[x][y+1]=='X'){
field[x][y+1]='X';
}
if(field[x+1][y+1]=='•'){
east=false;
north=false;
south=false;
west=false;
south=true;
printField(field);
mazeTraverse(field,x+1,y);
}
else if(field[x][y+2]=='•'){
east=false;
north=false;
south=false;
west=false;
east=true;
printField(field);
mazeTraverse(field,x+1,y);
}
else if(field[x-1][y+1]=='•'){
east=false;
north=false;
south=false;
west=false;
north=true;
printField(field);
mazeTraverse(field,x+1,y);
}
else if(field[x][y+1]=='#'){
east=false;
north=false;
south=false;
west=false;
west=true;
printField(field);
mazeTraverse(field,x-1,y);
}
}
else if(south){
if(field[x][y-1]=='•' || field[x][y-1]=='X'){
field[x][y-1]='X';
}
if(field[x+1][y+1]=='•'){
east=false;
north=false;
south=false;
west=false;
south=true;
printField(field);
mazeTraverse(field,x+1,y);
}
else if(field[x][y+2]=='•'){
east=false;
north=false;
south=false;
west=false;
east=true;
printField(field);
mazeTraverse(field,x+1,y);
}
else if(field[x-1][y+1]=='•'){
east=false;
north=false;
south=false;
west=false;
north=true;
printField(field);
mazeTraverse(field,x+1,y);
}
else if(field[x][y+1]=='#'){
east=false;
north=false;
south=false;
west=false;
west=true;
printField(field);
mazeTraverse(field,x-1,y);
}
}
/*if(field[x+1][y]=='•'){
field[x+1][y]='X';
printField(field);
mazeTraverse(field,x+1,y);
}
else if(field[x-1][y]=='•'){
field[x-1][y]='X';
printField(field);
mazeTraverse(field,x+1,y);
}
else if(field[x][y+1]=='•'){
field[x][y+1]='X';
printField(field);
mazeTraverse(field,x+1,y);
}
else if(field[x][y-1]=='•'){
field[x][y-1]='X';
printField(field);
mazeTraverse(field,x+1,y);
}*/
}
public static void printField(char[][] field){
for(int x=0; x<12; x++){
for(int y=0; y<12; y++){
System.out.print(field[x][y]);
}
System.out.println();
}
System.out.print("\n\n");
}
}