Xoá PUBG, tự làm game với Claude
Giật tít thế thôi chứ mình không phải game developer, cũng chả có kiến thức gì về làm game cả.
Tại sao nên đọc bài này?
Kiến thức làm game = 0 thì có làm game được không?
Xem Claude bá khí thế nào
Tản mạn chút xíu
Mình chơi PUBG từ hồi nó mới ra, tính tới nay cũng gần 8 năm. Dạo này PUBG dính phốt nên mình xoá rồi, còn game này thì mình làm từ 2 tuần trước khi PUBG bị tẩy chay ở VN.
Game vibe code, đồ hoạ lấy free trên mạng. Bài này không phải để flex skill hay rủ mọi người chơi đâu nhóe, chủ yếu kể lại mình làm như thế nào thôi.
Bắt đầu từ con số 0
Một hôm đang ngồi lướt tin công nghệ, thấy mấy game mẫu làm bằng PlayCanvas (framework làm 3D chạy trên web) cũng xịn
. Tự nhiên nghĩ hay là làm game nhỉ, thế là bật Claude gõ luôn:
"I want to build a game. I'm a software engineer and I don't have any knowledge about game engines. Onboard me."
Claude giải thích mấy khái niệm cơ bản trước, cái nào không hiểu thì mình hỏi lại. Tới vụ chọn framework thì mình hỏi có framework nào tương tự PlayCanvas mà xịn hơn không? Nó đưa ra bảng so sánh với Three.js, Babylon.js. Chat chit thêm một lúc thì mình chọn Babylon, dù sao cũng không có kiến thức gì để cãi, với lại thấy star trên GitHub của nó cao hơn
.
Milestone đầu tiên mình kêu Claude "spawn một team" để làm game bắn súng góc nhìn thứ nhất chạy trên trình duyệt, gửi reference cho nó là mình muốn đồ hoạ như Venge.io. (Spawn một team là con Claude chính chia việc cho mấy con Claude khác chạy song song, đứa lo bản đồ, đứa lo di chuyển, đứa lo giao diện, xong nó ráp lại rồi test, như 1 team thực tế)
Mình không đọc code, chỉ mở game lên chơi rồi feedback.
Khoảng 1 tiếng sau nhân vật đã đi lại được. Lỗi đầu tiên cũng là lỗi buồn cười nhất: phím ngồi ban đầu có cả Ctrl, mà bấm Ctrl + W (ngồi + đi tới) thì trình duyệt đóng luôn cái tab
.
Đi được, bắn được, nhưng trông như Minecraft
Vài tiếng sau đã có hình nộm để bắn, đi, nhảy, ngồi được hết. Đạn bay thật và rơi theo trọng lực, còn tiếng súng thì code tự chế ra. Cũng wow phết.
Nhưng chơi một hồi thì thấy không ổn, mình nhắn:
"Có thể dùng nhân vật, súng thật hơn không, thay vì mấy khối hình (trông như Minecraft). Mình muốn chân thực."
Chưa tới 2 tiếng mà mình đã tự chê cái gu mình vừa chọn
.
Muốn thật thì phải dùng model 3D, đoạn này mình phải ngồi research một tí mới hiểu model 3D trong game như thế nào.
Mình bảo Claude đi tìm assets free trên mạng, nó recommend Sketchfab với Mixamo, kiểm bản quyền từng món, lên danh sách 25 file rồi kêu mình tự tải. Mình lười nên bảo nó dùng computer-use tự tải luôn.
Súng thật, lính thật
Đây là chỗ mình bất ngờ nhất. Tải model về, đổi định dạng, nén mỗi cây súng từ khoảng 25 MB xuống 4 MB, cắt animation, gắn vào tay, căn ống ngắm,... mấy cái này mình không biết làm, và cũng không phải làm
. Mình wow quá nên quay video gửi bạn bè coi luôn.
Lính trúng đạn thì giật người, bắn 5 viên thì ngã sấp xuống, lộ chữ SWAT sau lưng.
Tiếng súng tự chế ban đầu cũng được thay bằng bản thu thật. Bị bắn tỉa từ xa thì hơn 1 giây sau mới nghe tiếng nổ, y như ngoài đời luôn. Claude còn nói trước là tiếng rút chốt lựu đạn thật ra là… tiếng chìa khoá. 
Lúc test bắn vào lính thì phát đầu tiên không thấy máu đâu, mình lại kêu nó sửa, lần sửa này bắn còn xịt máu dính lên tường.
Tiếp là lựu đạn, khói, bom xăng, medkit, giáp, túi đồ kéo thả kiểu PUBG, mình lại spawn một team 4 agent làm. Nhìn vẫn giả nên mình lại đòi model thật. May là Claude tìm được tay ném của đúng tác giả làm bộ súng, cùng găng tay đen, cùng tay áo, ráp vào khớp luôn.
Bản đồ, phần khoai nhất
Cái đấu trường 70×70 m chơi một hồi thấy chật. Claude tính theo mật độ người chơi của mấy map PUBG rồi đề xuất 600×600 m, mình chọn luôn 1×1 km cho rộng
. Chọn thì dễ, làm mới thấy khoai.
Asset free thì có súng, có lính, chứ nhà thật vào được bên trong mà bản quyền rõ ràng thì tìm không ra. Thế là agent tự dựng nhà bằng code, ra 12 kiểu từ nhà 2 tầng, kho thóc tới tháp canh, trạm radar. Test kỹ tới mức ngồi thì nhảy qua cửa sổ được, còn đứng thì không.


