2 Punkte von GN⁺ 2024-12-22 | 1 Kommentare | Auf WhatsApp teilen

Warum es so schwierig war

  • Bash-Leistungsproblem: Bash ist sehr langsam. Wenn man für jedes Pixel einen Befehl ausführt, kann keine angemessene Bildrate erreicht werden. Der Bildschirmstatus kann nicht im Speicher gehalten werden, und der Zugriff über Arrays oder Strings kostet viel Zeit.
  • Mathematische Einschränkungen: Bash unterstützt keine Fließkommazahlen und verfügt über keine Mathematik-Bibliothek. Alle Berechnungen werden mit Ganzzahlen durchgeführt und auf 100000 skaliert.
  • Terminal-Grafikproblem: Um Pixel darzustellen, wird ein Unicode-Halbbalken verwendet, um die vertikale Auflösung zu verdoppeln. Die Farben benachbarter Pixel müssen bekannt sein, und Bash kann keinen Zustand speichern.
  • Weitere Probleme:
    • Das vollständige Aktualisieren des gesamten Terminals auf einen Blick ist schwierig.
    • Die meisten Terminals sind nicht für Videospiele gedacht, daher ist die Echtzeitverarbeitung von Tastatureingaben schwierig.
    • Das Füllen des Terminals mit Farben erfordert viele Daten.
    • Bash gibt keine mehrzeiligen Strings auf einmal aus.
    • Standards wie ECMA48, VT100, VT200 und Xterm sind komplex und schwer zu verstehen.
    • Es gab Schwierigkeiten bei mathematischen Berechnungen.

FAQ

  • Q: Es treten Probleme auf, wenn die Fenstergröße geändert wird
    • A: Bitte eröffne ein Issue.
  • Q: CPU-Überhitzung oder Verlangsamung auf älteren Rechnern
    • A: Setze die Umgebungsvariable FPS auf unter 30.
  • Q: Funktioniert nicht unter Bash-Versionen unter 5
    • A: Ja.
  • Q: Ist dieser Code reines Bash?
    • A: Nein. Beim Start wird stty aufgerufen, um Echo zu deaktivieren, und beim Beenden wieder zu aktivieren.

1 Kommentare

 
GN⁺ 2024-12-22
Hacker News-Kommentar
  • Da dieses Spiel eigentlich kein echtes 3D ist, ist der Ansatz, pro Spalte nur einmal Raytracing auszuführen, um Pixel zu zeichnen, sehr clever.

    • So wird der Zeichen-String „Zeichne dieses Pixel und gehe eine Zeile nach unten“ so oft wiederholt, bis Himmel, Gras und echte Objekte gezeichnet sind.
    • Ich arbeite an einer Voxel-Rendering-Engine für eingeschränkte Umgebungen und denke, dass ich hier nützliche Ansätze für das Projekt finden kann.
  • Wenn du nach einem Raycaster in MS Batch suchst, könntest du den GitHub-Link ansehen.

  • Bash ist meiner Meinung nach zu langsam für Skripting oder interaktive Nutzung.

    • Manche beliebten Linux-Distributionen nutzen Bash nicht als Skripting-Shell.
  • Schade, dass stty einen Fork benötigt.

    • In einem nächsten Projekt finde ich vielleicht einen Weg mit Bash und rowhammer, die benötigten ioctl-Aufrufe ohne Fork auszuführen.
  • Ich verstehe immer noch nicht, warum so langsame Shells verwendet werden.

    • Die meisten Apps müssten doch nur auf stdout und stderr schreiben, also sollte man Text viel schneller auf den Bildschirm bringen können.
  • Ich wusste nicht, dass sich so etwas in Bash machen lässt.

    • Ich dachte, ich wäre in Bash ziemlich versiert, aber diese Umsetzung ist verblüffend.
    • Ich habe nicht viel mathematisches Verständnis, aber es ist allein schon beeindruckend anzusehen.
  • Ein 9 Jahre alter awk-Raycaster wäre ebenfalls erwähnenswert.

    • Das kann man über den GitHub-Link nachschlagen.
  • Schade, dass ich das Projekt nicht ausführen konnte.

    • Ich weiß nicht warum, aber die Ansicht wird in eine Datei namens buffered geschrieben und das Programm beendet sich sofort.
  • Beeindruckend, dass der Code nur 300 Zeilen umfasst.

    • Ich mag dieses Projekt.
  • Diese Herausforderung ist wirklich beeindruckend.

    • Es ist kaum zu glauben, dass das überhaupt möglich ist.