1

私のブロックを解除するようなゲームのためのまともなレベル生成アルゴリズムは何ですか?

私の最初の試みは、解決されたレベルから始めて、逆方向に作業することでした。ボードの右側の出口の横にある赤い横長の長方形から始めました。最初、ボードには他の部品がありません。そこで、希望のピース数(たとえば7)まで疑似ランダムにピースを追加しようとしました。水平部分のみまたは垂直部分のみに制限されたレベルはあまり面白くないので、追加しながら水平部分と垂直部分を交互に使用しました。最後に、ランダムに動かしてスクランブルをかけようとしました。いくつかの例を試した後、この方法はしばしば興味のないレベルを生成することが明らかになりました。また、最小移動数は不明です。

次の試みは、別の方法で問題にアプローチします。レベルはランダムに生成されます。次に、検索アルゴリズムは、パズルを解くための最小移動数を見つけます(可能な場合)。私はまだこれを実装していませんが、いくつかの興味深いレベルを作成すると思います。ボードは比較的小さいので(10x10の上限)、アプリにバンドルされているレベルを生成するために実行時間は許容できると思います。また、スコアリングに重要な最小移動カウントもわかっています。

最初のアプローチがそのまま機能するとは思えません。ただし、私が検討していないバリエーションは機能する可能性があります。2番目のアプローチでの私の唯一の予約は、潜在的なコードの複雑さです。メモテーブルとBoardStateオブジェクトを備えたBFSになると思います。2番目のアプローチに飛び込む前に、いくつかの代替案を聞きたいと思います。

4

1 に答える 1

2

私はこれをしたいと思います:

  • 赤い長方形が出口の隣にあるゲームのランダムな状態を生成します
  • その状態から始まるボードの完全な状態空間を計算します
  • 実際の問題として、解決された状態から最も遠い状態空間内の状態の1つを選択します。私は距離測度として、別個のピース​​の動きの数を測定します。つまり、同じピースの複数の動きを1として数えます。
  • 生成された状態空間が小さすぎる場合は、断片を削除してやり直します
  • 生成された状態空間は大きいが、任意の状態から解までの距離が小さい場合は、ピースを追加してやり直します
于 2013-02-05T10:07:23.350 に答える