私のブロックを解除するようなゲームのためのまともなレベル生成アルゴリズムは何ですか?
私の最初の試みは、解決されたレベルから始めて、逆方向に作業することでした。ボードの右側の出口の横にある赤い横長の長方形から始めました。最初、ボードには他の部品がありません。そこで、希望のピース数(たとえば7)まで疑似ランダムにピースを追加しようとしました。水平部分のみまたは垂直部分のみに制限されたレベルはあまり面白くないので、追加しながら水平部分と垂直部分を交互に使用しました。最後に、ランダムに動かしてスクランブルをかけようとしました。いくつかの例を試した後、この方法はしばしば興味のないレベルを生成することが明らかになりました。また、最小移動数は不明です。
次の試みは、別の方法で問題にアプローチします。レベルはランダムに生成されます。次に、検索アルゴリズムは、パズルを解くための最小移動数を見つけます(可能な場合)。私はまだこれを実装していませんが、いくつかの興味深いレベルを作成すると思います。ボードは比較的小さいので(10x10の上限)、アプリにバンドルされているレベルを生成するために実行時間は許容できると思います。また、スコアリングに重要な最小移動カウントもわかっています。
最初のアプローチがそのまま機能するとは思えません。ただし、私が検討していないバリエーションは機能する可能性があります。2番目のアプローチでの私の唯一の予約は、潜在的なコードの複雑さです。メモテーブルとBoardStateオブジェクトを備えたBFSになると思います。2番目のアプローチに飛び込む前に、いくつかの代替案を聞きたいと思います。