- OFRAK Tetris là một trò chơi kiểu Tetris trong trình duyệt, nơi các lệnh ARM rơi xuống; thay vì ghép khối, bạn sắp xếp các lệnh để tạo luồng thực thi chương trình
- Các gadget lệnh rơi xuống sẽ được xoay rồi cố định, và chỉ những lệnh đã cố định nằm ở phía trên cùng màn hình mới được thực thi
- Điểm số được lưu tại địa chỉ bộ nhớ mà R12 trỏ tới, và bạn có thể theo dõi trạng thái bằng cách xem R0~R12, LR, PC, SP cùng bản dump bộ nhớ
- Khi hết thời gian hoặc xảy ra truy cập bộ nhớ sai, nhảy tới địa chỉ không hợp lệ thì sẽ Game over và quá trình thực thi kết thúc
- Có thể điều chỉnh độ khó và cách thực thi bằng các tùy chọn như chạy từng bước, bật/tắt nhạc, lệnh logic, chế độ vô hạn, khoảng thời gian giữa các lần rơi và kích thước gadget tối đa
Tetris vận hành bằng lệnh ARM
- OFRAK Tetris là một trò chơi kiểu Tetris với các gadget được tạo từ lệnh ARM rơi xuống
- Người chơi xoay các lệnh đang rơi rồi cố định chúng ở bên trái để tạo luồng thực thi
-
Quy tắc thực thi
- Các lệnh rơi từ trên xuống dưới
- Người chơi xoay và cố định các lệnh
- Trong các lệnh đã cố định, chỉ lệnh ở trên cùng được thực thi
Trạng thái thực thi hiển thị trên màn hình
- Lệnh đang được thực thi và địa chỉ của nó được hiển thị cùng nhau
- Ví dụ:
add PC, PC, #61 - Ví dụ:
00010000,00010004,00010008
- Ví dụ:
- Có thể theo dõi kết quả thực thi bằng cách xem trạng thái thanh ghi và bộ nhớ
- Hiển thị giá trị của R0~R12, LR, PC, SP
- Vùng bộ nhớ được hiển thị dưới dạng địa chỉ hệ 16 và các giá trị được điền bằng 0
- Điểm số được hiển thị như
Score: 0
Lưu điểm và điều kiện kết thúc trò chơi
- Điểm số được lưu tại địa chỉ bộ nhớ mà R12 trỏ tới
- Trò chơi kết thúc nếu xảy ra một trong các trường hợp sau
- Hết thời gian
- Truy cập vào bộ nhớ không hợp lệ
- Nhảy tới địa chỉ không hợp lệ
- Màn hình kết thúc hiển thị
Game over.và vùng nhập điểm cao
Điều khiển và thiết lập
- Điều khiển cơ bản gồm chạy từng bước, cố định gadget, xoay thanh ghi, phát/tạm dừng nhạc, hiển thị/ẩn phần mô tả
- Cũng có phần thiết lập key binding cho gamepad
-
Single Step
-
Toggle Music
-
Lock In
-
Rotate Instructions Up / Down / Left / Right
- Toggle Game Instructions
- Trong phần thiết lập trò chơi, có thể điều chỉnh điều kiện thực thi và độ khó
- Score multiplier
- Enable Logical Instructions
- Infinite mode
- Seconds between drops
- Maximum gadget size
-
Sự kiện tại DEF CON
- Người tham dự DEF CON có thể ghé bàn của Red Balloon Security để chơi Tetris cùng nhau tại Car Hacking Village
- Những ai đạt điểm đủ cao sẽ nhận được phần thưởng
1 bình luận
Ý kiến trên Hacker News
Với tư cách là một lập trình viên gần như không có kinh nghiệm làm việc với assembly, đây là một công cụ tuyệt vời để học
Tôi đã mở một cheat sheet ở tab khác để xem từng lệnh làm gì
Chỉ hơi thất vọng là do lỗi segfault đầu tiên mà điểm cao nhất lại hiện là -4,8 tỷ :-P
Thật sự rất hay! Điểm cao nhất của tôi đến giờ là 65612
Nếu góp ý thì khi mở menu trợ giúp, cách đóng nó không rõ ràng; có vẻ chỉ có thể nhấn lại
?Tôi thích nhạc Goblin, giao diện để nghịch các lệnh và cách phân biệt màu cũng tốt
Nếu có chế độ sandbox cho phép xem trước hiệu ứng khi thực thi lệnh và chỉnh sửa chương trình sau khi game kết thúc thì sẽ khá hữu ích cho người học ARM assembly
Trong lúc làm game này và chơi thử vài giờ, tôi thấy tốc độ đọc ARM assembly của mình rõ ràng đã nhanh hơn
Tôi không nhịn được cười khi thấy câu “điểm được lưu trong bộ nhớ tại địa chỉ mà R12 trỏ tới”
Cảm ơn vì đã chia sẻ, làm tôi nhớ DEFCON. Có lẽ phải đến năm sau tôi mới đi được
Trước khi có trả lời tôi đã để trang mở sẵn, nên đến khi refresh mới thấy câu trả lời
Hai chiến lược tốt mà tôi đã dùng đến giờ là
Thứ nhất, rải PC vào càng nhiều thanh ghi càng tốt, cộng các thanh ghi đó nhiều lần nhất có thể rồi lưu tổng vào địa chỉ 0 hoặc vị trí chứa điểm
Thứ hai, đọc lệnh được ráp từ giá trị PC cũ vào một thanh ghi dưới dạng số nguyên; vì thường trông như số âm nên dùng phép trừ để biến nó thành không âm, rồi lưu vào vị trí điểm
Tôi tò mò những người khác đã thử chiến lược nào
Ý tưởng thật sự rất hay, nhưng mức hiểu assembly của tôi quá thấp :)
Nó nói điểm được lưu ở R12, nhưng R12 là 0 mà tôi không hiểu vì sao điểm lại là 16
https://imgur.com/a/RY5jhTu
Trong trường hợp này là địa chỉ 0, tức điểm bắt đầu của data segment
Thanh ghi điểm có màu vàng, và vùng bộ nhớ tương ứng mà thanh ghi đó trỏ tới, tức các byte điểm thực tế, cũng được tô màu vàng
Tôi quen dùng máy tính và cũng biết một chút assembly cơ bản, nhưng wow, cái này thì tôi hoàn toàn không hiểu
Rộng hơn thì tôi cũng muốn nghe suy nghĩ về cách làm game rõ ràng hơn
Tôi biết một manual giải thích các lệnh sẽ hữu ích, nhưng ý tưởng khác cũng rất được hoan nghênh
Một UI/UX theo phong cách brutalism đẹp đẽ
Trước khi chơi thử, tôi bấm “About” thì một trang mới mở ra và hiện: “Bằng việc tiếp tục sử dụng trang này, bạn đồng ý với việc sử dụng cookie”
Trông như vi phạm GDPR. Việc từ chối cookie phải dễ như việc đồng ý
Đặc biệt là các cookie này có vẻ cũng không cần thiết để trang hoạt động
“Dịch vụ sử dụng cookie và các công nghệ tương tự như pixel tag, web beacon, clear GIF, JavaScript để máy chủ nhận diện trình duyệt web, biết thời điểm truy cập và sử dụng, phân tích xu hướng, hiểu cơ sở người dùng, vận hành và cải thiện dịch vụ … Chúng tôi cũng có thể bổ sung thông tin thu thập được bằng thông tin nhận từ bên thứ ba, bao gồm cookie do bên thứ ba đặt trên thiết bị”
https://ofrak.com/privacy/#tracking-tools-and-opt-out
Việc ở cuối trang bảo người dùng xóa cookie bằng cài đặt trình duyệt không phải là một giải pháp chấp nhận được
https://www.cnil.fr/en/refusing-cookies-should-be-easy-accep...
Tôi tò mò game được build như thế nào
Tôi đã xem https://ofrak.com/docs/environment-setup.html nhưng không tìm thấy nội dung cụ thể về game Tetris
Có thể tôi đã bỏ sót
Tôi thật sự thích ý tưởng này
Mấu chốt để đạt điểm cao có vẻ là ghi 0 vào PC
Vì mã nhị phân của lệnh mới được “thêm” vào vùng bộ nhớ hiển thị bên phải, và sau đó có thể thao tác R12 để tối đa hóa điểm
Vì mọi lệnh đều dài 4 byte và bit cao nhất luôn là 1
Vài lần tôi đã lên khoảng 2 tỷ, nhưng trung bình thì khá thấp ;)