コミュニティアイコン プチコン 非公式コミュニティ プレイ日記

アバター
reji ◆NbkrH.ADqKjI
2018/8/15 19:10
川による速さの変化も考慮した敵からお城までの最短ルートを導きたいけどうまくいかない><

コメント

アバター
ばかばかPC 2018/8/15 19:33 ◆tN9oa6NkiQt.
新ギミックだ!!
アバター
こういち 2018/8/17 8:21 ◆ou0jbJnEJ0Kb
少々重いですが、全探索のうち、幅優先探索と呼ばれるものを使えば求められます。
全探索で普通にやろうとするとゲームが成立しないぐらい遅くなりそうですが、「敵から城まで」じゃなくて「城から敵まで」の最短経路を求めるのなら何とか実用的な速さになる…のかな?
アバター
ばかばかPC 2018/8/17 12:48 ◆tN9oa6NkiQt.
難しい事ですね。
アバター
reji 2018/8/17 21:03 ◆NbkrH.ADqKjI
コメントありがとうございます!
とりあえずググって勉強してみることにします
難しそうなので、時間があるときに取り組んでみたいです
アバター
こういち 2018/8/17 22:05 ◆ou0jbJnEJ0Kb
幅優先探索の基本的な手順(昔Villitさんに回答したやつの使いまわし)
@まず、スタート地点からの最短距離を保存する二次元配列を用意し、なるべく大きな数で初期化します。
Aスタート地点から近い点から順に距離を記録していきます。
B行けるマス全てに最短距離を記録し終わったら
B行けるマス全てに最短距離を記録し終わるまでAを繰り返す
C最短距離を記録した二次元配列のゴール地点から距離が1づつ減るようにたどれば最短ルート。値が@で初期化した数値のままだったら解なし。
みたいな感じです。
近い点から距離を記録するにはキューと呼ばれるものに記録した場所の座標を一時保存するのが一般的です
キューというのは配列にPUSHとPOP()を使ったもので、後ろに情報を追加していき、取り出すときは前から情報を取り出すようなデータ構造のことを言います
要するに近い順に入れて近い順に取り出す
アバター
BAKABAKAPc 2018/8/18 22:31 ◆aiq7FVpBJd8A
凄いな...
アバター
BAKABAKAPc 2018/8/18 22:38 ◆aiq7FVpBJd8A
ここでちょっと小技
三回、剣をふると自分を囲む回転斬りを発動し、範囲は4×4と広く壁を貫通して攻撃するので、場合によっては敵をはめ殺しできます。
3s4×4という名でも付けますか
アバター
reji 2018/8/19 11:18 ◆NbkrH.ADqKjI
こういちさん>丁寧に解説ありがとうございます!
しかし、申し訳ないのですが、実は公開してるプログラムに既に幅優先探索を実装してました(幅優先探索という名前が知らなかった)m(_ _)m
ただ、マスを1ずつ減らすのではなく、川の場所だけ4減らすみたいな感じにしたいのですが、それがうまくいきません('・ω・')

BAKABAKAPc さん>細かく研究してくれてありがとうございます!嬉しいです
アバター
ばかばかPC 2018/8/19 12:23 ◆tN9oa6NkiQt.
こちらこそありがとう
アバター
こういち 2018/12/14 12:15 ◆ou0jbJnEJ0Kb
最短経路を求める方法その2
ベルマンフォード法
もしくは移動のコストが負にならないならダイクストラ法もあり。
(ダイクストラ法はヒープと呼ばれるデータ構造が必要です。ヒープは一次元配列で実現できますが。)
アバター
reji 2018/12/14 21:22 ◆NbkrH.ADqKjI
こういちさんありがとうございます!
かなり昔の投稿に手間を惜しまず教えて下さり、恐縮です。
逐次学んでいきたいと思います

コメントを書く

この投稿にはコメントできません。

- WEB PATIO -