質問編集履歴

3

追記

2019/01/23 16:39

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -243,3 +243,49 @@
243
243
  違いました。毎回ではなかったです。たまに1回目と2回目の出力の座標が同じになる場合がありました。
244
244
 
245
245
  しかし、たまにでも1回目と2回目が同じ座標になってしまうのは疑問です。
246
+
247
+
248
+
249
+ 新たな疑問。
250
+
251
+ ```C#
252
+
253
+ int[] MakeDungeonMap(int[] _startPos)
254
+
255
+ {
256
+
257
+ //スタート位置配列を複製
258
+
259
+ int[] tmpStartPos = new int[2];
260
+
261
+ _startPos.CopyTo(tmpStartPos, 0);
262
+
263
+ //移動可能な座標のリストを取得
264
+
265
+ Dictionary<int, int[]> movePos = GetPosition(tmpStartPos);
266
+
267
+
268
+
269
+ //移動可能な座標がなくなるまで探索を繰り返す
270
+
271
+ while (movePos != null)
272
+
273
+ {
274
+
275
+ //移動可能な座標からランダムで1つ取得し通路にする
276
+
277
+ int[] tmpPos = movePos[Random.Range(0, movePos.Count)];
278
+
279
+ walls[tmpPos[1], tmpPos[0]] = 1;
280
+
281
+ ```
282
+
283
+ このように、[y, x]で表現したくて、
284
+
285
+ walls[tmpPos[0], tmpPos[1]] = 1 を
286
+
287
+ walls[tmpPos[1], tmpPos[0]] = 1 に書き換えたら、
288
+
289
+ ゲームを実行すると停止状態(もしかして無限ループにはまってる状態?)になってしまいます。
290
+
291
+ なぜでしょうか?

2

修正途中

2019/01/23 16:39

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -232,8 +232,14 @@
232
232
 
233
233
  問題ありますか?
234
234
 
235
+
236
+
235
- そして、このログをとって新たな疑問点が生まれてしまいました。
237
+ ~~そして、このログをとって新たな疑問点が生まれてしまいました。
236
238
 
237
239
  1回目と2回目の出力がいつも同じ座標になるみたいです。3回目以降はバラつきます。
238
240
 
239
- なぜでしょうか?
241
+ なぜでしょうか?~~
242
+
243
+ 違いました。毎回ではなかったです。たまに1回目と2回目の出力の座標が同じになる場合がありました。
244
+
245
+ しかし、たまにでも1回目と2回目が同じ座標になってしまうのは疑問です。

1

修正途中

2019/01/23 16:25

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -147,3 +147,93 @@
147
147
  しかし、稀にスタート地点とゴール地点が繋がらないケース(スタートとゴールの間が壁で塞がっているケース)が発生します。
148
148
 
149
149
  もしかしたら、この中のどれかの書き換えが不具合を起こす可能性がありますか?
150
+
151
+
152
+
153
+ ### 追記
154
+
155
+
156
+
157
+ 質問5に関して、ログをとって確かめてみました。
158
+
159
+ ```C#
160
+
161
+ int[] MakeDungeonMap(int[] _startPos)
162
+
163
+ {
164
+
165
+ //スタート位置配列を複製
166
+
167
+ int[] tmpStartPos = new int[2];
168
+
169
+ _startPos.CopyTo(tmpStartPos, 0);
170
+
171
+ //移動可能な座標のリストを取得
172
+
173
+ Dictionary<int, int[]> movePos = GetPosition(tmpStartPos);
174
+
175
+
176
+
177
+ //移動可能な座標がなくなるまで探索を繰り返す
178
+
179
+ while (movePos != null)
180
+
181
+ {
182
+
183
+ //移動可能な座標からランダムで1つ取得し通路にする
184
+
185
+ int[] tmpPos = movePos[Random.Range(0, movePos.Count)];
186
+
187
+ walls[tmpPos[0], tmpPos[1]] = 1;
188
+
189
+
190
+
191
+ //元の地点と通路にした座標の間を通路にする
192
+
193
+ int xPos = tmpPos[0] + (tmpStartPos[0] - tmpPos[0]) / 2;
194
+
195
+ int yPos = tmpPos[1] + (tmpStartPos[1] - tmpPos[1]) / 2;
196
+
197
+ int xPos2 = tmpStartPos[0] + (tmpPos[0] - tmpStartPos[0]) / 2;
198
+
199
+ int yPos2 = tmpStartPos[1] + (tmpPos[1] - tmpStartPos[1]) / 2;
200
+
201
+
202
+
203
+ Debug.Log(xPos+","+yPos);
204
+
205
+ Debug.Log(xPos2+","+yPos2);
206
+
207
+ walls[xPos, yPos] = 1;
208
+
209
+ Debug.Log("---");
210
+
211
+
212
+
213
+ //移動後の座標を一時変数に格納し、再度移動可能な座標を探索する
214
+
215
+ tmpStartPos = tmpPos;
216
+
217
+ movePos = GetPosition(tmpStartPos);
218
+
219
+ }
220
+
221
+ //探索終了時の座標を返す
222
+
223
+ return tmpStartPos;
224
+
225
+ }
226
+
227
+ ```
228
+
229
+ すると、毎回、xPosとyPosの出力がxPos2とyPos2の出力と同じでした。
230
+
231
+ tmpPos[0]とtmpStartPos[0]の間の通路が正しく取得できているように思えるのですが、
232
+
233
+ 問題ありますか?
234
+
235
+ そして、このログをとって新たな疑問点が生まれてしまいました。
236
+
237
+ 1回目と2回目の出力がいつも同じ座標になるみたいです。3回目以降はバラつきます。
238
+
239
+ なぜでしょうか?