迷路を表現する
答えて
たとえば、として部屋の構造をdeclaesことができます。
struct tRoom {
enum {
NORTH,
EAST,
SOUTH,
WEST
};
int walls[4]; /* status: 0 -- The wall is open
1 -- The wall is close
*/
...
}
/* A room in the game looks like:
____ The wall is close and cannot walk through
|
|
v
+-----+
| |
|
| |
+- -+
^
|
|____ The wall is open and can walk through
*/
/* A maze looks like :
+-----+-----+-----+
| | | |
| * |
| | | |
+- -+-----+- -+
| | | |
| | | |
| | | |
+-----+-----+-----+
*/
としてあなたの迷路を宣言します。
struct tRoom[WIDTH][HEIGHT];
当初ロボットは(星を持っている)の出発部屋に置かれています。
プレーヤーは、キーを押すなどの操作でロボットの動きを制御できます。
ロボットはゴールルームに到達するとゲームが終了します。
確かに、いくつかのアルゴリズムでパスを見つけ、ロボットを目標に導くことができます。
ロボットの動きはどのようにこれに変換されますか? –
@ScottHunterそれはどういう意味ですか? – immibis
パスは一連の方向で構成されます。ロボットは指定された方向に歩くことができます。 –
私は、迷路の各ジャンクションをノードとして表現する構造体を定義します。各構造体は、別のノードへのポインタの形で頂点として分岐します。以下に沿って何かがそれを行うべき:
#define MAX_VERTEXES_PER_NODE 4
struct junction;
struct corridor {
int weight;
struct junction *other_end;
};
struct junction {
struct corridor junctions[MAX_VERTEXES_PER_NODE];
};
この表現にダイクストラ(またはその他のグラフ理論のアルゴリズム)を適用することは簡単です。
問題は、ロボットがどのジャンクションにいるのかを知る方法です。特に、ジャンクションにいつ再訪したかを検出する。 –
これはこの場合特別なものではありません。必要なメタデータを接合構造体に追加することができます(bool、red/black color enumなど)。問題はDijsktraの実装方法ではありませんでした。 –
この情報はどのようにしてロボットからあなたのデータ構造に送られますか? –
- 1. 迷路表示ヘルプ
- 2. 迷路解決アルゴリズム。複雑な迷路
- 3. 迷路を表すデータ構造
- 4. 迷路を構築する
- 5. Javaで迷路を作る?
- 6. ビジュアルプロローグ - 迷路問題
- 7. コードゴルフ:迷路を解く
- 8. Java:迷路のアイコン:何をする?
- 9. Pythonで迷路を解決する
- 10. Cazeの迷路解決アルゴリズム
- 11. が再帰的に迷路
- 12. 無効な迷路のオプション
- 13. 動的迷路変異
- 14. 迷路のスタックベースの探索
- 15. JavaScriptの迷路のソルバーアルゴリズム
- 16. 迷路で最短経路を見つける
- 17. マルチコアを使って迷路を解く?
- 18. Java - ユニークなソリューションで迷路を作成
- 19. Cの右手の迷路トラバーサル
- 20. 再帰バックトラッカー迷路生成アルゴリズムスタックループ
- 21. EC2での迷路の使用
- 22. テキストファイルを読み込んで迷路を作成する
- 23. 迷路を探検する(Python 2.7を使用)
- 24. VB.NET迷路の衝突を検出する方法
- 25. 迷路のパスのターニングポイントのみを出力する方法
- 26. Pythonで迷路のグラフを作成する
- 27. j2me迷路ゲームに衝突検出を追加する
- 28. 再帰的な迷路ソルバーを最適化する方法
- 29. ランダムなパックマンの迷路を作成するには
- 30. Java Regexが迷路の有効な文字を確認する
ここでは、隣接行列*または*リストは必要ありません。それは正方形のグリッドなので、隣接関係は座標によって暗示されます。正方形の2D配列を持ち、各Squareには壁のある辺が格納されています。 – immibis
回答の1つがあなたの質問に答えた場合は、その横のチェックボックスをクリックして回答を受け入れてください。 –