7 điểm bởi gogoj2 2026-01-19 | 14 bình luận | Chia sẻ qua WhatsApp

Mùa hè năm 2004, khi tôi đang ở những tháng cuối trong quân ngũ, tôi bắt đầu lên ý tưởng làm game vì băn khoăn không biết nên làm gì trong thời gian rảnh. Khi đó em trai tôi đang học chuyên ngành thiết kế đồ họa game, nên tôi nghĩ sau khi xuất ngũ sẽ thật tuyệt nếu hai anh em có thể cùng làm một thứ gì đó. (À... tôi là một người học khối xã hội rất bình thường. Hoàn toàn không có nền tảng kỹ thuật.)

Vì đây là một thử thách nghiệp dư, tôi định làm một thứ nhỏ và đơn giản. Tôi lấy trò phá gạch (Arkanoid), một trong những thể loại dễ tiếp cận nhất, làm nền tảng rồi thêm vào một kiểu đối đầu mới. Dù đây là trò chơi đã có vô số người làm phiên bản mới, nhưng dường như không có ai làm theo kiểu như tôi.

Sau khi xuất ngũ, tôi đầy tham vọng tập hợp em trai và bạn bè của em để lập đội, nhưng chẳng bao lâu sau ai cũng có hoàn cảnh riêng nên nhóm nhanh chóng tan rã. Tôi từng nghĩ lần sau có cơ hội thì sẽ làm, nhưng rồi cơ hội ấy không quay lại. Thời gian trôi đi, ngay cả khi đã đi làm tôi thỉnh thoảng vẫn nhớ đến nó, và có một giai đoạn tôi từng đặt mục tiêu làm nó khi thử học Python, nhưng đó là một bài toán quá khó với tôi.

Rồi thời gian cứ thế trôi qua, đến mùa hè năm ngoái, hơn 20 năm sau, sau một cuộc họp tôi đi ăn tối cùng những CEO đã tham gia buổi họp đó, và mọi người đều nói rằng giờ có quá nhiều thứ có thể tạo ra bằng AI nên ai cũng muốn khởi nghiệp lại. Được truyền cảm hứng từ hôm đó, tối về nhà tôi cài thử Claude Code, thứ mà trước đó chỉ mới nghe danh. Và rồi 2 tiếng sau… bùm!!

Tôi suy nghĩ xem nên giao cho Claude Code làm gì trong dự án đầu tiên, rồi lần theo lại ý tưởng từ 20 năm trước và đưa ra yêu cầu. Chỉ khoảng 2 tiếng sau, ngay trước mắt tôi, paddle và quả bóng đã chuyển động và đang phá gạch. Cảm giác chấn động khi đó thật khó tả. Kiểu “chứng ngôn” này giờ chắc mọi người đã quá quen vì thấy ở khắp nơi, nhưng nửa năm sau đến hiện tại thì tôi đã thành người không thể sống thiếu Claude Code.

Trong thời gian qua tôi dần dần chỉnh sửa trò chơi, và giờ nó đã đạt đến mức ít nhất có thể gọi là một bản demo, nên tôi mạnh dạn công khai nó. Lại còn đăng trên GeekNews, nơi trước giờ tôi chỉ âm thầm theo dõi nữa chứ!! Ban đầu tôi hình dung đây là game đối kháng 2 người chơi, nhưng tính năng nhiều người chơi là một bức tường quá cao với tôi, nên cuối cùng tôi làm nó theo dạng đấu với máy.

Giới thiệu ngắn gọn thì:

  • Dành cho máy tính. Hiện chưa hỗ trợ di động.
  • Đây là game phá gạch mà 2 người quay lưng về phía nhau trong cùng một không gian. Bên nào phá hết gạch trước sẽ thắng.
  • Nếu tôi làm rơi bóng, bóng sẽ chuyển sang khu vực của đối thủ. Nếu đối thủ làm rơi, nó sẽ chuyển lại cho tôi.
  • Trò chơi có đưa vào các khái niệm vật lý của thế giới thực như trọng lượng, va chạm, gia tốc và quán tính. Khó hơn tưởng tượng đấy.
  • Vì là bản demo nên sau mỗi ván đơn có thể chơi tiếp bằng cách khởi động lại.
  • Giống như các máy game thùng ngày nhỏ, nếu lập kỷ lục bạn có thể khắc tên mình vào bảng điểm.