Rồi tới FPS, khoảng 70 fps, chơi được nhưng chưa đã. Claude không tối ưu mò mà làm bài đo trước, mỗi lượt tắt bớt một thứ để coi thứ nào nặng. Mà agent không có card đồ hoạ, nên người ngồi chạy bài đo là… mình, chạy xong copy kết quả dán lại cho nó
.
Kết quả khá bất ngờ: thứ làm game chậm không phải cây hay lính, mà là màn hình Retina bắt game vẽ quá nhiều điểm ảnh. Hạ độ phân giải xuống chút xíu là mượt hẳn.
Lặt vặt thì còn cây trong rừng nháy 2.016 lần trong 20 giây (agent đếm hẳn hoi), ngắm sniper thấy xuyên tường, rồi mặt đất mọc mấy cái gờ như bức tường tí hon làm nhân vật vấp chân liên tục.

Backend, team "chuyên nghiệp"
"Spawn một team thiết kế backend chuyên nghiệp hỗ trợ nhiều người chơi. Yêu cầu backend hiệu năng cao"
Claude dựng một đội 4 vai: người lo mạng, người lo hiệu năng, người lo hạ tầng, và một kiến trúc sư trưởng đứng trên cùng. Hài nhất là tụi nó còn xung đột cãi nhau như hồi mình còn làm đồ án hồi đại học vậy.
Kế hoạch ghi phần này mất khoảng 5 tuần, tính cho một đội người. Thực tế chưa tới 5 tiếng sau mình đã mở hai tab thấy nhau chạy qua lại, rồi bắn nhau qua mạng được luôn.
Có bot
Yêu cầu của mình với bot là không được ăn gian. Bot chỉ được "bấm phím" giống người, chỉ biết những gì nó thấy với nghe, bị khói che thì cũng không thấy gì.
Vòng đầu thì fail thật sự, bot không biết nhặt súng nên cả trận bắn đúng 0 viên. Sửa lại thì bot biết lục nhà tìm súng, kẹt thì nhảy hoặc lùi, dừng né trước khi bắn. Mixamo không có animation đỡ đồng đội dậy, nên agent xài tạm animation hô hấp nhân tạo, giờ bot làm CPR cho nhau nhìn bựa vãi.
Chơi được rồi thì mình cầm sniper ăn top 1
, top 1 với bot thôi nhưng vẫn vui hehe.
Đưa Sài Gòn vào game
Đang thấy map chán quá, muốn làm nó thú vị hơn nên nghĩ ra chuyện đưa 1 bản đồ ngoài đời vào game, nhờ Claude khảo sát thử. Cái nó check đầu tiên là có được phép dùng không: Google Maps thì cấm, còn OpenStreetMap là bản đồ mở do cộng đồng vẽ, ghi credit là dùng được.
Rồi mình gửi một tin dài, trong đó có câu "let me pick a real-life location in the MVP too", xong đi ngủ. Sáng dậy thấy có 4 cái map lạ hoắc. Vậy thì nhắn luôn "Please build a map called Ngã Tư Hàng Xanh… can we have that feature?", thêm một chỗ ở Phú Nhuận nữa.

