2 points par GN⁺ 2024-12-22 | 1 commentaires | Partager sur WhatsApp

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
    • A : Ouvrez une issue.
  • 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
    • A : Oui.
  • 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

 
GN⁺ 2024-12-22
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

    • Il répète une chaîne du type « dessine ce pixel puis descends » autant de fois que nécessaire dans le terminal pour afficher le ciel, l'herbe et les objets réels
    • Je suis en train d'envisager un moteur de rendu voxel pour des environnements plus contraignants, et je pense qu'on peut y trouver des choses utiles dans ce projet
  • 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

    • Certaines distributions Linux populaires n'utilisent pas Bash comme shell de script
  • C'est dommage que stty exige un fork

    • Dans un projet futur, il sera peut-être possible d'appeler les ioctl nécessaires avec Bash et rowhammer sans avoir à forker
  • Je ne comprends pas pourquoi on utilise encore un shell aussi lent

    • La plupart des applis n'ont qu'à écrire sur stdout et stderr, donc afficher du texte à l'écran pourrait être plus rapide
  • Je ne savais pas qu'un truc pareil était possible en Bash

    • Je pensais maîtriser Bash, mais cette implémentation est étonnante
    • Je n'ai pas une forte compréhension mathématique, mais c'est un plaisir à regarder simplement
  • Un raycaster awk d'il y a 9 ans mérite aussi d'être mentionné

    • Le lien GitHub est disponible pour le voir
  • Je suis impressionné par ce défi

    • C'est difficile à croire que c'est possible
  • C'est impressionnant que le code fasse à peine 300 lignes

    • Ce projet me plaît vraiment
  • Ce défi est vraiment incroyable

    • Je n'arrive pas à croire que c'est possible