Nếu viết thêm vài bài học rút ra trong quá trình phát triển thì:

  • Refactoring! Refactoring! Refactoring!
  • Tôi đã hiểu refactoring thực sự là gì, và tự hỏi liệu có tồn tại một thứ gọi là địa ngục refactoring trong mọi loại địa ngục hay không.
  • Lúc đầu vì quá hào hứng, tôi mơ tới Battle.net nên chia tách và phình to tính năng một cách điên cuồng, rồi cuối cùng giữa biển bug lại phải reset tất cả, sau đó lại tách ra rồi gộp vào... Đó là trước khi Opus 4.5 ra mắt.
  • Chỉ làm một thứ nhỏ như thế này thôi mà đã đến mức đó, nên tôi càng thêm kính trọng các lập trình viên.

May mắn là giờ tôi đã phần nào biết lượng sức mình, chia nhỏ công việc, tạo tài liệu workflow, và trở thành người làm việc cẩn thận ghi chép development log cũng như git commit. Thành quả lớn nhất là tôi đã có rất nhiều điều muốn thử làm. Hiện tôi đang chăm chỉ suy nghĩ để tự tạo ra những công cụ cần thiết cho công việc của mình.

Tôi vẫn đang băn khoăn không biết nên làm gì với trò chơi này. Với hoàn cảnh hiện tại của tôi, rất khó để phát triển nó một cách nghiêm túc, nhưng nếu cứ thế chôn vùi đi thì cũng thật đáng tiếc. Tôi mong nó có thể trở thành một trò chơi mà trẻ em có thể vui vẻ tận hưởng.

Tôi luôn học hỏi được rất nhiều từ những tin tức trên GeekNews và thật sự rất biết ơn khi được theo dõi nơi này. Xin cảm ơn.

14 bình luận

 
colus001 2026-01-22

Ý tưởng thì thú vị, nhưng cảm giác điều khiển quá tệ. Có vẻ việc áp dụng quán tính vào thao tác điều khiển trong kiểu game này không phải là một ý hay. Có lẽ đây là một câu chuyện hơi khác với độ khó.

 
gogoj2 2026-01-28

Cảm ơn bạn đã góp ý. Tôi đã suy nghĩ về điểm bạn nêu và giảm quán tính xuống một nửa để việc điều khiển dễ hơn một chút. Ban đầu tôi ưu tiên ý tưởng vật lý mà mình hình dung, nhưng điều đó cũng khiến tôi phải suy nghĩ kỹ hơn về khả năng điều khiển của trò chơi và nên xử lý thế nào khi va chạm. Tôi sẽ tiếp tục chỉnh sửa dần. (Do công việc chính bận hơn nên việc phản ánh thay đổi bị chậm.)

 
gogoj2 2026-01-20

Không biết FURY là ai nữa.. đã ghé qua và để lại một số điểm cực khủng.;;

 
bsh998 2026-01-20

Trò chơi có các khái niệm vật lý của thế giới thực như trọng lượng, va chạm, gia tốc và quán tính. Khó hơn tưởng tượng.

Đây là một nhận xét cho thấy mức độ hiểu về vật lý trong game còn hạn chế, nên nếu có thể thì sẽ tốt hơn nếu chỉnh lại cho mượt hơn một chút.

 
cucumber9 2026-01-20

Xin hãy tự chỉnh sửa cho mượt nhé kk, đừng làm màu trước mặt dân khối xã hội nữa.

 
gogoj2 2026-01-20

Cảm ơn bạn đã lo lắng cho trái tim của một người học khối xã hội. haha ^^

 
bsh998 2026-01-20

Lý do tôi khó giúp bạn chỉnh lại câu chữ là vì tôi chưa xem đoạn mã bạn viết, nên không biết bạn đã triển khai engine vật lý theo cách nào.

 
bsh998 2026-01-20

Tôi xin lỗi vì phần góp ý ngoài ý muốn mà tôi đã đưa ra.
Nhiều người quảng bá sản phẩm, nhưng thường có trường hợp quảng bá bằng AI hoặc đính kèm những mô tả không phù hợp, nên tôi để lại bình luận. Đó không phải là một bình luận được viết ra để chọc giận ai cả.

 
gogoj2 2026-01-20