Đường là đường thật, chùa Phước Viên, nhà thờ Hàng Xanh, chung cư Mỹ Đức nằm đúng chỗ. Nhà ống hai bên đường thì Claude tự sinh thêm cho đông.
Có một chuyện khá buồn cười. Mình kêu "Remove political names from the map." để tránh mấy địa danh nhạy cảm, xong lại kêu hiện tên mấy đường lớn. Mà đường lớn ở Sài Gòn phần lớn mang tên nhân vật lịch sử, nên Điện Biên Phủ, Xô Viết Nghệ Tĩnh mất tên, còn "Đường nội bộ Khu du lịch Văn Thánh" thì hiện như đường lớn
. Claude có báo trước chỗ mâu thuẫn này, cuối cùng mình giữ tên đường thật.
Lên server
Mình hỏi "How do I play online?" thì Claude viết một bài hướng dẫn rất chi tiết cho người mới, kèm một bộ deploy khá đồ sộ mà chưa chạy thật lần nào. Trước đó agent còn ngồi so giá VPS ở Singapore, trong khi mình có VPS sẵn rồi, chỉ là chưa ai hỏi
.
Phần này thì mình làm quen rồi:
"I already know DevOps. I will SSH into the VPS and do it myself. Just clean up the release document and make it shorter."
Phần hạ tầng từ 419 dòng còn 95. Được nước làm tới, nó cắt luôn file cấu hình mẫu còn 10 cài đặt, mình phải kêu giữ lại. Phức tạp quá thì bảo gọn lại, gọn quá thì bảo giữ lại.
Rồi game cũng lên twobullets.huydang.me:

Đoạn này mình thấy rõ nhất: nếu không biết devops thì mình đã nhận nguyên bộ hạ tầng kia mà không biết nó thừa chỗ nào. Claude giúp mình làm được phần game vì mình có nền software để hiểu nó đang nói gì, còn những gì mình cần đơn giản thì nó lại quá phức tạp, nếu không có chút kiến thức thì cũng sẽ hơi tốn thời gian chỗ này.
Chơi thật thì lỗi thật
Từ lúc chơi với bot tới lúc lên server, mình cứ chơi, chụp màn hình rồi nhắn cho Claude
. Medkit không hồi máu, người chết mà vẫn đứng, súng thì ít quá.
Vụ súng thì Claude đưa số liệu, nói lục 3 căn nhà là gần như chắc chắn có súng. Nhưng người chơi đâu có đo bằng con số, người chơi đo bằng cảm giác mở cửa ra có thấy súng hay không.
Lỗi mất thời gian nhất là màn hình nghiêng. Đang chơi thì tự nhiên cả khung cảnh nghiêng, như nhân vật đang nghẹo đầu:

