Tetris Hoàn Hảo Của Tôi

Kho GitHub của Dự án



Đây Là Gì

Tetris là một trò chơi huyền thoại và là một trong những trò tôi rất thích. Tôi thực sự yêu trò chơi này và thích chơi nó. Nó là một cách giải tỏa căng thẳng tuyệt vời. Cho một dự án cuối tuần vui vẻ, tôi quyết định xây dựng trò chơi dưới dạng một ứng dụng/trò chơi trên trình duyệt được thiết kế cho cả Desktop và Di động, sử dụng các nguyên tắc của vibe coding. Phiên bản di động của bản này được lấy cảm hứng từ Play-Tetris, vốn có một thiết lập di động rất hay với điều khiển dựa trên vuốt. Xem và chơi bản triển khai Tetris của tôi tại đây, đó là phiên bản mà tôi cho là “hoàn hảo” nhất của Tetris.



hình ảnh chơi của phiên bản tetris của tôi, tự chơi thử tại ĐÂY

Xa Hơn Mã Nguồn

Tôi không bắt đầu để xây dựng một bản sao Tetris như một dự án hồ sơ năng lực hay để học điều gì mới. Tôi xây dựng nó vì tôi thực sự cần nó. Khi tôi căng thẳng, dù là một tuần làm việc khó khăn hay chỉ là cuộc sống chồng chất, Tetris là một trong số ít thứ lành mạnh thực sự giúp tôi tái lập trạng thái. Khi tôi căng thẳng tôi có xu hướng ăn nhiều, điều đó cộng dồn theo thời gian, vì vậy có một thứ hoạt động mà không có tác dụng phụ nào là điều rất quan trọng với tôi. Chỉ cần 10 đến 30 phút thả các khối và đầu óc tôi cảm thấy như được làm mới một chút. Nó không chỉ là thư giãn bình thường đối với tôi, mà là một cách để có một thứ đơn giản và tập trung để đổ hết căng thẳng vào. Thậm chí có một vài nghiên cứu thú vị cho thấy Tetris có thể ảnh hưởng đến cách não xử lý ký ức xâm nhập và căng thẳng, ví dụ trong các thí nghiệm phim chấn thương, ở những người được điều trị sau tai nạn thực sự, và như một phụ trợ cho liệu pháp với những thay đổi não có thể đo lường được. Tôi không cố biến trò chơi này thành một phương pháp điều trị y tế, nhưng thật tuyệt khi thấy có thể có khoa học thực sự ủng hộ những gì tôi đã cảm nhận, rằng Tetris thực sự có thể giúp mọi người đối phó với căng thẳng.

Vì vậy tôi đã đi tìm một phiên bản Tetris tốt để chơi, và vấn đề là chẳng có thứ gì ngoài kia thực sự phù hợp với cách tôi muốn chơi. Các ứng dụng di động trên App Store iOS đầy quảng cáo và giao dịch vi mô. Các phiên bản web thì giật hoặc cảm thấy tệ trên điện thoại. Phiên bản NES cổ điển thì tuyệt nhưng cần trình giả lập và phần cứng bổ sung. Tôi thậm chí đã mua một Miyoo Mini nghĩ rằng nó sẽ giải quyết vấn đề, và cuối cùng tất cả những gì tôi làm là mang theo một thiết bị thứ hai chỉ để chơi Tetris. Tại một thời điểm tôi nhận ra mình dành nhiều thời gian hơn để tìm phiên bản phù hợp hơn là mất thời gian để tự xây dựng một phiên bản.

Với trình duyệt hiện đại, các công cụ LLM như Claude Code, và các quy trình như vibe coding, cuối cùng có vẻ là thời điểm thích hợp để tự xây dựng Tetris mà tôi muốn. Nhanh, tối giản, không quảng cáo, không tài khoản, không cửa hàng ứng dụng. Chỉ là một trò chơi trên trình duyệt hoạt động trên điện thoại và laptop của tôi và tôi kiểm soát hoàn toàn. Trong khoảng một ngày tôi đã có một phiên bản hoạt động, và sau khoảng một tuần làm việc rời rạc để làm cho nó bền và cảm giác đúng trên cả desktop và di động, tôi hài lòng với nó.

Tôi chia sẻ nó bởi vì nếu nó cuối cùng giúp ít nhất một người khác giải tỏa như nó giúp tôi, điều đó sẽ làm tôi rất vui. Nó là một thứ nhỏ, nhưng đôi khi một thứ nhỏ chính là điều bạn cần.

Tính Năng

  • Bàn Tetris cổ điển 10x20
  • Điều khiển đầy đủ bằng bàn phím trên Desktop và điều khiển cử chỉ cảm ứng trên Di động
  • Bộ 7 viên chuẩn (seven-bag) để xáo mảnh
  • Giữ mảnh và xem trước mảnh tiếp theo
  • Dự báo mảnh bóng ma hiển thị nơi mảnh sẽ rơi
  • Đường cong tốc độ theo cấp độ với thời gian khóa (lock delay) động
  • Theo dõi điểm, số dòng, cấp độ và điểm cao được lưu trong bộ nhớ cục bộ
  • Điểm cho rơi mềm và rơi nhanh
  • Menu tạm dừng với tùy chọn tiếp tục, khởi động lại và thoát
  • Hiệu ứng nhấp nháy khi xóa hàng
  • Nhạc nền với công tắc tắt tiếng (trạng thái được lưu)
  • Hỗ trợ vùng an toàn iOS (Dynamic Island, notch, home indicator)
  • Hỗ trợ ngoại tuyến qua Service Worker (hoạt động không cần internet sau lần truy cập đầu tiên)
  • Có thể cài đặt như một PWA (thêm vào màn hình chính trên iOS/Android để trải nghiệm giống app)

