Ascii-Zeichen Grafikenginen für MMORPG in der Konsole

Du hast eine Idee für ein Projekt?
Antworten
Benutzeravatar
phxx
User
Beiträge: 31
Registriert: Freitag 5. Mai 2006, 19:47

Mittwoch 9. Januar 2008, 21:24

Hallo zusammen,

Ich spinne gerade mit einem guten Informatikerfreund darüber was unser nächstes Projekt sein wird :-)

Dabei wollten wir eigentlich ein 3d Weltraum MMORPG in java schreiben, aber wir haben die java.util.3d.space.environment nicht gefunden ;-) schade. Egal, Spaß bei seite.

Wir planen ein MMORPG, also Server/Client basiert. Das besondere daran ist, dass die Grafik vollkommen aus ASCII oder UTF-8 Zeichen bestehen soll.

Das darf man sich im Stil von ADOM vorstellen:
Bild

Gibt es so ein Grafik, vllt schon für Python? Oder müssen wir uns selber um ein kleines Toolkit bemühen? NCurses wollen wir nicht verwenden, da es ja nur für Unix verfügbar ist.

Wir planen es außerdem nicht in einer Konsole laufen zu lassen sondern als Textausgabe in einem eigenen Fenster. TKinter oder wxWidgets, dass ist ja relativ egal. Welches Toolkit unterstütz denn Textausgabe mit variablem Hinter- und Vordergrund?

Habt ihr ideen dazu?

Danke schon mal für die bestimmt vielen Responses :-)

phxx
Zuletzt geändert von phxx am Donnerstag 10. Januar 2008, 01:37, insgesamt 1-mal geändert.
BlackJack

Mittwoch 9. Januar 2008, 22:09

Wenn Ihr sowieso ein GUI-Toolkit verwendet, warum dann ASCII/Text-"Grafik"? Insbesondere weil Text-UIs ja nicht für GUIs sondern für die Konsole sind.

Vielleicht gibt's eine Python-Anbindung an die `libcaca` oder `libaa`. Eventuell reicht schon `ctypes` um das selber zu machen.
Benutzeravatar
phxx
User
Beiträge: 31
Registriert: Freitag 5. Mai 2006, 19:47

Mittwoch 9. Januar 2008, 22:21

Wir wollen das in nem GUI fenster machen, damit die Größe etc nicht variabel ist, bzw von uns eingestellt werden kann. Unter Windows lässt sich die Konsole z.B. nicht in der Breite verändern.
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Mittwoch 9. Januar 2008, 22:25

phxx hat geschrieben:Unter Windows lässt sich die Konsole z.B. nicht in der Breite verändern.
Meine schon.
TUFKAB – the user formerly known as blackbird
Benutzeravatar
phxx
User
Beiträge: 31
Registriert: Freitag 5. Mai 2006, 19:47

Mittwoch 9. Januar 2008, 22:40

Ich hab leider grad kein Windows da ums zu testen. Aber soweit ich mich erinnern kann, kann man nur auf Vollbild schalten wobei nur die vertikale Ausdehnung sich ändert. Die horizontale bleibt wohl so wie sie ist. Man könnte evlt mit ein paar Windows System Calls rumtricksen, aber das ist keine schöne Lösung.
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Mittwoch 9. Januar 2008, 22:46

phxx hat geschrieben:Ich hab leider grad kein Windows da ums zu testen. Aber soweit ich mich erinnern kann, kann man nur auf Vollbild schalten wobei nur die vertikale Ausdehnung sich ändert. Die horizontale bleibt wohl so wie sie ist. Man könnte evlt mit ein paar Windows System Calls rumtricksen, aber das ist keine schöne Lösung.
Man kann auch einfach in die Eigenschaften des Fensters gehen und die Terminalgröße hochsetzen.
TUFKAB – the user formerly known as blackbird
Benutzeravatar
phxx
User
Beiträge: 31
Registriert: Freitag 5. Mai 2006, 19:47

Mittwoch 9. Januar 2008, 22:52

Ah, ok ... ich hatte mich dabei auf Drag&Drop am Fensterrand beschränkt und das ging nicht :-)

libcaca sieht echt gut aus!
Es gibt auch nen passenden Blogpost dazu, der das einbisschen präsentiert.

In welchen Toolkits gibts denn die Möglichkeit eine Konsole einzubinden? So dass wir zwar die "Engine" in einer Konsole am laufen haben, aber z.B. die Verbindungsoptionen über hübsche GUIs machen können, dass aber alles in einem Fenster bleibt. z.B. noch mit hübsch Statusbar und so weiter.
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Donnerstag 10. Januar 2008, 00:22

Auf der Konsole fände ich so etwas toll :) Multiplayer Nethack!
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
Imperator
User
Beiträge: 275
Registriert: Montag 20. August 2007, 14:43
Kontaktdaten:

