Люди спрашивали об улучшении макета Graphviz раньше, но я думаю, что Graphviz здесь излишним.
Если у вас есть стандартный макет MUD, как это:
... тогда у вас есть довольно сильные ограничения о том, где находятся комнаты. Graphviz не знает об этих ограничениях, поэтому он не будет работать так же хорошо, как простой алгоритм вроде:
- Выберите начальную точку на сетке
- Пройдите через каждую комнату, используя, например, обход в глубину
- Переместить одну единицу в 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)