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.
Wozu ist die Information ueberhaupt wichtig? EDIT: OK, mir fiele Snake ein
2D-Liste
- Rebecca
- User
- Beiträge: 1662
- Registriert: Freitag 3. Februar 2006, 12:28
- Wohnort: DN, Heimat: HB
- Kontaktdaten:
Offizielles Python-Tutorial (Deutsche Version)
Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
- roschi
- User
- Beiträge: 225
- Registriert: Samstag 29. März 2008, 18:58
- Wohnort: Thueringen, Deutschland
- Kontaktdaten:
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 beispiel danke dir fuer den hinweis.EyDu hat geschrieben:Du solltest als Kartenname besser nicht "map" benutze, damit verdeckst du einen built-in-Namen.
lg
roschi
[size=117]Fuer Alle, die in Python einsteigen wollen, kann ich das Buch [url=http://abop-german.berlios.de/]A Byte of Python[/url] nur waermstens empfehlen![/size]
- Rebecca
- User
- Beiträge: 1662
- Registriert: Freitag 3. Februar 2006, 12:28
- Wohnort: DN, Heimat: HB
- Kontaktdaten:
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.
Tja, das Anzeigen wird es mit ASCII-Art natuerlich schon schwieriger, 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...
Offizielles Python-Tutorial (Deutsche Version)
Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
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.
- roschi
- User
- Beiträge: 225
- Registriert: Samstag 29. März 2008, 18:58
- Wohnort: Thueringen, Deutschland
- Kontaktdaten:
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.
Ich dachte gerade an sowas:
Jedes Feld ist von einem Kreis leeren Feldern umgeben, in die dann die Verbindungen gemalt werden... zum Beispiel so:
Code: Alles auswählen
#-#
| |
# #
| |\
# #-#
|/ X|
# # #
lg
roschi
[size=117]Fuer Alle, die in Python einsteigen wollen, kann ich das Buch [url=http://abop-german.berlios.de/]A Byte of Python[/url] nur waermstens empfehlen![/size]
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:
- roschi
- User
- Beiträge: 225
- Registriert: Samstag 29. März 2008, 18:58
- Wohnort: Thueringen, Deutschland
- Kontaktdaten:
Genau, aber wie koennte man sowas im Code implementieren? Das grobe System ist mir ja klar, aber eine effiziente Implementierung fehlt .EyDu 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?
Ja, es hat eine gewisse Aenlichkeit, aber das MUD, welches ich spiele, ist deutlich groeßer und umfangreicher als Nethack .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:
lg
roschi
[size=117]Fuer Alle, die in Python einsteigen wollen, kann ich das Buch [url=http://abop-german.berlios.de/]A Byte of Python[/url] nur waermstens empfehlen![/size]
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.
Stefan
- roschi
- User
- Beiträge: 225
- Registriert: Samstag 29. März 2008, 18:58
- Wohnort: Thueringen, Deutschland
- Kontaktdaten:
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
Das ist nicht schlecht gemacht lustige Sache - Danke dir!
Also meinst du, ich sollte fuer jeden Raum eine eigene Klasseninstanz erzeugen? Der Mapper soll verfolgen, welche Raeume ein Spieler in einem Labyrinth besucht, und dann diese Raeume mit samt ihren Verbindungen in eine Karte einzeichnen. Außerdem muessen einzelne Raeume auch wieder loeschbar sein, falls man mal in die falsche Richtung laeuft. Meine Klasse fuer die Karte arbeitet ja schon gut, nur weiß ich nicht, wie ich nun beim Schreiben der Karte in eine Datei die Verbindung in die umgebenden Felder einzeichne. Als Grundlage fuer die Verbindungsinformationen koennte ich ein Dictionary haben, indem die Koordinaten des Raumes als Key, und die Richtungen, in die man laufen kann, inform eines Tuples als Value eingetragen sind. Koennte mir jemand dazu einen Tipp geben? Das System mit den Koordinaten in den Dictionaries wuerde ich schon sehr gern behalten...
lg und vielen dank fuer eure Hilfe!
roschi
[size=117]Fuer Alle, die in Python einsteigen wollen, kann ich das Buch [url=http://abop-german.berlios.de/]A Byte of Python[/url] nur waermstens empfehlen![/size]
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.
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.
Willst du einfach pro Spieler eine Karte haben, in der diesem Spieler bekannte Dinge eingezeichnet werden und hast du sowieso schon eine 2D-Karte, dann nimm doch einfach pro Spieler eine weitere dieser Karten. Dann verstehe ich dein Problem nicht genau.
Stefan
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.
Willst du einfach pro Spieler eine Karte haben, in der diesem Spieler bekannte Dinge eingezeichnet werden und hast du sowieso schon eine 2D-Karte, dann nimm doch einfach pro Spieler eine weitere dieser Karten. Dann verstehe ich dein Problem nicht genau.
Stefan
- roschi
- User
- Beiträge: 225
- Registriert: Samstag 29. März 2008, 18:58
- Wohnort: Thueringen, Deutschland
- Kontaktdaten:
Hallo!
Erstmal bitte ich um Entschuldigung dafuer, dass ich jetzt so lange nicht geantwortet habe. Das lag daran, dass ich im Ausland war und keinen Internetzugang hatte. Es tut mir wirklich sehr leid.
Was mir nun im Grunde einfach noch fehlt, ist eine Erweiterung meiner Schreib-Funktion, die die Verbindungen mit einbezieht. Wenn ich z.B. solch ein Dictionary habe, in dem die Verbindungen gespeichert sind:Dann muss ich nun am Ende sowas hier erhalten:
Das ist das eigentliche Problem.
Vielen Dank fuer eure Muehe!
lg
roschi
Erstmal bitte ich um Entschuldigung dafuer, dass ich jetzt so lange nicht geantwortet habe. Das lag daran, dass ich im Ausland war und keinen Internetzugang hatte. Es tut mir wirklich sehr leid.
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.
Was mir nun im Grunde einfach noch fehlt, ist eine Erweiterung meiner Schreib-Funktion, die die Verbindungen mit einbezieht. Wenn ich z.B. solch ein Dictionary habe, in dem die Verbindungen gespeichert sind:
Code: Alles auswählen
connections = {(0,0):("n","w","so"), (0,1):("s"), (-1,0):("o"), (1,-1):("nw")}
Code: Alles auswählen
#
|
#-#
\
#
Vielen Dank fuer eure Muehe!
lg
roschi
[size=117]Fuer Alle, die in Python einsteigen wollen, kann ich das Buch [url=http://abop-german.berlios.de/]A Byte of Python[/url] nur waermstens empfehlen![/size]
Ich habe es mal schnell hingeschrieben, aber so in etwas sollte es funktionieren. Da kann man noch ein wenig optimieren und PEP 8 umsetzen, als Ansatz sollte es aber reichen.
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
Das Leben ist wie ein Tennisball.