teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

回答内容に穴があったため、その内容と回避方法に関する追記をしました

2015/09/10 11:31

投稿

sgr-2
sgr-2

スコア294

answer CHANGED
@@ -1,10 +1,10 @@
1
1
  こんばんは。
2
2
 
3
3
  質問中で頂いているような二次元配列を使って迷路を構成するのであれば、
4
- 以下のような考え方はいかがでしょうか?
4
+ 以下のような考え方はいかがでしょうか?
5
5
 
6
6
  迷路そのものは格子状に切られていても、360度を見渡せるような形式には出来るのではないかと考えています。
7
- (Y字路のような上下左右に限定されない分かれ道の再現をしたい場合は、kutsulogさんのような配列データの考え方に工夫が必要になると思います)
7
+ (Y字路のような上下左右に限定されない分かれ道の再現をしたい場合は、kutsulogさんのような配列データの考え方に工夫が必要になると思います。格子状のデータから迷路を構築する場合は、斜めの表現は少し大変そうな印象です。)
8
8
 
9
9
  ![イメージ説明](df6a7c6a00fed2222862b1d6042d1fec.png)
10
10
  二次元配列の1つの値(壁or通路)をXY空間で大きさを持ったタイルにして考えてやることで
@@ -19,4 +19,16 @@
19
19
  ・自分の位置、向きというパラメータを設定する
20
20
  ・一歩で移動する距離、進行方向を変える際の角度を決める
21
21
  これらを考える事で、「360度自由に」が実現出来るように思えます。
22
- # 一回の移動量が1マスという前提でしたらすいません。
22
+ # 一回の移動量が1マスという前提でしたらすいません。
23
+
24
+ ----- 追記 -----
25
+ 後で気が付きましたが、穴がありました・・・
26
+ 以下のようなケースだと、多分大回りが必要だと思えますが
27
+ 赤の矢印方向に移動するとして単純に移動後の位置が配列上の0か1かで判断してしまうと、通り抜けられてしまいます。
28
+ ![イメージ説明](7447053d6325d64ceb530dad069b573a.png)
29
+ これを回避するためには、
30
+ a)二次元配列データに壁のルールを設ける(壁には最低「配列の1要素」の厚みが必要)
31
+ b)配列の隣り合う要素間の境界を考慮する
32
+ のいずれかが必要ですね。圧倒的に(1)の方法が簡単ですが
33
+
34
+ あと、ゲームという事ですし「360度自由に」との事ですので、「探索」をするのはユーザー(人間)を想定していました。(勘違いでなければ良いのですが)