0

私はC#でダンジョンクローラーの作業を開始し、すでにレベル生成をコーディングしました。

しかし、私は問題に遭遇しました。レベルマップは32x32の多次元配列に格納され、各タイルは文字列として格納されます。以下を除くすべてのタイル(これらの名前はすべて、そのタイルを表す変数名です)(mongroveplant、tree、hjalaplant、vnosplant、barraplant、weedplant、naroplant、deathweedplant、venustrap、strangulator、statue、empty、stonewall)はできません歩いた。

はるかに長いリストを構成するこれらのタイル(ウォークオーバー可能)は、ここにあります:ウォーカブルタイル。32x32多次元配列の各エントリでは、すべてのエントリが文字列です。

上記のすべてのタイルを回避するが、リンクにリストされているすべてのタイルを通過できるパスファインディングアルゴリズムを作成するにはどうすればよいですか?「開始」タイルから「終了レベル」タイルに移動しようとしています。

4

1 に答える 1

0

最初に削除するのは、文字列の概念です。文字列の解析は、ビデオ ゲームに関しては高速ではありません。必要なのは、タイル (ビットフィールド) ごとにフラグを設定することです。最終的には、フラグを組み合わせることができるので、フラグを気に入るはずです。

[Flags]
public enum TileDescription
{ 
    Walkable,
    Trap,
    Altar,
    Door
}

それらは int に格納することもできます。スピードとスペース、2 つの驚くべき概念。

経路探索アルゴリズムに関しては、たくさんあります。しかし、基本的には、開始点と終了点があり、両方の間で最も速い方法を見つけなければなりません。アイデアは、最も近い「ノード」をチェックして、目標に近づいているかどうかを確認することです。毎回、新しいノードでチェックを繰り返します。閉じ込められた場合は、まだ使用可能なパスがあったノードに巻き戻します。

あなたはいくつかの素晴らしい基本的なアルゴリズムを持っています:

http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm

http://en.wikipedia.org/wiki/A*_search_algorithm

ただし、長距離経路探索は常に非常にコストがかかります。経路探索を原点周辺の特定の範囲に制限する必要があります。32x32 の迷路全体を解析すると、最短ルートを見つけるのに多くの時間がかかる可能性があります。ほとんどの場合、特定の範囲を超えた場合、NPC を最も近いポイントに移動し、到達したとき、または到達している間、経路探索を繰り返します。経路探索の秘訣は、多くのフレームにわたって実行し、一度にすべて処理しようとしないことです。

于 2012-10-16T16:56:24.830 に答える