Điều Khiển

Máy Tính (Bàn Phím)

Hành động Phím
Di chuyển hoặc A D
Rơi chậm hoặc S
Rơi nhanh Space
Quay theo chiều kim đồng hồ W X
Quay ngược chiều kim đồng hồ Z
Giữ C hoặc LShift
Tắt tiếng M
Tạm dừng Esc hoặc P

Di động (Cảm Ứng)

Hành động Cử chỉ
Di chuyển Vuốt trái / phải
Rơi chậm Giữ và kéo xuống
Rơi nhanh Vẩy nhanh xuống
Quay theo chiều kim đồng hồ Chạm
Giữ Vẩy nhanh lên

Đường cong độ khó

Đường cong tốc độ và thời gian khóa trong phiên bản này được điều chỉnh bằng cách nghiên cứu cách các trò chơi Tetris cổ điển và hiện đại xử lý tiến trình độ khó. Trong NES Tetris gốc, trọng lực đạt một hàng mỗi khung hình ở cấp độ 29, điều này tạo ra cái gọi là “màn chết” nơi trò chơi trở nên về cơ bản không thể chơi được cho phần lớn con người. Đó không thực sự là một kết thúc được thiết kế, nó chỉ là một tác dụng phụ của phần cứng và cách DAS (Delayed Auto Shift) quá chậm để theo kịp tốc độ rơi. Willis Gibson đã chứng minh điều này vào năm 2024 khi anh ấy vượt qua nó và làm trò chơi sập ở cấp độ 157.



hình ảnh chơi của tetris nes cổ điển 1989 (nguồn gốc)

Các trò chơi hiện đại như TGM (Tetris: The Grand Master) giải quyết điều này khác đi. Thay vì chỉ làm cho các mảnh rơi nhanh hơn đến khi trò chơi vỡ, TGM giới hạn trọng lực ở 20G (rơi tức thời) và sau đó siết chặt các cửa sổ thời gian khác như thời gian khóa và DAS để tăng độ khó. Tiêu chuẩn Tetris Guideline sử dụng thời gian khóa 500ms với tối đa 15 lần thiết lập lại di chuyển, điều mà phiên bản này tuân theo. Nghiên cứu về TGM2 Death modeTGM3 Shirase cho thấy rằng ngưỡng thực tế cho chơi cạnh tranh nằm khoảng 250ms thời gian khóa với DAS nhanh, trong khi bất kỳ thứ gì dưới 133ms thuộc về những người chuyên môn.

Dựa trên tất cả điều này, đường cong tốc độ ở đây giới hạn trọng lực ở 33ms mỗi hàng (tương tự như NES cấp độ 19 đến 28) thay vì chuyển sang rơi tức thời, và DAS tăng/giảm từ 170ms xuống 100ms ở các cấp độ cao hơn để bạn có thể di chuyển khắp bảng trong thời gian khóa. Mục tiêu là làm cho các cấp độ cao cảm thấy tàn bạo nhanh nhưng vẫn công bằng, gần hơn với cách Tetris 99 và TGM xử lý độ khó cuối trận hơn là cách tiếp cận nguyên bản của NES chỉ để tốc độ thuần túy vượt quá khả năng nhập liệu của bạn.

Bên Trong

  • Thiết kế đáp ứng tối ưu cho cả Desktop và Di động (chế độ dọc)
  • Sprite khối và nền lưới được tiền kết xuất để tối ưu hiệu năng
  • Sử dụng hệ thống Quay Siêu (Super Rotation System - SRS) kiểu wall kicks cho việc quay mảnh
  • Phát hiện cử chỉ cảm ứng dựa trên vận tốc để phân biệt đáng tin cậy giữa vẩy và kéo
  • Hệ thống thời gian theo cấp độ cho tốc độ trọng lực và thời gian khóa
  • Điểm cao và trạng thái tắt tiếng được lưu bằng localStorage
  • Nguồn nhạc nền NmCCQxVBfyM
  • Dự án hoàn toàn mã nguồn mở theo Giấy phép MIT
  • Xây dựng bằng các công cụ AI sau:

Suy Nghĩ Cuối Cùng

Đây là một trong những dự án mà động lực không phải là kỹ thuật, mà là cá nhân. Tôi chỉ muốn một phiên bản Tetris hoạt động theo cách tôi muốn, không quảng cáo, không phần cứng thêm, và không phụ thuộc vào ứng dụng của người khác có thể biến mất hoặc thay đổi bất cứ lúc nào. Việc tôi có thể từ ý tưởng đến một trò chơi hoàn thiện trong khoảng một tuần làm việc rời rạc sử dụng các công cụ AI hiện đại và vibe coding nói lên nhiều điều về vị trí của chúng ta ngay bây giờ với phát triển phần mềm.

Tôi đã sử dụng phiên bản này gần như hàng ngày kể từ khi tôi xây dựng nó, và nó vẫn làm chính xác những gì tôi cần. Nó giúp tôi rời xa bất cứ điều gì đang khiến tôi căng thẳng, tập trung vào một thứ đơn giản trong vài phút, và quay trở lại với đầu óc sáng suốt hơn. Nếu bạn thử và nó cũng mang lại điều tương tự cho bạn, đó là kết quả tốt nhất mà tôi có thể mong muốn. Và nếu bạn muốn tạo nhánh cho nó, tinh chỉnh đường cong tốc độ, thay đổi các điều khiển, hoặc xây dựng dựa trên nó, cứ tự nhiên. Nếu bạn phát hiện lỗi hoặc có đề xuất, hãy thoải mái mở một vấn đề trên kho lưu trữ. Đó chính là mục đích khi làm cho nó mã nguồn mở.