4

泥の地図を描いてみました。私はpythonとgraphvizを使用して次のようなものを取得しました:

http://img23.imageshack.us/img23/5222/arrasz.png

ご覧のとおり、いくつかの場所があり、N / S / W / E / Up/Downに行くと他の場所に行きます。

graphvizを使用して、このマップを描画して、北の位置を南に、東の位置を西の位置の右側に配置することは可能ですか?

私はそのように意味します:

some        --- E --->   some
location   <--- W ---    location 2
                            .
                           / \   |
                            |    |

                            N    S

                            |    |
                                \ /   
                                 `
                          some location 3

それとも、graphvizよりも自動的に描画するための優れたツールがありますか?

4

3 に答える 3

5

以前、 Graphvizのレイアウトを改善することについて質問がありましたが、ここではGraphvizはやり過ぎだと思います。

次のような標準のMUDレイアウトがある場合:

シンプルなMUDレイアウト

...次に、部屋の場所についてかなり強い制約があります。Graphvizはこれらの制約について認識していないため、次のような単純なアルゴリズムほどうまく機能しません。

  1. グリッド上の開始位置を選択します
  2. 深さ優先トラバーサルなどを使用して、各部屋をトラバースします。
  3. 新しい部屋ごとに1つのユニットをN、S、E、またはWに移動します

視覚化コードを記述したくない場合は、(おそらく)Graphvizの前処理ステップとして上記のアプローチを実行し、各部屋にランクを割り当てる方法として使用できます。次に(うまくいけば)Graphvizは正しい出力を生成します。

編集:たとえば、いくつかの擬似コード:

visit(initialRoom, 0, 0)

def visit(curRoom, curX, curY)
  if curRoom == null return

  print "in room " + curRoom + " at location " + curX + ", " + curY

  visit(curRoom.northNeighbor, curX,   curY-1)
  visit(curRoom.southNeighbor, curX,   curY+1)
  visit(curRoom.westNeighbor,  curX-1, curY)
  visit(curRoom.eastNeighbor,  curX+1, curY)
于 2011-10-12T13:30:28.150 に答える
1

サブグラフ ( dotguideの 23 ページを参照) とランク プロパティ ( dotguideの 17 ページを参照) は、グラフをよりよく整理するための方法であると思います。

以下は、Graphviz の代わりになる可能性があります。

于 2011-10-12T12:58:26.190 に答える
1

ノード ランクを使用して、各ノードの垂直レベルを強制できます。これにより、物事が南北に正しい順序であることが保証されます。ランキングを把握するには、MUD マップを前処理する必要があります。ノードのグループに「同じ」ランクのラベルを付けます。MUD マップを処理して、南北方向の同じレベルにある部屋ノードのグループを特定します。例:

R1    R2
|     |
R3 -- R4--R5  

このマップの場合、次のようになります。

digraph M {
    R1->R3;
    R2->R4;
    R3->R1;
    R3->R4;
    R4->R2;
    R4->R5;
    {rank=same;R1;R2}
    {rank=same;R3;R4;R5}
 }

水平方向の順序を強制する方法を見つけることができません。これは、East/West がまだ正しく整列していない可能性があることを意味します。他の部屋がコンテキストを提供するのに役立つため、ランク設定が完了すると、90% の確率で機能する可能性があります。

于 2011-10-12T12:32:43.867 に答える