Tại sao việc này khó
- Vấn đề về tốc độ của Bash: Bash rất chậm nên nếu chạy lệnh cho mỗi pixel thì không thể đạt tốc độ khung hình phù hợp. Nó không thể duy trì trạng thái màn hình trong bộ nhớ, và việc truy cập qua mảng hoặc chuỗi tốn nhiều thời gian.
- Hạn chế toán học: Bash không hỗ trợ số thực điểm động và cũng không có thư viện hàm toán học. Tất cả phép tính đều được thực hiện bằng số nguyên và được mở rộng theo 100000.
- Vấn đề đồ họa terminal: Dùng ký tự Unicode nửa khối để biểu diễn pixel, nhân đôi độ phân giải theo chiều dọc. Cần biết màu của pixel kề cận, nhưng Bash không thể lưu trạng thái.
- Vấn đề khác:
- Khó cập nhật toàn bộ terminal cùng lúc.
- Hầu hết terminal không dành cho trò chơi điện tử, nên việc xử lý đầu vào phím theo thời gian thực là khó khăn.
- Cần nhiều dữ liệu để tô đầy terminal bằng màu.
- Bash không in nhiều chuỗi nhiều dòng cùng một lần.
- Các chuẩn ECMA48, VT100, VT200, Xterm đều phức tạp và khó nắm bắt.
- Tính toán toán học gặp khó khăn.
Hỏi đáp
- Q: Khi thay đổi kích thước cửa sổ có lỗi
- Q: CPU quá nóng hoặc máy tính cũ chậm
- A: Hãy thử đặt biến môi trường FPS dưới 30.
- Q: Code không chạy trên Bash dưới phiên bản 5
- Q: Đây có phải code thuần Bash không?
- A: Không. Nó sẽ gọi
stty để tắt echo khi khởi động và gọi lại khi thoát để bật echo trở lại.
1 bình luận
Ý kiến trên Hacker News
Vì game này không phải thực sự là 3D, cách vẽ pixel bằng cách chỉ chạy ray tracing một lần cho mỗi cột thật rất khéo léo
Nếu bạn muốn biết có raycaster viết bằng MS Batch không, có thể xem tại liên kết GitHub
Mình nghĩ Bash khá chậm nên không phù hợp cho scripting hoặc sử dụng tương tác
Khó chịu khi stty đòi fork
Mình vẫn không hiểu lý do phải dùng một shell vẫn rất chậm như vậy
Tôi không ngờ Bash có thể làm được việc này
Raycaster
awk9 năm trước cũng đáng để nhắc tớiThật tiếc không thể chạy được dự án này
bufferedrồi thoát ngay lập tứcMã chỉ có khoảng 300 dòng nhưng vẫn rất ấn tượng
Thử thách này thật sự tuyệt vời