Donnerstag 10. Januar 2008, 14:07

ich finde die Idee voll lustig. Ein Spiel komplett aus Ziffern.
Benutzeravatar
phxx
User
Beiträge: 31
Registriert: Freitag 5. Mai 2006, 19:47

Donnerstag 10. Januar 2008, 14:24

Imperator hat geschrieben:ich finde die Idee voll lustig. Ein Spiel komplett aus Ziffern.
Jap, das ist der Reiz daran.

Ich hab mir mal libcaca angesehen. Das sieht sehr gut für uns aus. Nur wären wir gerne unabhängig von der Konsole und/oder von bestimmten GUI-Toolkits.

Ich stell mir da so eine ASCII-Engine vor, die nur die verschiedenen Zeichen zurück gibt inklusive informationen zu Farbe usw ... die dann aber erst außerhalb von der Engine im Toolkit (Konsole) ausgewertet werden um den Text auszugeben oder die Farbe hinzuzufügen.
Erwin
User
Beiträge: 141
Registriert: Donnerstag 9. Juni 2005, 08:51

Donnerstag 10. Januar 2008, 14:31

Ich finde es vor allem so schön nostalgisch.

Damals war irgendwie alles einfacher und man konnte auch mehr die Phantasie spielen lassen.
Heutzutage wird einem doch, was Phantasie betrifft, viel zu viel abgenommen.

Was die Darstellung betrifft, auf ein einfaches Fenster wird man wohl kaum verzichten können?
Immerhin sollte in dem Fall ein einfaches über all verbreitetes ausreichen.
Und auch sollte es, so meine Vermutung, kaum irgendwo dann damit Probleme geben, da so ein Fenster ja nicht sehr viel Funktionen benötigt.
Ich mache nie einen Fehler Zweimal.
Schließlich ist die Auswahl ja groß genug.
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Donnerstag 10. Januar 2008, 15:44

phxx hat geschrieben:Ich stell mir da so eine ASCII-Engine vor, die nur die verschiedenen Zeichen zurück gibt inklusive informationen zu Farbe usw ... die dann aber erst außerhalb von der Engine im Toolkit (Konsole) ausgewertet werden um den Text auszugeben oder die Farbe hinzuzufügen.
Das ist ja bei Konsolen Anwendungen so. Du schreibst nur in den entsprechenden Stream, die Konsole oder der Konsolen Emulator stellt es dann dar. ;)
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Donnerstag 10. Januar 2008, 22:23

ich finde, so ein Spiel muss einfach mit Curses gebaut werden. Nur dann ist es echt :) Vielleicht hilft unter Windows ja wcurses? Ich wusste noch gar nicht, dass das curses-Modul von Python nicht plattformübergreifend ist. Verflucht.

Ansonsten kann es auch nicht so schwer sein, Textzeichen - oder eigentlich ja beliebige Teilgrafiken einer größeren Grafik - in einem Canvas z.B. mit Wx oder Tk anzuzeigen. Bei Java habe ich das nicht nur einmal so implementiert. Die spezielle Pufferung von curses ist ja gerade dafür gemacht, dass man selbst auf richtig langsamen Terminals noch wahlfreien Zugriff auch alle Zeichenpositionen hat.

Und wer braucht schon Farbe? Hier ist mein Projekt vom letzten Wochenende:

Bild

(Meine Leistung besteht aber im Umschreiben des ältesten C-Codes für Rogue, den ich gefunden hatte - ich habe das nicht from scratch gebaut)

Stefan
Benutzeravatar
phxx
User
Beiträge: 31
Registriert: Freitag 5. Mai 2006, 19:47

Donnerstag 10. Januar 2008, 22:34

Sieht gut aus =)

Ich begeister mich immer mehr für libcaca. Schreib dafür gerade rudimentäre Pythonbindings. Das scheint ganz gut und einfach zu sein. Und macht Spaß =)

Muss nur noch ausprobieren ob man das evtl auf was anderes als ne Konsole ausgeben kann.
Benutzeravatar
phxx
User
Beiträge: 31
Registriert: Freitag 5. Mai 2006, 19:47

Montag 14. Januar 2008, 21:11

So, ich hab jetzt mal Bindings für libcaca mit Hilfe von ctypes erstellt. Allerdings hab ich gerade ein Problem:

ich lade die Library mit

Code: Alles auswählen

ctypes.cdll.LoadLibrary('libcaca.so.0')
allerdings findet er dann natürlich die aus dem Repository installierte version. Diese ist beta1. Ich würde aber viellieber gerne die Version aus /usr/local/lib/libcaca.so.0 laden (beta13) ohne den Code zu verändern (damit er auf anderen Systemen weiterverwendbar bleibt)

Wie könnte ich das denn bewerkstelligen?

In der ctypes Doku hab ich nix gefunden.

phxx[/code]
Antworten