Frage

Zunächst einige Hintergrundgeschichten:

Ich mache etwas, was einem „schurkenhaft„Spiel, damit ich einige interessante Ideen, die mir im Kopf herumschwirren, in die Tat umsetzen kann.Das Gameplay wird kein Dungeon-Crawl sein, aber auf jeden Fall wird die Darstellung auf ähnliche Weise erfolgen, mit einfachen ASCII-Zeichen.

Da dies eine Selbstübung ist, Ich bemühe mich, das meiste davon selbst zu programmieren.

Irgendwann möchte ich, dass das Spiel auf beliebig großen Spielwelten lauffähig ist.(Bis zu dem Punkt, an dem ich mir vorstelle, das Spiel zu vernetzen und über viele Monitore in einem Computerraum zu verteilen).

Im Moment habe ich Code, der beliebige Abschnitte einer Textkonsole lesen und schreiben kann, und ein einfaches Partitionierungssystem eingerichtet, damit ich Pfade effizient finden kann.


Und jetzt die Frage:

Ich habe einige Benchmarks durchgeführt und der größte Engpass ist die Neuzeichnung der Textkonsolen.

Für eine so große Spielwelt ist ein intelligentes Update der Anzeige erforderlich.Ich möchte nicht bei jedem Frame meinen gesamten Spielpuffer neu pushen müssen ... Ich brauche ein paar Hinweise, wie man es so einrichtet, dass nur die gezeichneten Teile des Spiels aktualisiert wurden. (und nicht nur einzelne Charaktere, wie ich sie jetzt habe)

Ich habe die Windows-Konsole über windows.h manipuliert, wäre aber auch daran interessiert, sie auf Linux-Rechnern über einen mit dem Server verbundenen PuTTY-Client zum Laufen zu bringen.

Ich habe versucht, einige Videoverarbeitungsroutinen anzupassen, da das Verhältnis zwischen Pixel und Zeichen fast 1:1 beträgt, aber ich hatte kein Glück.

Ich möchte wirklich eine einfache Erklärung einiger der dahinter stehenden Prinzipien.Aber ein Beispiel-(Psudo-)Code wäre auch schön.

War es hilfreich?

Lösung

Ich werde behaupten, dies nicht zu verstehen, aber ich glaube, das hinter James Gosling legendärem auf die Frage nahe: String-to -string Korrektur Problem .

Andere Tipps

Verwenden Flüche, oder wenn Sie es selbst zu tun, lesen Sie über die VTnnn Steuercodes. Beide sollten auf Windows arbeiten und auf * nichts Bedingungen und Konsolen (und Windows). Sie können auch die nethack Quellcode für Hinweise konsultieren. So können Sie Zeichen auf dem Bildschirm ändern, wo Änderungen geschehen.

Eine Spielwelt, die groß ist, erfordert ein intelligentes Update des Displays.Ich möchte nicht meinen gesamten Spielpuffer jedes Frame wieder aufspülen müssen ...Ich brauche einige Hinweise, wie man es eingerichtet hat, damit es nur Abschnitte des Spiels zeichnet.(Und nicht nur einzelne Charaktere, wie ich es jetzt habe)

Die Größe der Spielwelt ist nicht wirklich relevant, da Sie lediglich den sichtbaren Bereich für jeden Client ermitteln und diese Daten senden müssen.Wenn Sie über ein typisches 80x25-Konsolendisplay verfügen, senden Sie jedes Mal nur 2 oder 3 Kilobyte an Daten, selbst wenn Sie Farbcodes und Ähnliches hinzufügen.Das ist typisch für die meisten Online-Spiele dieser Art:Aktualisieren Sie, was die Person sehen kann, nicht alles auf der Welt.

Wenn Sie experimentieren und versuchen möchten, die Anzahl der gesendeten Daten zu reduzieren, können Sie dies gerne zu Lernzwecken tun, aber wir haben den Punkt, an dem es in naher Zukunft ineffizient ist, eine Konsolenanzeige zu aktualisieren, schon seit etwa 10 Jahren überschritten Echtzeit und es wäre eine Schande, Zeit mit der Lösung eines Problems zu verschwenden, das nicht behoben werden muss.Beachten Sie, dass das oben verlinkte PDF eine O(ND)-Lösung liefert, während das einfache Senden der gesamten Konsole die Hälfte von O(N) ist, wobei N als Summe der Längen von A und B und D definiert ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top