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
- 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
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.
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.
Schade, dass
sttyeinen Fork benötigt.rowhammer, die benötigtenioctl-Aufrufe ohne Fork auszuführen.Ich verstehe immer noch nicht, warum so langsame Shells verwendet werden.
Ich wusste nicht, dass sich so etwas in Bash machen lässt.
Ein 9 Jahre alter
awk-Raycaster wäre ebenfalls erwähnenswert.Schade, dass ich das Projekt nicht ausführen konnte.
bufferedgeschrieben und das Programm beendet sich sofort.Beeindruckend, dass der Code nur 300 Zeilen umfasst.
Diese Herausforderung ist wirklich beeindruckend.