現在PacManクローンを作成するためのC++プロジェクトに取り組んでいます。基本的には、ゲームが行うことのほとんどすべてを行っています。しかし、私はまだ幽霊がパックマンを追いかけるために幅広い最初の検索をどのように実装するかを考えていない。ここ数日、私はBFSについて多くのことを読んだ。私はそれが何であり、何をしているかを知っています。私はまた、この目的のためにキューを使用しなければならないことも知っています。しかし、私は自分のゲームでこのアルゴリズムを実際に実装することはできません。私は36 * 28タイルの2次元グリッドを持っています。しかし、私は実際にそれを私のxy座標系でどのように実装するのか、キューに何を押し込むべきか、そして隣接するタイルを操作する方法については確信しています。私はこの時点で立ち往生しています。私は実際のコードを求めていません。 BFSの実際の実装と、この第2dゲームグリッドのBFSで作業する際に留意すべき事項について、明確かつ簡単な説明が必要です。 あなたの説明は本当に役に立ちます。ありがとう。PacManでの幅広い最初の検索の実装
0
A
答えて
1
幽霊が移動を行うたびにBFSを実行するとします。あなたがすることができることは、彼がすべての幽霊を見つけ出すまでPacManからBFSを始めることです。幽霊が取る完全なルートは実際には必要ではないことに注意してください。次の移動だけが必要です。 BFSを実行している間、PacManからそのセルまでの距離を各セルごとに保存することができます。あなたがBFSを終えると、すべての幽霊は隣の細胞を見て、最も低い数の細胞を選ぶことができます。すべてのセルを大きな数で初期化する必要があることに注意してください。
あなたのBFSを行うには、(x、y)座標を1つの数字にマッピングするなど、いくつかのトリックがあります。この番号をキューに入れることができます。あなたの待ち行列に何かを入れる前に壁をチェックするべきであることに注意してください。キューから何かを引っ張ると、長さ4のfor-loop(隣接するセルの数)が実行されます。
int dx[] = {0, 1, 0, -1};
int dy[] = {1, 0, -1, 0};
void do_bfs() {
std::queue<int> queue;
// initialize grid
// add starting position of pacman to queue
while(!queue.empty()) {
// remove and access first element
cur_place = queue.front(); queue.pop();
map_to_coordinate(cur_x, cur_y, cur_place);
cur_distance = grid[cur_x][cur_y];
for (int i = 0; i < 4; i++) {
if (cur_x + dx[i] >= 0 && /* more checks */) {
queue.push_back(map_to_number(cur_x + dx[i], cur_y + dy[i]));
grid[cur_x + dx[i]][cur_y + dy[i]] = cur_distance + 1;
}
}
}
// now grid is filled, so now you should find out for each ghost how to move
}
読者のための練習として、私はポイントを作っている間に多くを開いたままにしました。
+0
最後に、それはいくつかの想像の後に動作:)あなたの疑似コードと説明は確かに助けた。ありがとうございました。 –
関連する問題
- 1. 幅広い最初の検索バイナリ検索ツリーjavascriptの実装
- 2. Pythonの幅広い検索実装
- 3. 重み付け有向グラフの幅広い最初の検索
- 4. C#コントロールコレクションの幅広い最初の検索
- 5. マルチ2D配列幅広い最初の検索Java
- 6. 幅優先検索実装
- 7. 最初のセルの幅が広い表
- 8. 幅の最初の検索java.lang.NullPointerException
- 9. 幅広い最初の探索を行うWebクローラー
- 10. Javaグラフ幅広い最初に
- 11. 与えられた深さまでの幅広い最初のグラフのトラバースを実装する
- 12. 広さと深さ最初のトラバースの実装
- 13. スキームで深さの最初の検索を実装する際の問題
- 14. 検索の実装
- 15. 深度最初の検索と幅優先探しの理解
- 16. FooTableプラグインでのフィルター検索の幅を広げよう
- 17. 広範囲の最初の検索で迷路を解決する
- 18. のNeo4j CYPHER深い最初の検索
- 19. LISP - 最初の検索
- 20. CUDAバイナリ検索の実装
- 21. フィルター検索パイプの実装
- 22. カスタム検索の実装
- 23. 検索ページの実装
- 24. Jquery検索ボックスの実装
- 25. A *検索アルゴリズムの実装
- 26. バイナリ検索ツリーインサートの実装
- 27. Androidのフラグメントでの検索の実装
- 28. Scalaで幅広いファーストサーチを実装する方法
- 29. バブルソートでの最初のパスの実装
- 30. 広幅の最初の組み合わせ
"ゲームでこのアルゴリズムを実際に実装することができません。" - あなたがすでに行っていることを見て間違っていることを知ることは不可能です*。率直に言えば、私はBFSが*保証されているとは確信していません。バックトラッキングアルゴリズムはより価値があるかもしれません。 – WhozCraig