Khi nhắc đến PDF, chúng ta thường nghĩ ngay đến những tài liệu tĩnh, chứa văn bản, hình ảnh hoặc các biểu mẫu cần điền. Tuy nhiên, một nhà phát triển đã chứng minh rằng định dạng PDF hiện đại, khi được mở trên các trình duyệt web, có thể ẩn chứa những khả năng vượt xa tưởng tượng – điển hình là việc chạy các trò chơi kinh điển như Tetris và DOOM.
Tetris: Bằng chứng đầu tiên về game trên PDF
Thomas Rinsma, một chuyên gia phân tích bảo mật và nhà phát triển, đã công bố một bản demo Tetris hoạt động hoàn chỉnh, chạy hoàn toàn bên trong một tệp PDF. Trò chơi này có thể chơi được trên Google Chrome và các trình duyệt dựa trên Chromium khác, cũng như Mozilla Firefox. Bạn đọc có thể tự mình trải nghiệm trực tiếp với tệp PDF tại website của Rinsma.
Giao diện game Tetris đang chạy trực tiếp trên file PDF trong trình duyệt Chrome, thể hiện các khối gạch và điểm số.
Cơ chế hoạt động của trò chơi này dựa trên khả năng scripting hạn chế mà các trình đọc PDF trong trình duyệt cung cấp. Theo giải thích, mặc dù Adobe Acrobat/Reader nổi tiếng với khả năng hỗ trợ scripting phong phú cho các biểu mẫu và nội dung động, nhưng PDFium (trình đọc PDF của Chromium) và PDF.js (của Firefox) cũng triển khai một phần nhỏ khả năng scripting này. Các tệp PDF có thể chứa các trường nhập văn bản, nút bấm, hộp kiểm, v.v., và các hàm JavaScript có thể được liên kết với các sự kiện trên các “trường” này, cho phép sửa đổi các thuộc tính của chúng thông qua JavaScript.
Về cơ bản, Rinsma đã tái sử dụng các chức năng scripting vốn được thiết kế để kiểm tra nội dung biểu mẫu, biến chúng thành công cụ để thay đổi nội dung của PDF. Tài liệu tạo ra một lưới các nút có thể được hiển thị hoặc ẩn theo lập trình, hoạt động như các “pixel” đồ họa. Trò chơi được điều khiển thông qua các nút có thể nhấp hoặc các phím bàn phím gõ vào một trường văn bản.
DOOM: Nâng tầm giới hạn của PDF
Tiếp nối thành công với Tetris, Rinsma đã đưa ý tưởng này đi xa hơn bằng cách hoàn thành bản port của tựa game bắn súng góc nhìn thứ nhất kinh điển năm 1993, DOOM, sang định dạng PDF. Dự án này dựa trên DOOM-ASCII – một phiên bản DOOM hoạt động được trong môi trường chỉ có văn bản với các ký tự ASCII, được biên dịch cho trình duyệt web bằng cách sử dụng WebAssembly và Emscripten. Bạn có thể thử DoomPDF ngay trong trình duyệt web của mình – lưu ý rằng phiên bản này hiện chỉ hoạt động với Chrome và các trình duyệt dựa trên Chromium.
Hình ảnh game DOOM với đồ họa ASCII đang hiển thị bên trong một file PDF mở trên trình duyệt Google Chrome, minh họa khả năng chạy game phức tạp.
Mặc dù bản port DOOM này hoạt động, nhưng nó khá chậm trên các thiết bị hiện đại. Trò chơi hiển thị đơn sắc, không có màu như dự án DOOM-ASCII gốc, do hạn chế trong việc cập nhật màu sắc của các “pixel” nút mà không phải thay thế chúng bằng các phần tử khác. Rinsma giải thích rằng, ngay cả đối với một màn hình GameBoy (160x144x3), số lượng trường cần xử lý lên đến gần 70.000, điều này làm chậm hiệu suất đáng kể.
Mã nguồn của cả PDF Tetris và DoomPDF đều có sẵn trên GitHub. Những dự án này một lần nữa khẳng định rằng, với sự sáng tạo không giới hạn, các nhà phát triển có thể biến những điều tưởng chừng không thể thành hiện thực, mang đến cái nhìn mới mẻ về tiềm năng của các định dạng công nghệ đã quen thuộc.
Kết luận
Việc chạy Tetris và DOOM trên file PDF là một minh chứng ấn tượng cho thấy định dạng tài liệu này không chỉ đơn thuần là nơi lưu trữ thông tin, mà còn có thể trở thành một nền tảng thực thi phức tạp nhờ vào các tính năng scripting tích hợp trong trình duyệt web hiện đại. Hy vọng rằng, những khám phá như của Thomas Rinsma sẽ tiếp tục truyền cảm hứng cho cộng đồng phát triển, mở ra nhiều ứng dụng độc đáo hơn nữa cho các công nghệ quen thuộc. Bạn đã thử chơi các tựa game này trên PDF chưa? Hãy chia sẻ trải nghiệm của bạn dưới phần bình luận nhé!
Nguồn tham khảo: Thomas Rinsma