Claude thử đủ trò mà không tái hiện được, đoán bừa một nguyên nhân rồi sửa, chơi tiếp thì vẫn nghiêng, bực muốn xỉu
. Mấy tiếng sau mình mô tả kỹ hơn:
"The tilt bug happens when I move the mouse left or right from the starting position."
Có câu này thì agent làm lại đúng thao tác, tìm ra lỗi và sửa bằng một dòng code, chưa tới 5 phút.
Còn một kiểu lỗi lặp lại tới 3 lần: tính năng chạy ngon ở chế độ chơi với bot, còn online thì server chưa làm. Lần thứ hai mình còn báo rất dữ:
"After the update, I don't see weapons or equipment on the ground anymore :))) This is a critical bug."
Claude lục 8 phút mới hỏi mình đang chơi chế độ nào. Mà nhờ chữ "critical" nên phần nhặt đồ online được làm luôn trong một buổi tối. Từ đó mỗi lần báo lỗi mình ghi rõ đang chơi chế độ nào, bản đồ nào, vừa làm gì.
Thêm chút chất meme Việt Nam
Game bắn súng mà toàn tiếng Anh thì hơi nhạt. Mình gửi Claude hai file mp3, trinh-la-gi.mp3 phát lúc hết trận hiện hạng, còn chay-di-cac-chau-oi.mp3 phát lúc ném lựu đạn. Cho có chất Việt Nam, với lại tại mình nhây
.
Claude làm cái này nghiêm túc vkl. Tiếng hô phát lúc thả tay chứ không phải lúc rút chốt, bot ném cũng hô, tiếng phát ra từ chỗ con bot đứng, xa thì nhỏ dần, bị tường chắn thì nghe nhỏ lại. Mỗi người còn chỉ được hô một lần, để cả bản đồ khỏi đồng thanh.
Tưởng tượng một con bot núp sau tường ở Hàng Xanh, rút chốt, hét "chạy đi các cháu ơi" trước khi quả lựu đạn lăn tới chân bạn.
Mình cũng nhờ agent tìm model 3D đồ vật đường phố Việt Nam, được 66 món. Có điều mấy món Việt Nam nhất như xe Cub, xe bánh mì, ghế nhựa thì phải đăng nhập Sketchfab mới tải được, còn xe Wave với xích lô thì không có ở đâu cả.
Nặng quá thì cắt
Game càng thêm đồ càng nặng, chơi trên web bắt đầu lag. Mình kêu Claude chỉ giữ Map v1, Hàng Xanh với Phan Đăng Lưu, và thu bản đồ về 500×500 m. Claude cảnh báo 20 người trên bản đồ nhỏ sẽ chật, rồi vẫn làm theo. Game nhẹ hẳn, đổi lại bản đồ Sài Gòn mất luôn con sông vì nó nằm ngoài vùng mới.
Nhớ lúc đầu Claude đề xuất 600 m mà mình chê nhỏ, đòi 1 km không? Cuối cùng còn 500 m, nhỏ hơn cả đề xuất ban đầu
.
Vậy Claude có onboard được mình không?
Được, và tốt hơn mình nghĩ. Lúc đầu mình nghĩ nó làm được nhưng sẽ nhiều lỗi.
Claude làm tốt mấy việc hướng dẫn, nghiên cứu, giải thích, viết code, tìm asset, tối ưu, viết test. Còn cảm giác khi chơi, nhìn bằng mắt thấy chỗ nào xấu hay lag, rồi quyết định giữ gì bỏ gì thì vẫn phải là mình.
Không có kinh nghiệm làm game thì vẫn làm được, nhưng phải có nền và chịu học hỏi rất rất nhiều để có 1 phiên bản production kiểu “sử dụng được” chứ không phải “chạy được”.
Ví dụ LOD (vật ở xa thì vẽ sơ, lại gần mới vẽ kỹ) thì mình hiểu sẵn vì trước có làm cái map 10.000 chỗ cho Skynote. Còn mấy phần như chơi nhiều người qua mạng mà không có nền thì sẽ không hiểu Claude đang làm gì, cũng không biết nó làm đúng hay sai.
Vài lưu ý nếu bạn muốn thử:
Mình dùng gói Claude Max, chạy nhiều agent cùng lúc thì tốn khá nhiều
Máy mình RAM 16 GB, chạy 4–5 agent cùng Chrome là có lúc đơ, agent bị treo
Báo lỗi càng cụ thể càng tốt: chế độ nào, bản đồ nào, thao tác gì
Kêu Claude commit sau mỗi bước, lỡ hỏng thì còn quay lại được
Game giờ vẫn chạy, rảnh thì mình hay rủ mọi người ở công ty vào chơi. PUBG thì xoá rồi, còn twobullets thì vẫn còn
.
Chơi thử: twobullets.huydang.me
Source code: github.com/huydang9/twobullets
Code thì Claude viết hết, còn chỗ nào chưa ổn thì phải là người chơi mới thấy. Mình vẫn không đọc dòng code nào, nhưng tới cuối thì mình biết mình muốn game như thế nào.
Đây là trải nghiệm của mình với một dự án vui vui thôi, mỗi người chắc sẽ thấy khác. Bạn có thử làm cái gì mà trước giờ không biết gì với Claude chưa? Comment chia sẻ với mình nhé 
Bình luận
Đang tải bình luận…
Nhận bài mới qua email
Có bài mới thì mình gửi một email. Không quảng cáo, không spam, hủy lúc nào cũng được.