Chơi DOOM ngay trên terminal chỉ với một lệnh cURL
Dự án cURL DOOM cho phép trải nghiệm tựa game kinh điển trực tiếp trên cửa sổ dòng lệnh nhờ kỹ thuật kết xuất khung hình ANSI và truyền tải qua HTTP. Người dùng có thể chọn cách chơi dễ dàng thông qua script hoặc thử thách bản lĩnh với chế độ streaming hai chiều thuần túy.

Chơi DOOM ngay trên terminal chỉ với một lệnh cURL
Có một câu nói vui trong giới công nghệ rằng: "Nếu nó có bộ vi xử lý, nó có thể chạy DOOM". Tuy nhiên, nhà phát triển Sawyer X đã nâng tầm tiêu chuẩn này lên một cấp độ mới khi biến chính công cụ dòng lệnh cURL — thường dùng để tải dữ liệu web — thành một máy chơi game.
Dự án cURL DOOM cho phép người dùng trải nghiệm tựa game bắn súng kinh điển năm 1993 trực tiếp trên cửa sổ terminal mà không cần cài đặt bất kỳ phụ thuộc nào ngoài cURL và bash.
Cơ chế hoạt động
Về mặt kỹ thuật, đây không phải là việc port game chạy cục bộ hoàn toàn. Thay vào đó, một máy chủ HTTP sẽ chịu trách nhiệm kết xuất (render) các khung hình của DOOM thành các ký tự ANSI half-block (khối bán). Các khung hình này sau đó được truyền trực tiếp (stream) đến terminal của người dùng qua giao thức HTTP.
Chế độ chơi dễ dàng với curl và bash
Dự án sử dụng bản chia sẻ (shareware) doom1.wad và dựa trên abstraction doomgeneric để hoán đổi backend kết xuất hình ảnh.
Hai cách để trải nghiệm
Tác giả cung cấp hai phương thức chơi: một cách "thân thiện" dành cho đại đa số và một cách "khổ sở" dành cho những ai muốn thử thách kỹ thuật.
1. Cách thân thiện: curl | bash
Đây là cách đơn giản nhất. Bạn chỉ cần chạy một dòng lệnh:
curl -sL http://localhost:3000 | bash
Khi truy cập vào địa chỉ trên, máy chủ sẽ thực hiện content-negotiation (thương lượng nội dung). Nếu phát hiện yêu cầu đến từ cURL, nó sẽ trả về một script play.sh. Script này sẽ xử lý vòng lặp nhập liệu phím, quản lý chế độ hiển thị terminal (alternate screen), con trỏ và dọn dẹp khi thoát game.
2. Cách "khổ sở": Chỉ dùng curl thuần túy
Đối với những người thích sự phức tạp, bạn có thể chơi game mà không cần bất kỳ vòng lặp shell nào, chỉ sử dụng một kết nối TCP duy nhất:
stty -echo -icanon min 1 time 0 && curl -sN -X POST -T - localhost:3000/play
Chế độ chơi thử thách chỉ với curl thuần túy
Trong chế độ này, yêu cầu HTTP POST duy nhất hoạt động theo hai chiều (bidirectional): thân yêu cầu (request body) gửi các phím bấm lên máy chủ, trong khi thân phản hồi (response body) gửi các khung hình ANSI xuống.
Điều khó khăn ở đây là terminal mặc định ở chế độ "cooked" (đã nấu chín), nơi nó đợi phím Enter mới gửi dữ liệu và hiển thị lại những gì bạn gõ. Do đó, bạn phải dùng lệnh stty để chuyển terminal sang chế độ "raw" (thô) trước khi bắt đầu. Khi thoát game, bạn sẽ cần dùng lệnh reset để terminal hoạt động bình thường trở lại.
Tùy chỉnh và Điều khiển
Game tự động phát hiện kích thước terminal của bạn. Tuy nhiên, độ phân giải gốc của DOOM là 320x200 pixel, tương đương 320 cột x 100 dòng ô terminal. Bạn có thể ép buộc kích thước viewport bằng các biến môi trường:
# Buộc viewport nhỏ trên terminal lớn
DOOM_COLS=120 DOOM_ROWS=40 ./doom.sh
# Kết nối đến máy chủ từ xa
DOOM_SERVER=https://doom.example.com ./doom.sh
Các phím điều khiển tuân theo chuẩn cổ điển:
- W / ↑: Đi tới
- S / ↓: Đi lùi
- A / ←: Quay trái
- D / →: Quay phải
- F: Bắn
- Space / E: Mở cửa / Tương tác
- Q: Thoát (chỉ hoạt động ở chế độ script)
Kết luận
cURL DOOM là một ví dụ tuyệt vời về sự sáng tạo trong lập trình, cho thấy sự linh hoạt của giao thức HTTP và các công cụ dòng lệnh cơ bản. Nó không chỉ là một trò đùa kỹ thuật (tech demo) mà còn là một bài học thú vị về streaming dữ liệu và xử lý terminal. Nếu bạn đang buồn chán trong cửa sổ dòng lệnh, đây có thể là cách giải trí hoàn hảo.



