Pourquoi c'était difficile
- Problème de performance de Bash : Bash est très lent, et exécuter une commande par pixel ne permet pas d'obtenir un taux de rafraîchissement d'image satisfaisant. Il est impossible de conserver l'état de l'écran en mémoire, et l'accès par tableaux ou chaînes prend beaucoup de temps.
- Limites mathématiques : Bash ne prend pas en charge les nombres à virgule flottante et ne possède pas de bibliothèque de fonctions mathématiques. Tous les calculs sont effectués avec des entiers et mis à l'échelle par 100000.
- Problème de graphique terminal : pour représenter les pixels, des demi-blocs Unicode sont utilisés afin de doubler la résolution verticale. Il faut connaître la couleur du pixel adjacent, et Bash ne peut pas conserver l'état.
- Autres problèmes :
- Actualiser le terminal dans son ensemble en une seule fois est difficile.
- La plupart des terminaux ne sont pas conçus pour les jeux vidéo, et il est difficile de traiter les entrées clavier en temps réel.
- Remplir le terminal avec des couleurs demande beaucoup de données.
- Bash ne permet pas d'afficher plusieurs lignes de chaînes en une seule fois.
- Les standards ECMA48, VT100, VT200, Xterm, etc. sont complexes et difficiles à comprendre.
- Les calculs mathématiques étaient difficiles.
FAQ
- Q : Problème lors du redimensionnement de la fenêtre
- Q : Le processeur surchauffe ou un ancien ordinateur ralentit
- A : Essayez de définir la variable d'environnement
FPS en dessous de 30.
- Q : Ne fonctionne pas avec Bash inférieur à la version 5
- Q : Ce code est-il du pur Bash ?
- A : Non. Au démarrage, le script appelle
stty pour désactiver l'écho, puis le réactive à la fin.
1 commentaires
Commentaires sur Hacker News
Le jeu n'est pas réellement en 3D, donc le fait d'exécuter un traçage de rayon une seule fois par colonne pour dessiner les pixels est très astucieux
Si vous cherchez un raycaster écrit en MS Batch, il y a un lien GitHub
Bash est lent, donc je pense qu'il n'est pas adapté au scripting ou à l'usage interactif
C'est dommage que stty exige un fork
Je ne comprends pas pourquoi on utilise encore un shell aussi lent
Je ne savais pas qu'un truc pareil était possible en Bash
Un raycaster
awkd'il y a 9 ans mérite aussi d'être mentionnéJe suis impressionné par ce défi
C'est impressionnant que le code fasse à peine 300 lignes
Ce défi est vraiment incroyable