開始ノードから終了ノードまでのパスを提供するアルゴリズムが必要ですが、パスには正確な数のノードが必要です。そうでない場合、パスファインディングは失敗します。
拡張するために、タイルのグリッドがあります。移動は、すぐ隣の上下左右のタイルにのみ行うことができます (つまり、斜めの移動はできません)。パスで使用できるタイルと使用できないタイルには多くのルールがありますが、ほとんどの場合、単純なブール値に要約して、タイルを使用できるかどうかを判断できます (これは、アルゴリズムを開始する前に計算することもできます)。 . しかし、私に問題を引き起こしているのは、パスに必要な距離が指定されているという事実です。つまり、1 つのタイルから隣接するタイルへのすべての移動は 1 の距離であり、パス全体には指定された距離、それ以上でもそれ以下でもありませんまた、一度タイルが踏まれると (ただし、アルゴリズムの開始時にすべてのタイルが利用可能です)、再び踏むことはできません。自分で食べないように気をつけなければなりません。
私は Dijkstra/A* を見て、パスファインディングのアルゴリズムをグーグルで検索しましたが、私が知る限り、すべてが最短パスに焦点を合わせているため、あまり役に立ちません。前述のルールに従っている限り、どのパスであってもかまいません。
私は何かを見逃しましたか、そのようなアルゴリズムはすでに存在していますか、またはこの結果を得るために Dijkstra/A* を変更する簡単な方法はありますか? 私は英語を母国語としないので、間違った用語を使用している可能性があります。このタイプのアルゴリズムのキーワードの提案を歓迎します。
これは、正確な距離である必要があり、同じタイルを 2 回使用することはできないと私が言っていることの例です。
距離が 7 でなければならないとしましょう。今度は、パスで使用できるタイルを O、使用できないタイルを X、開始点を S、ゴールを E でマークしましょう。
XXXXXXX XOOESOO XOOOOOO
距離制限がなければ、左に行って問題を解決できます。距離制限があっても「同じ牌を踏めない」という制限がなければ、一度下って、左、右、左、右、左、上でゴールできます。 . 両方の制限があるため、右、下、左、左、左、上、右に移動してゴールに到達する必要があります。しかし、このような状況では、有効なパスはありません。
XXXXXXX XOOESOO XXOOOXO
関連する場合に備えて、このボードゲームを C# で開発しています。
最大距離については、距離の範囲は次のとおりです。プレイヤーはサイコロを投げて、1 ~ 6 の数字を出します。プレイヤーが 6 を出したら、もう一度サイコロを投げ、別の 6 が出たら、6 が出なくなるまで何度も何度もサイコロを投げます。 8 まで上がりますが、通常は 0 ~ 3、または 4 です。
別の注意として、私は新しい注文を受け取ったばかりで、ゲームのルールが変更され、同じパスで同じ位置を2回踏むことができるようになりました。これにより、プロセスが大幅に簡素化されると思いますが、この質問はそのままにしておきますそのような状況で誰かを助けることができる素晴らしい答えがあると思います.