Cảm ơn bạn đã quan tâm. Tôi hoàn toàn không thấy khó chịu. Tôi luôn trân trọng những lời góp ý. Thậm chí, vì tôi chưa hiểu rõ là cần sửa chỗ nào và sửa như thế nào, nên nếu bạn có thể giải thích chi tiết hơn thì sẽ rất tốt.

Nói thêm về việc đã áp dụng vật lý thực tế: thông thường những game kiểu này chỉ triển khai va chạm và phản xạ ở mức rất đơn giản. Nhưng tôi nghĩ sẽ hay hơn nếu khi bóng hoặc gạch va chạm, người chơi có thể cảm nhận được năng lượng va chạm tạo ra bởi trọng lượng và tốc độ thực, giống như trong game pinball thật. Vì vậy tôi đã tìm và dùng thử Planck.js, thứ có vẻ tinh vi hơn các thư viện làm game thông thường. Tôi đã thể hiện việc viên gạch khi bị bóng đánh trúng sẽ bị đẩy đi và xoay do tác động đó. Ngoài ra, trong phần cài đặt còn có thể thay đổi những thứ như khối lượng của bóng, khối lượng của gạch, độ suy giảm năng lượng va chạm, lực cản..., nên tùy theo thiết lập mà trải nghiệm cũng khác nhau.
(Tôi có một thiết lập mà tôi gọi là chế độ điên cuồng; nếu tăng khối lượng của bóng lên tối đa và giảm khối lượng của gạch xuống tối thiểu thì trò chơi sẽ trở nên cực kỳ năng động.)

Mã nguồn cũng có trên GitHub.
https://github.com/gogodevelop2/mirror-breakout

 
bsh998 2026-01-20

Vâng, nếu tôi góp ý thì, trước hết có vẻ như bạn đã đầu tư nhiều công sức hơn vào thiết kế va chạm, thiết lập hệ số đàn hồi, v.v. Và đặc biệt, va chạm được tính toán và phát sinh dựa trên khối lượng và hệ số đàn hồi của từng đối tượng; nếu nói về những điểm khác với mục tiêu bạn hướng tới thì,

khối lượng hay tốc độ của paddle hoặc brick thực ra chỉ ảnh hưởng đến động lượng của ball, nên về bản chất, thay vì là vật lý thực tế, nó gần với việc bạn lấy cảm hứng từ mô hình vật lý và lập trình riêng va chạm giữa quả bóng với từng loại đối tượng (brick, paddle, wall).

Vì vậy, thay vì nói đó là vật lý thực tế, có lẽ sẽ tốt hơn nếu bạn giải thích rằng mình đã mượn các yếu tố của physics engine để thiết kế va chạm và sự thay đổi động lượng theo cách động.

Đặc biệt, do quá trình va chạm có những chỗ phi thực tế nên bạn đã áp dụng các thay đổi động lượng dưới dạng hiệu chỉnh tốc độ; ở khía cạnh cảm giác điều khiển, điều này có thể khiến nó mang cảm giác như một cơ chế ẩn, hoặc cũng có thể bị cảm nhận là khá thiếu thân thiện.

 
bsh998 2026-01-20

Nói một cách dễ hiểu hơn một chút,
dù có sử dụng các công thức vật lý và phương pháp tính toán, nhưng xét về kết quả thì đây là một
mô hình không thực tế, và để ngăn các vấn đề phát sinh từ những phần không thực tế đó theo hướng gameplay (tốc độ vô hạn, dừng lại, điều chỉnh hướng, v.v.), có khá nhiều phần hiệu chỉnh đã được thêm vào.

 
gogoj2 2026-01-20

Cảm ơn bạn đã giải thích chi tiết. Tôi đã hiểu rõ hơn nhiều. Vì đây là lần đầu tôi làm game nên tôi chưa hiểu rõ về thế giới vật lý game cũng như mức độ phù hợp trong cách dùng thuật ngữ, nên có vẻ tôi đã viết theo cách dễ gây hiểu lầm. Nghe phần giải thích của bạn, tôi nghĩ mình đã hiểu thêm đôi chút về mức độ mà những người đang làm trong ngành nhìn nhận các sản phẩm. Tôi chưa tìm được cách sửa bài viết gốc... tôi sẽ tìm hiểu rồi chỉnh sửa. Cảm ơn bạn.

 
[Bình luận này đã bị ẩn.]
 
gogoj2 2026-01-20

Cảm ơn bạn. Haha, tôi cũng sẽ ủng hộ các hoạt động sở thích của bạn!