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 trò mà 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ảm stress tuyệt vời. Cho một dự án cuối tuần thú vị, tôi đã quyết định xây dựng trò chơi dưới dạng một trò chơi/ứng dụng chạy trên trình duyệt, thiết kế cho cả Máy tính để bàn và Di động, sử dụng các nguyên tắc của lập trình theo vibe. Phía di động của phiên bản này được lấy cảm hứng từ Play-Tetris, nơi có thiết lập di động rất tuyệt 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 nghĩ là “hoàn hảo” nhất của Tetris.



phần chơi của phiên bản Tetris của tôi, hãy tự chơi tại đây

Ngoài 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 để đưa vào hồ sơ 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, cho dù đó là một tuần làm việc khó khăn hay chỉ cuộc sống chồng chất, Tetris là một trong vài thứ lành mạnh thực sự giúp tôi tái thiết lập lạ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ụ là điều rất quan trọng đối với tôi. Chỉ 10 đến 30 phút thả khối thôi và bộ não tôi cảm thấy như được dọn dẹp một chút. Với tôi đó không chỉ là thư giãn thông thường, 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 số nghiên cứu thú vị cho thấy Tetris có thể ảnh hưởng tới cách não xử lý các ký ức xâm nhập và stress, 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 bổ sung 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 thú vị khi thấy có thể có khoa học thực sự đứng sau 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 stress.

Vì vậy tôi đã đi tìm một phiên bản Tetris tốt để chơi, và vấn đề là khô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ì bị lag hoặc cảm thấy tệ trên điện thoại. Phiên bản NES cổ điển rất tuyệt nhưng cần một bộ giả lập và phần cứng thêm. 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. Ở một thời điểm tôi nhận ra mình đã dành nhiều thời gian tìm phiên bản phù hợp hơn là thời gian để tự xây dựng một cái.

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ư lập trình theo vibe, cuối cùng cảm thấy đây 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 app store. Chỉ một trò chơi trên trình duyệt hoạt động trên điện thoại và máy tính xách tay của tôi và mà tôi hoàn toàn kiểm soát. 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ó vững chắc và cảm giác đúng cả trên máy để bàn và di động, tôi hài lòng với nó.

Tôi chia sẻ nó vì nếu nó giúp được ngay cả một người khác giảm căng thẳng theo cách 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à thứ bạn cần.

Tính năng

  • Bảng Tetris cổ điển 10x20
  • Điều khiển đầy đủ bằng bàn phím trên Máy tính để bàn và điều khiển cử chỉ cảm ứng trên Di động
  • Trình sinh ngẫu nhiên seven-bag tiêu chuẩn
  • Giữ khối và xem trước khối tiếp theo
  • Chiếu bóng khối (ghost) cho thấy nơi khối sẽ hạ cánh
  • Đường cong tốc độ theo cấp độ với độ trễ khóa động (lock delay)
  • Theo dõi điểm, số dòng, cấp độ và điểm cao được lưu vào localStorage
  • Tính điểm cho soft drop và hard drop
  • Menu trong trò chơi với tiếp tục, khởi động lại, thoát, tắt nhạc/SFX, và liên kết mã nguồn
  • Hiệu ứng flash khi dọn dòng kèm hiệu ứng âm thanh
  • 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 ứng dụng)

Điều khiển

Máy tính để bàn (Bàn phím)

Hành động Phím
Di chuyển hoặc A D
Rơi nhẹ hoặc S
Rơi nhanh Space
Xoay theo chiều kim đồng hồ W X
Xoay ngược chiều kim đồng hồ Z
Giữ C hoặc LShift
Menu Esc hoặc M
Mã nguồn G (màn hình tiêu đề)

Di động (Cảm ứng)

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

Đường cong độ khó

Độ cong tốc độ và độ trễ khóa trong phiên bản này được tinh chỉnh bằng nghiên cứu về 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 ô mỗi khung hình ở cấp độ 29, điều này trở thành nổi tiếng như “kill screen” nơi trò chơi trở nên về cơ bản không thể chơi được đối với hầu hết con người. Đó không phải thực sự là một kết thúc được thiết kế, nó giống như 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.



phần 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 vấn đề này theo cách khác. Thay vì chỉ làm cho các mảnh rơi nhanh hơn cho đến khi trò chơi vỡ, TGM giới hạn trọng lực ở 20G (rơi ngay lập tức) và sau đó siết các cửa sổ thời gian khác như độ trễ khóa và DAS để tăng độ khó. Tetris Guideline tiêu chuẩn sử dụng độ trễ khóa 500ms với tối đa 15 lần đặt 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 sàn thực tế cho chơi cạnh tranh là khoảng 250ms độ trễ khóa với DAS nhanh, trong khi bất cứ thứ gì dưới 133ms là lĩnh vực của những chuyên gia.

Dựa trên tất cả những điều này, đường cong tốc độ ở đây giới hạn trọng lực ở 33ms mỗi ô (tương tự các cấp độ NES 19 đến 28) thay vì chuyển sang rơi ngay lập tức, 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 qua bảng trong thời gian độ trễ khóa. Mục tiêu là làm cho các cấp độ cao cảm thấy tàn nhẫn nhanh nhưng vẫn công bằng, gần hơn với cách Tetris 99 và TGM xử lý độ khó giai đoạn cuối hơn là cách tiếp cận nguyên bản của NES chỉ để tốc độ thô vượt quá khả năng điều khiển của bạn.

Cơ chế hoạt động

  • Thiết kế đáp ứng tối ưu cho cả Máy tính để bàn và Di động (chế độ dọc)
  • Các sprite khối được tiền-render và nền lưới để tối ưu hiệu năng
  • Sử dụng wall kicks theo phong cách Super Rotation System (SRS) để xoay khối
  • 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 vuốt nhanh và kéo
  • Hệ thống thời gian theo cấp độ cho tốc độ trọng lực và độ trễ khóa
  • Điểm cao và cài đặt âm thanh được lưu với localStorage
  • Nguồn nhạc nền NmCCQxVBfyM
  • Nguồn hiệu ứng âm thanh dọn dòng UMViM2tHrOk
  • Dự án hoàn toàn mã nguồn mở theo Giấy phép MIT
  • Được xây dựng với 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 có quảng cáo, không cần phần cứng bổ sung, 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 kỳ lúc nào. Việc tôi có thể đi từ ý tưởng đến một trò chơi được 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à lập trình vibe nói lên rất nhiều điều về vị trí của chúng ta hiện nay trong 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 khỏi bất cứ điều gì đang gây căng thẳng cho mình, tập trung vào điều gì đó đơn giản trong vài phút, và quay lại với đầu óc minh mẫn hơn. Nếu bạn thử nó và nó đem 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 nó, điều chỉnh đường cong tốc độ, thay đổi điều khiển, hoặc xây dựng thêm dựa trên nó, cứ thoải mái làm. Nếu bạn tìm thấy lỗi hoặc có đề xuất, hãy mở một vấn đề trên kho lưu trữ GitHub. Đó chính là mục tiêu khi làm nó mã nguồn mở.