Seite 1 von 1

Ascii-Zeichen Grafikenginen für MMORPG in der Konsole

Verfasst: Mittwoch 9. Januar 2008, 21:24
von phxx
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

Verfasst: Mittwoch 9. Januar 2008, 22:09
von BlackJack
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.

Verfasst: Mittwoch 9. Januar 2008, 22:21
von phxx
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.

Verfasst: Mittwoch 9. Januar 2008, 22:25
von mitsuhiko
phxx hat geschrieben:Unter Windows lässt sich die Konsole z.B. nicht in der Breite verändern.
Meine schon.

Verfasst: Mittwoch 9. Januar 2008, 22:40
von phxx
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.

Verfasst: Mittwoch 9. Januar 2008, 22:46
von mitsuhiko
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.

Verfasst: Mittwoch 9. Januar 2008, 22:52
von phxx
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.

Verfasst: Donnerstag 10. Januar 2008, 00:22
von veers
Auf der Konsole fände ich so etwas toll :) Multiplayer Nethack!

Verfasst: Donnerstag 10. Januar 2008, 14:07
von Imperator
ich finde die Idee voll lustig. Ein Spiel komplett aus Ziffern.

Verfasst: Donnerstag 10. Januar 2008, 14:24
von phxx
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.

Verfasst: Donnerstag 10. Januar 2008, 14:31
von Erwin
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.

Verfasst: Donnerstag 10. Januar 2008, 15:44
von veers
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. ;)

Verfasst: Donnerstag 10. Januar 2008, 22:23
von sma
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

Verfasst: Donnerstag 10. Januar 2008, 22:34
von phxx
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.

libcaca Bindings

Verfasst: Montag 14. Januar 2008, 21:11
von phxx
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]