Wozu ist die Information ueberhaupt wichtig? EDIT: OK, mir fiele Snake ein

Kannst du mir das etwas naeher erlaeutern? Ich verstehe deine Aussage nicht so ganz. Die Informationen sollen schon in der Karte ersichtlich sein.Rebecca hat geschrieben:Das geht aber nur, wenn man auf jedes Feld nicht mehr als einmal kommen darf. Ich wuerde die Informationen eher von der Karte trennen, jeder Spieler koennte eine Liste der besuchten Koordinaten haben, evtl. mit Beschraenkung der Laenge, wie weit man zurueckblicken kann.
Nein, es geht um ein MUD - http://de.wikipedia.org/wiki/Multi_User_Dungeon. Man kann sich zwischen den einzelnen Feldern bewegen. Auf jedem Feld gibt es bestimmte Ausgaenge, und nur in diese Richtungen kann man laufen. Die Karte soll speziell fuer ein Labyrinth sein, indem es wichtig ist, dass man genau weiß, welche Felder miteinander verbunden sind.Rebecca hat geschrieben:Wozu ist die Information ueberhaupt wichtig? EDIT: OK, mir fiele Snake ein
ich weiß, aber es war ja nur ein beispielEyDu hat geschrieben:Du solltest als Kartenname besser nicht "map" benutze, damit verdeckst du einen built-in-Namen.
Achso, ich dachte es geht erstmal um das interne Speichern der Daten, was ja mit der Darstellung erstmal nich so viel zu tun hat.Die Informationen sollen schon in der Karte ersichtlich sein.
Das war auch mein erster Gedanke, aber dann hat man noch weniger Informationen als durch "N, S, O, W", weil die Richtungsinformation zweideutig ist. Man könnte aus optischen Gründen stattdessen natürlich auch so etwas wie "∧ ∨ < >" verwenden.Rebecca hat geschrieben:du koenntest versuchen, mit senkrechten, waagerechten und schraegen Strichen Strichen versuchen, die Spur "zu malen", fuer ne Ueberkreuzung dann ein Plus oder so.... K.A. wie gut das funktioniert...
Alle Felder koennen auch mehrmals betreten werden.numerix hat geschrieben:Das war auch mein erster Gedanke, aber dann hat man noch weniger Informationen als durch "N, S, O, W", weil die Richtungsinformation zweideutig ist. Man könnte aus optischen Gründen stattdessen natürlich auch so etwas wie "∧ ∨ < >" verwenden.Rebecca hat geschrieben:du koenntest versuchen, mit senkrechten, waagerechten und schraegen Strichen Strichen versuchen, die Spur "zu malen", fuer ne Ueberkreuzung dann ein Plus oder so.... K.A. wie gut das funktioniert...
Wenn entweder jedes Feld nur einmal betreten werden darf - und dann nicht wieder - funktioniert das mit den Himmelsrichtungen. Falls auch mehrmaliges Betreten erlaubt ist, funktioniert es auch dann, wenn nur die Richtung benötigt wird, aus der *zuletzt* dieses Feld betreten wurde.
Code: Alles auswählen
#-#
| |
# #
| |\
# #-#
|/ X|
# # #
Dann hast du aber keine Information darüber, in welche Richtung eine Verbindung hergestellt wurde (aber vielleicht brauchst du die Information ja auch nicht - das ist bisher nicht deutlich geworden).roschi hat geschrieben:Ich dachte gerade an sowas:
Jedes Feld ist von einem Kreis leeren Feldern umgeben, in die dann die Verbindungen gemalt werden... zum Beispiel so:
Genau, aber wie koennte man sowas im Code implementieren? Das grobe System ist mir ja klar, aber eine effiziente Implementierung fehltEyDu hat geschrieben:Indem du zwischen je zwei Spalten und je zwei Zeilen noch jeweils eine Spalte, bzw. Zeile, einfügst.roschi hat geschrieben:Wie koennte man das implementieren?
frabron hat geschrieben:Slightly Offtopic:
Irgendwie fällt mir dazu spontan Nethack ein. Damals auf meinem 8086, das waren noch Zeiten
Nein, diese Information brauche ich nicht. Ich muss nur wissen, welche Felder miteinander verbunden sind. Entschuldigt bitte meine unpraezise Ausdrucksweise.numerix hat geschrieben:Dann hast du aber keine Information darüber, in welche Richtung eine Verbindung hergestellt wurde (aber vielleicht brauchst du die Information ja auch nicht - das ist bisher nicht deutlich geworden).roschi hat geschrieben:Ich dachte gerade an sowas:
Jedes Feld ist von einem Kreis leeren Feldern umgeben, in die dann die Verbindungen gemalt werden... zum Beispiel so:
Nethack? Das ist doch viel zu modern :) Die Vorläufer Hack oder Rogue wecken andere Erinnerungen. Wer's mal sehen möchte, kein Windows hat und sich nicht von furchtbarem Python-Code, der 1:1 von dem C-Original stammt abschecken lässt: http://github.com/sma/pyrogue/. NetHack habe ich aber auch mit Begeisterung gespielt...frabron hat geschrieben:Slightly Offtopic:
Irgendwie fällt mir dazu spontan Nethack ein. Damals auf meinem 8086, das waren noch Zeiten :D
Ich kenne MUDs nur mit Räumen und Verbindungen. Daher würde ich das Datenmodell so bauen: http://gist.github.com/138713 (ist ein bisschen länger geworden als gedacht...)roschi hat geschrieben:Nein, es geht um ein MUD - http://de.wikipedia.org/wiki/Multi_User_Dungeon.
Hallo!sma hat geschrieben:Ich kenne MUDs nur mit Räumen und Verbindungen. Daher würde ich das Datenmodell so bauen: http://gist.github.com/138713 (ist ein bisschen länger geworden als gedacht...)roschi hat geschrieben:Nein, es geht um ein MUD - http://de.wikipedia.org/wiki/Multi_User_Dungeon.
Stefan
Mir geht es ja nicht darum, als Programmierer eines MUD's dem Spieler eine dynamische Karte zu liefern, mithilfe der er sich orientieren kann, sondern darum, als Spieler in einem Dungeon rumzulaufen und mitzuschneiden, wo ich langgelaufen bin, damit ich mich mich dann spaeter im selben Dungeon besser zurechtfinde.sma hat geschrieben:Vorweg, ich würde nie zu Klasseninstanzen raten, höchsten zu Exemplaren. Zudem wären Klasseninstanzen nach meinem Verständnis Exemplare von Metaklassen, doch genug der Haarspalterei. Abhängig davon, ob sich dein MUD eher wie ein Textadventure mit einzelnen Orten anfühlen soll oder eher wie das ja auch schon erwähnte Hack (oder meinetwegen Diablo oder WoW), würde ich einzelne Räume als Exemplare einer Room- (oder Location)-Klasse modellieren oder doch eine Karte einführen. Ich kenne ein MUD so, dass man als Spieler auch die Welt mitgestalten kann, und z.B. eigene Räume "graben" kann und mit selbst erschaffenen Gegenstände "bevölkern" kann.
In meinem Fall sind die Raeume klar strukturiert. Sie lassen sich gut aufzeichnen, wenn man die einzelnen Verbindungen einzeichnen kann.sma hat geschrieben:Einzelne Räume erlauben eine beliebige Topologie, auch eine, die man niemals kreuzungsfrei in 2D oder 3D aufzeichnen kann. Das kann ein Vorteil oder aber ein Nachteil sein.
Code: Alles auswählen
connections = {(0,0):("n","w","so"), (0,1):("s"), (-1,0):("o"), (1,-1):("nw")}
Code: Alles auswählen
#
|
#-#
\
#
Code: Alles auswählen
import operator
direction_map = {
"n": ((0,1), "|"), "e": ((1,0), "-"),
"s": ((0,-1), "|"), "w":((-1,0), "-"),
"ne": ((1,1), "/"), "se":((1,-1), "\\"),
"sw": ((-1,-1), "/"), "nw": ((-1,1), "\\")
}
connections = {(0,0):("n","w","se"), (0,1):("s",), (-1,0):("e",), (1,-1):("nw",)}
the_map = {}
for (x,y), dirs in connections.iteritems():
x, y = 2*x, 2*y
the_map[x,y] = "#"
for dir in dirs:
(xo, yo), c = direction_map[dir]
the_map[x+xo, y+yo] = c
xs = map(operator.itemgetter(0), the_map)
ys = map(operator.itemgetter(1), the_map)
xstart, xend = min(xs), max(xs)
ystart, yend = min(ys), max(ys)
for y in range(yend, ystart-1, -1):
for x in range(xstart, xend+1):
try:
print the_map[x,y],
except KeyError:
print " ",
print