A*アルゴリズムを作ってみたかった んですけどなぜか最短を選びません 最短を選びたい場合スタートからの距離だけ見るようにもできるのでそれを使ってください スプライト"アルゴリズム"の方に定義が色々あるので使いたい人は全部コピーしてプロジェクトに入れてください 仕組みは合ってるはずなんですけどなぜか最短距離とは限らないので気を付けて Scratchでは処理能力が低いので1Fに2回探索を行います。これでも軽いわけではないので通常30FPSの1秒に60回探索ですが、マップが中程度または広範囲の場合基本的にそれより低いFPSになるため効率が低下します TurboWarpはJavaScriptにコンパイルするので処理が高速なので1Fに平均1000回程度の探索を行います。更にTurboWarpでは最大250FPSが出ます。もちろん常時これではないですが大半の場合60FPS程度なので理論上1秒に60000回の探索を行っていることになりますが、おそらくこれは過大評価です 高速版 https://turbowarp.org/1233161265 ブロック定義の「道作成アルゴリズム」にスタート位置とゴール位置を入れて実行すると移動Xと移動Yに結果が出ます
色まとめ 黒:壁 赤:スタート地点 青:ゴール地点 黄:探索中の地点 空:探索するかもしれない地点 紫:探索し終わった地点 水:壁を避けてスタートからゴールに行く経路 橙:探索したけど通る必要のなかった地点 しくみ: 1.実行された時にまず探索場所をスタート地点に移動 2.上下左右の地点に探索予定地を設置 3.探索予定地の中からゴールまでの直線距離(壁なし)を計算する関数で出てきた数とスタートから進んで距離を足して数値を出す 4.一番小さい探索予定地に探索場所を移動、ついでに移動し終わったら探索予定地から今の場所の候補を削除する 5.そこでもさらに上下左右の地点に探索予定地を設置を探索場所がゴールの地点になるまで繰り返す と言う感じです。探索予定地が全てなくなった場合(スタート地点から向かえる全ての地点を探索した場合)、メッセージにerror:通れる道がないと出力します 探索予定地を設置する条件はその場所に"壁","既に探索した場所",探索予定地"がない場合です このアルゴリズムをプロジェクトで使う場合クレジット表記はいりません