Por que isso foi difícil
- Problema de desempenho do Bash: O Bash é muito lento, então executar um comando por pixel não consegue alcançar uma taxa de quadros adequada. Não é possível manter o estado da tela em memória e, ao acessar por arrays ou strings, o tempo gasto é alto.
- Limitações matemáticas: O Bash não tem suporte a ponto flutuante e não possui biblioteca de funções matemáticas. Todas as operações matemáticas são feitas como inteiros, com escala de 100000.
- Problema de gráficos do terminal: Para representar pixels, foi usado meio-bloco Unicode para dobrar a resolução vertical. É preciso saber a cor dos pixels adjacentes, mas Bash não consegue armazenar estado.
- Outros problemas:
- Atualizar o terminal inteiro de uma vez é difícil.
- A maior parte dos terminais não é feita para videogames, então é difícil tratar entrada de teclado em tempo real.
- Preencher o terminal com cores requer uma grande quantidade de dados.
- Bash não imprime múltiplas linhas de string de uma vez.
- Padrões como ECMA48, VT100, VT200 e Xterm são complicados e difíceis de entender.
- Havia dificuldades com cálculos matemáticos.
FAQ
- Q: Há problemas ao redimensionar a janela
- Q: A CPU esquenta demais ou computadores antigos ficam lentos
- A: Tente definir a variável de ambiente FPS abaixo de 30.
- Q: Não funciona com Bash abaixo da versão 5
- Q: Esse código é puro Bash?
- A: Não. No início chamamos
stty para desativar o eco e ativá-lo novamente ao encerrar.
1 comentários
Comentário do Hacker News
Como esse jogo nem é realmente 3D, o jeito de renderizar pixels fazendo ray tracing apenas uma vez por coluna é muito esperto
Se você está curioso se existe um raycaster em MS Batch, pode conferir o link do GitHub
Acredito que Bash é lento demais e, por isso, não é adequado para scripts ou uso interativo
É uma pena que o stty exija fork
Ainda não entendo o uso de um shell ainda tão lento
Não sabia que isso era possível em Bash
Também vale mencionar o raycaster em
awkde 9 anos atrásUma pena não conseguir executar esse projeto
Impressiona que tenha apenas 300 linhas de código
Esse desafio é realmente enorme