質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
参照

参照は、プログラミングにおいて変数や関数といったメモリ空間上での所在を指示するデータのことを指します。その中にはデータ自体は含まれず、他の場所にある情報を間接的に指示するプログラムです。

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

2回答

2492閲覧

迷路のスタートとゴールの作り方が分からない

退会済みユーザー

退会済みユーザー

総合スコア0

参照

参照は、プログラミングにおいて変数や関数といったメモリ空間上での所在を指示するデータのことを指します。その中にはデータ自体は含まれず、他の場所にある情報を間接的に指示するプログラムです。

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2021/05/10 07:11

前提・実現したいこと

個人製作で迷路を作っていたのですが迷路のスタートとゴールを作ることができませんでした。
迷路のサイズを参照する形で場所を作ろうとしましたが参照がうまくいかずに変化がないまま
プログラムが終了してしまいます。
迷路内に作る形でも外枠を開ける形でもいいのですがどなたかわかる方いらっしゃいましたら
よろしくお願いいたします。

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

Java

1import java.util.ArrayList; 2import java.util.Collections; 3import java.util.Scanner; 4 5public class Maze { 6 7 public static void main(String[]args){ 8 Information(); 9 Scanner scanner = new Scanner(System.in); 10 String dif = scanner.next(); 11 int[][] maze; 12 maze = Difficulty(dif); 13 14 int row = maze.length/2,col = maze[0].length/2; 15 maze[row][col] = 1; 16 ArrayList<Integer>direction = new ArrayList<Integer>(); 17 direction.add(0); 18 direction.add(1); 19 direction.add(2); 20 direction.add(3); 21 createRoute(maze,row,col,direction); 22 outputMaze(maze); 23 24 } 25 public static void createRoute(int[][]maze,int row,int col,ArrayList<Integer>direction){ 26 Collections.shuffle(direction); 27 for(int i = 0;i < direction.size();i++){ 28 if(canCreate(maze,direction.get(i),row,col)){ 29 switch(direction.get(i)){ 30 case 0: 31 maze[row][col - 1] = 1; 32 maze[row][col - 2] = 1; 33 col = col - 2; 34 break; 35 case 1: 36 maze[row][col + 1] = 1; 37 maze[row][col + 2] = 1; 38 col = col + 2; 39 break; 40 case 2: 41 maze[row+1][col] = 1; 42 maze[row+2][col] = 1; 43 row = row + 2; 44 break; 45 case 3: 46 maze[row-1][col] = 1; 47 maze[row-2][col] = 1; 48 row = row - 2; 49 break; 50 default: 51 break; 52 } 53 direction.add(0); 54 direction.add(1); 55 direction.add(2); 56 direction.add(3); 57 createRoute(maze,row,col,direction); 58 } 59 } 60 } 61 static boolean canCreate(int[][]maze,int direction,int row,int col){ 62 switch(direction){ 63 case 0: 64 if(col - 2 <= 0){ 65 return false; 66 }else{ 67 if(maze[row][col - 2] == 0){ 68 return true; 69 }else{ 70 return false; 71 } 72 } 73 case 1: 74 if(col + 2 >=maze[0].length - 1){ 75 return false; 76 }else{ 77 if(maze[row][col + 2] == 0){ 78 return true; 79 }else{ 80 return false; 81 } 82 } 83 case 2: 84 if(row + 2 >=maze.length-1){ 85 return false; 86 }else{ 87 if(maze[row + 2][col] == 0){ 88 return true; 89 }else{ 90 return false; 91 } 92 } 93 case 3: 94 if(row - 2 <= 0){ 95 return false; 96 }else{ 97 if(maze[row - 2][col] == 0){ 98 return true; 99 }else{ 100 return false; 101 } 102 } 103 default: 104 } 105 return false; 106 } 107 public static void outputMaze(int[][]maze){ 108 for(int i = 0;i < maze.length;i++){ 109 for(int j = 0;j < maze[i].length;j++){ 110 if(maze[i][j] == 0){ 111 System.out.print("□"); 112 }else{ 113 System.out.print(" "); 114 } 115 } 116 System.out.println(); 117 } 118 } 119 public static void Information() { 120 System.out.println("迷路ゲームです"); 121 System.out.println("難易度を以下から選択してください"); 122 System.out.println("EASY,NORMAL,HARD,VERYHARD"); 123 } 124 125 public static int[][] Difficulty(String dif) { 126 int height = 0; 127 int width = 0; 128 129 130 switch(dif){ 131 case "EASY": 132 System.out.println("EASYが選択されました"); 133 height = 19; 134 width = 19; 135 break; 136 case "NORMAL": 137 System.out.println("NORMALが選択されました"); 138 height = 31; 139 width = 31; 140 break; 141 case "HARD": 142 System.out.println("HARDが選択されました"); 143 height = 43; 144 width = 43; 145 break; 146 case "VERYHARD": 147 System.out.println("VERYHARDが選択されました"); 148 height = 55; 149 width = 55; 150 break; 151 default: 152 System.out.println("その難易度は存在しません"); 153 } 154 int maze[][] = new int[height][width]; 155 return maze; 156 } 157} 158

試したこと

配列を参照してスペースを代入したが型の違いで消すことができませんでした。

補足情報(FW/ツールのバージョンなど)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

見たところ
中心から行き止まりになるまで進んで、
行き止まりになったら途中の進める可能性ある交差点から進んで、
すべてが行き止まりになるまでくり返し、ルートを拓いていく、
という迷路作成なので、

迷路作成中、
step数を数えて、最大step数を刻んだときの
col,rowを控えておき、

迷路作図で
中心地点の箇所を "S"と書き、
最大step数地点の箇所を "G"と書けば、
それもひとつのスタート・ゴールかと。

投稿2021/05/12 13:09

FromMZ1500

総合スコア496

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

迷路内に作る形でも外枠を開ける形でもいいのですがどなたかわかる方いらっしゃいましたら
よろしくお願いいたします。

質問内容と提示コードのレベル感があっていないように思うのですが、コードはRyo_Yoshidaさんひとりで書いたものですか?

グループで書いているならグループ内で相談されたほうがいいでしょうし、書籍やHPを参考にしたのであれば出典を明示してください。

配列を参照してスペースを代入したが型の違いで消すことができませんでした。

int[][] mazeに文字列を入れようとしたということですか?
mazeには整数値しか入りません。

入れる場所のめどがついているのであれば、例えばゴールは2にするとかスタートは-1にするとか好きに決めればいいでしょう。

投稿2021/05/12 11:24

編集2023/07/28 13:21
TN8001

総合スコア9862

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問