Tôi đã dùng AI để lập trình một game tower defense và ghi chép toàn bộ quy trình
(github.com/maciej-trebacz)- Dù là kỹ sư phát triển phần mềm với 20 năm kinh nghiệm, đây là lần đầu tiên tác giả hoàn thành game tower defense "Tower of Time" dựa trên Phaser.js bằng cách sử dụng AI coding agent
- Mục tiêu là thử nghiệm khả năng phát triển game thực tế của AI, đồng thời tài liệu hóa mã nguồn, toàn bộ prompt AI và quy trình làm việc trên GitHub
- Hơn 95% mã nguồn được AI viết, kết hợp nhiều công cụ AI như Augment Code, Cursor, Claude Sonnet 4
- Game mang lại trải nghiệm thú vị riêng với tính chiến thuật dựa trên tính năng tua ngược thời gian, nhiều loại tháp, hệ thống quản lý năng lượng và kẻ địch xuất hiện theo từng wave
- Livestream theo thời gian thực, việc tận dụng asset đồ họa và âm thanh, cùng các bài học và mẹo thực chiến trong quá trình phát triển khiến dự án trở thành tài liệu học tập hữu ích cho cả người mới với game lẫn AI
Tổng quan về Tower of Time
- Dự án này được thực hiện với mục tiêu thử nghiệm xem liệu có thể phát triển game thực tế bằng công cụ AI coding hay không
- Tác giả lần đầu học game engine Javascript là Phaser.js, tham gia Beginner's Jam Summer 2025 và hoàn thành 'Tower of Time' trong 25–30 giờ
- Toàn bộ quá trình phát triển, mọi prompt, mã nguồn, tài liệu và link chơi thử đều được ghi lại trên GitHub
Giới thiệu game
- Tower of Time là một game tower defense theo chủ đề du hành thời gian, nơi người chơi ngăn chặn kẻ địch kéo đến theo từng wave và có thể tua ngược thời gian để thiết kế lại chiến thuật khi gặp tình huống nguy cấp
- Game kết hợp nhiều loại tháp (cơ bản, sniper, làm chậm, splash, v.v.) với hệ thống năng lượng (dùng để xây tháp và tua ngược thời gian)
- Các đặc điểm chính
- Tua ngược thời gian: ở thời điểm bất lợi, có thể quay lại trạng thái trước đó để sắp xếp lại chiến thuật phòng thủ
- Đa dạng tháp: có thể xây dựng nhiều chiến lược phòng thủ khác nhau bằng cách bố trí các tháp với đặc tính riêng
- Quản lý năng lượng: yếu tố quản lý tài nguyên buộc người chơi cân nhắc kỹ cách sử dụng năng lượng
- Cách điều khiển
- Hỗ trợ bàn phím/gamepad (di chuyển: phím mũi tên/cần analog, hành động: Space/nút gamepad, tua ngược: Backspace/trigger)
Thử nghiệm AI coding và quá trình phát triển
- Khoảng 95% toàn bộ mã nguồn được viết bằng AI (Claude Sonnet 4, OpenAI, Augment Code, Cursor, v.v.)
- Mọi prompt chính, các lần thử sai và kết quả cuối cùng đều được lưu trong repository dưới dạng PROMPTS.md
- Ưu điểm của tự động sinh mã bằng AI: tạo prototype nhanh, tự động hóa công việc lặp lại, dễ tài liệu hóa
- Giới hạn và điểm cần lưu ý: AI có xu hướng tạo quá nhiều mã, khi phát sinh vấn đề triển khai cụ thể thì cần thiết kế lại prompt hoặc rollback, và nên tận dụng log debug
Bài học rút ra từ quá trình phát triển
- Chỉ với AI coding cũng hoàn toàn có thể tạo ra một game thú vị
- Chất lượng prompt, việc cung cấp ngữ cảnh rõ ràng và chiến lược debug là cực kỳ quan trọng
- Cần liên tục kiểm tra để tránh làm tăng lượng mã không cần thiết
Tech stack
- Engine: Phaser 3 (v3.90.0) + Phaser Editor v4
- Ngôn ngữ: TypeScript
- Công cụ build: Vite
- Art asset: itch.io, một phần được chỉnh sửa thủ công
- Âm thanh: freesound.org
Chơi thử trên trình duyệt: Tower of Time
3 bình luận
Có vẻ sẽ là một tài liệu tham khảo tốt.
Tôi cũng đang chăm chỉ tận dụng AI để làm một trò chơi web.
Ý kiến trên Hacker News
Đọc lần lượt các prompt được dùng trong quá trình phát triển khá thú vị
Các bài viết về “ca thành công của vibe coding” thường tạo ra ảo tưởng như thể chỉ cần nhiều agent, dàn điều phối code phức tạp, và các rule do LLM tạo ra là có thể làm ra ngay một trò chơi chỉ với một dòng prompt kiểu “hãy tạo game thủ thành tua ngược thời gian, không lỗi, không bug”
Nhưng các prompt thực sự được dùng trong dự án này lại khớp với cách làm hiệu quả nhất cho AI coding
Chia một ý tưởng rõ ràng và được suy nghĩ kỹ thành hàng trăm vấn đề nhỏ, rồi đưa ra hướng dẫn kiến trúc cụ thể cho những phần thực sự quan trọng là cách làm hiệu quả
Với vai trò vừa là tech lead vừa là product owner, tôi thấy cách này cũng là bài bản chuẩn khi làm việc với con người
70% công việc của tôi là biến yêu cầu trừu tượng kiểu “game tháp thời gian, không bug” từ cấp điều hành thành một chuỗi prompt có chứa tầm nhìn kiến trúc mạnh mẽ trong ngữ cảnh, để đội ngũ có thể làm việc không chồng chéo mà vẫn giữ được mức trừu tượng cao
Tôi thử làm một game HTML đơn giản cho board game Just One, nhưng dù liên tục prompt cho bốn LLM khác nhau thì vẫn không sửa nổi bug ô nhập liệu bị di chuyển
Ai cũng nói là làm game một phát xong luôn, còn tôi thì đến cả chuyện textbox bị xê dịch cũng không sửa nổi nên thấy thật lạ
Sau prompt kiểu “không có lỗ hổng bảo mật, không bug”, nhất định còn phải thêm cả “không hallucination”
Điều kiện cơ bản cho người mới dùng AI
Cách của tôi để AI coding hoạt động tốt là dùng AI tạo phần tính năng cơ bản hoặc bộ khung gameplay theo kiểu ‘one-shot’, rồi lặp lại nhiều lần để đắp tiếp lên trên
Nếu kết quả one-shot ban đầu chưa đủ ấn tượng thì tôi đổi prompt ngay để vá tiếp, thử lại cho đến khi có nền tảng ổn thì thôi
Tôi hoàn toàn đồng ý với cách này
Thực tế, bài viết gần đây của tôi cũng dựa trên khái niệm đó
Nếu để AI viết spec trước khi code, gánh nặng phải tự tay viết spec từ đầu của con người giảm đi nhiều, nên khả năng spec thực sự được viết ra cũng cao hơn hẳn
Sau hơn 20 năm trong ngành phần mềm, tôi cảm nhận rằng phần lớn đồng nghiệp của chúng ta vẫn khá hoài nghi với AI coding
Gần đây tôi chủ yếu phát triển một ứng dụng lớn cỡ 34.000 dòng bằng AI, và hiệu quả trong quá trình đó tăng theo cấp số nhân tùy vào chất lượng chỉ dẫn tôi đưa ra, cấu trúc tương tác, và mức độ tôi để tâm đến đầu ra của nó, bao gồm cả việc hiệu chỉnh giữa chừng
Gần như có cảm giác “rốt cuộc cũng giống mọi công cụ khác thôi!”
Nhưng công cụ này có đòn bẩy thật sự lớn hơn gấp 10 lần so với bất kỳ “công cụ 10x” nào tôi từng gặp
Điều mà đa số người hoài nghi bỏ lỡ là không thể xem các công cụ này như một thực thể hoàn toàn ở bên ngoài mình
Nếu bạn mô tả mục tiêu mơ hồ rồi giao phó hết, bạn sẽ nhận trái đắng
Có thể một ngày nào đó AI sẽ đọc được suy nghĩ của chúng ta ngay lập tức, nhưng hiện giờ thì chưa
Ở thời điểm này, giá trị lớn nhất của nó là giúp ta sắp xếp suy nghĩ cho rõ ràng, học cái mới, và xử lý nhanh những phần phiền phức
Muốn tận dụng đòn bẩy tối đa thì phải hòa công cụ này vào chính quá trình tư duy của mình
Tôi có nhiều năm kinh nghiệm lập trình nhưng từ thời trung học chỉ từng làm mỗi Hunt the Wumpus, gần đây mới bắt đầu tạo game mới với sự trợ giúp của AI
AI đảm nhiệm ba vai trò chính
(1) Công cụ học tập - đây là vai trò quan trọng nhất vì dù tôi không biết thuật ngữ, nó vẫn hiểu khá đúng ý tôi hỏi để chỉ ra điểm khởi đầu, và còn cho tôi biết cả những điều “tôi không biết là mình chưa biết”
(2) Xử lý việc lặp lại hoặc nhàm chán - như chú thích code, viết file cấu hình, những việc tôi cũng có thể tự làm nhưng sẽ làm chậm tiến độ thì nó xử lý khá ổn
(3) Tìm kiếm - tương tự mục (1), AI hiểu được tôi thật sự muốn gì rồi đảm nhiệm phần lọc hay gợi ý
Bạn có thể giao cho AI việc “suy nghĩ”, nhưng không nhất thiết phải làm vậy
Nó không thông minh hơn con người, chỉ là một dạng FPU nhanh hơn và biết nhiều hơn mà thôi
Nếu xét theo chuẩn HN thì tôi thuộc phe khá hoài nghi, nhưng trên thực tế tôi vẫn liên tục thúc đẩy việc đưa AI vào công ty, và ngay lúc này cũng đang nhờ Claude làm gì đó trong khi viết bình luận này
Lý do của sự hoài nghi là khoảng cách giữa cách các giải pháp AI hiện tại “được đem đi bán” và việc chúng thực sự làm được
Tất cả các giải pháp AI, đặc biệt là agent, nếu không có người thành thạo hướng dẫn thì chỉ cho ra kết quả vô dụng
Yếu tố thực sự “tự chủ” trong đó gần như không có
Ngay cả người đặt ra thuật ngữ ‘vibe coding’ cũng nói rằng ngành đang làm ngược thứ tự
Những công cụ này rất tuyệt, nhưng bỏ qua thực tế rằng chúng cần bị kiểm soát rất chặt thì về cơ bản là không trung thực
Vài tháng gần đây, suy nghĩ của tôi cũng đi đến kết luận tương tự
Trước đây tôi từng để lại bình luận khá chỉ trích AI, nhưng các công cụ mới nhất rõ ràng đã tiến bộ rất nhiều
Những việc trước kia mất vài tuần giờ có thể làm gọn trong vài giờ
Tuy nhiên, bạn vẫn phải nghĩ prompt cho kỹ, chia nhỏ chi tiết, và tích hợp tốt với IDE
Phần mang tính đột phá nhất là khi làm việc với thư viện hay framework hoàn toàn mới
Trước đây tôi thường tra cách dùng rồi sửa ví dụ mẫu, còn AI thì cho ra cách tiếp cận trực quan hơn và đa dạng hơn rất nhiều, nhiều lúc khiến tôi thật sự bất ngờ
Với những người vẫn còn hoài nghi, đây là thời điểm nên thử lại một lần
Một ví dụ về đòn bẩy 10x là ngôn ngữ lập trình
Trước kia người ta nói Lisp các kiểu giúp làm được nhiều việc hơn và nhanh hơn, còn bây giờ thì có thể giảm lượng code thực sự phải viết mà vẫn tạo ra sản phẩm bằng ngôn ngữ nhanh và hiệu năng cao
Tuy nhiên, có một ‘cái bẫy’ là bạn phải rà soát rất kỹ những phần mã sinh ra mà không thể kiểm chứng dễ dàng
Cũng giống như các ngôn ngữ có sức biểu đạt cao từng khiến những người không có kế hoạch từ trước tạo ra những codebase hỗn loạn, điều đó nhiều khả năng cũng sẽ lặp lại với công cụ AI
Nhưng phần thực sự giúp tôi tiết kiệm thời gian không phải là viết code mới hoàn toàn, mà là tích hợp hoặc cải thiện code cũ với code mới
Có một bước nhảy lớn ở mảng gỡ lỗi
Thay vì chỉ cắm
printnhư ngày xưa, giờ tôi có thể chỉ cần copy-paste code rồi hỏi AI kiểu “đầu ra không như thế này mà lại như thế kia, vì sao vậy?”, và nhanh chóng nhận được nguyên nhân lẫn phương án thay thếĐặc biệt với các công việc khó gắn debugger như SQL, IaC, hay script build, cách này là một lợi thế cực lớn
Ngoài ra còn một điểm nữa là đường cong học tập và mức trần độ khó cao hơn nhiều so với tưởng tượng
Kết quả khi dùng Claude Opus như một framework tự động hóa phức tạp khác hẳn với việc chỉ copy/paste vào GPT-4o trên trình duyệt
Tôi đã gắn star trên GitHub vì rất thích việc tác giả công khai minh bạch quá trình phát triển và còn chia sẻ cả prompt
Cả code lẫn thành phẩm đều rất đẹp
Chắc chắn không phải chỉ dùng AI mà còn có rất nhiều phần do chính bạn trực tiếp tham gia
Tôi đã bỏ code khá lâu, rồi theo lời bạn bè thử làm vài thứ đơn giản có dùng AI
Những gì tôi hoàn thành được chỉ là trò bóp nổ bubble wrap và một cái tắt âm thanh kiểu bấm nút là im luôn
Bubble Popper
Silencer
Không biết bạn có định nhận PR không
Game indie có vẻ chính là một trường hợp sử dụng rất tốt cho coding AI
Rủi ro thấp và tính chất thiên về vui vẻ của nó cực kỳ phù hợp
Commit đầu tiên có chứa rất nhiều code, nhưng lại chưa có
PROMPTS.mdVí dụ,
EnergySystem.tsđã có mặt ngay từ commit đầu, nhưng trongPROMPTS.mdvề sau lại trông như thể AI tạo ra nó từ đầuTôi muốn hỏi liệu bạn có thể giải thích chi tiết hơn phần này trong lịch sử repository không
Liên kết commit đầu tiên
Tôi cũng không ghi prompt ngay tại chỗ, mà sau khi hoàn thành game mới lục lại lịch sử các công cụ chat đã dùng rồi copy vào file
PROMPTS.mdNếu muốn xem quá trình tạo ra dự án, cách tốt nhất là đọc file prompt từ đầu đến cuối
Ví dụ, file
EnergySystem.tslà phần được AI tạo hoàn toàn mới bằng prompt kiểu “tôi muốn triển khai một subsystem năng lượng”, sau khi các phần như tìm đường cho địch, spawn, bắn tháp các thứ đã được làm xongTôi mới nghe đến công cụ tên Augment Code lần đầu
Tôi muốn biết nó làm gì, vì sao bạn chọn nó, nó khác các công cụ cạnh tranh ở điểm nào, trải nghiệm dùng thực tế ra sao, và bạn có khuyến nghị nó không
Cũng tò mò là bạn có trả phí cho cả hai không
Việc ghi lại prompt thật ấn tượng và tạo động lực
Theo kinh nghiệm của tôi, ‘vibe coding’ có lúc tiến rất nhanh, cũng có lúc chậm đến vô tận
Nếu có chỉ dẫn ngắn gọn và rõ ràng, review code nhanh, cùng khả năng nắm kiến trúc tốt, thì nó thật sự có thể tăng tốc độ phát triển
Tôi cũng từng làm một game thủ thành, và gần đây có nghĩ đến chuyện dùng AI cho cả việc tạo wave mới lẫn tinh chỉnh cân bằng
Để AI có thể ‘cảm nhận’ được trò chơi, có lẽ cần một giao thức mã hóa trạng thái game đang hiển thị trên màn hình thành token
Bao gồm địa hình, vị trí các entity trong game, và các thuộc tính khác mà người chơi có thể nhìn thấy
Đưa toàn bộ mọi thứ vào autoencoder có vẻ không hay, nhưng token hóa thành danh sách theo từng yếu tố game thì có lẽ khả thi
Nếu game engine cung cấp hình ảnh màn hình và bung token trực tiếp cho AI, AI có thể hiểu sâu hơn về trạng thái thực tế của tiến trình chơi game
Tôi chưa chắc sẽ cần bộ dữ liệu huấn luyện cỡ nào để tận dụng tốt các token như vậy, nhưng biết đâu với không gian embedding hiện tại thì chỉ cần vài token là đủ biểu diễn
Nếu có một tập huấn luyện gồm log game và đánh giá độ vui của người dùng, có lẽ sẽ rút ra được rất nhiều dữ liệu thú vị
Việc tìm ra các cụm sở thích người chơi để tạo game phù hợp với nhiều kiểu khác nhau cũng sẽ trở nên khả thi
Cảm ơn vì đã chia sẻ workflow kiểu này
Tôi cũng đang nghĩ cách đưa khả năng truy vết và tính minh bạch vào workflow dùng LLM của mình
Nếu prompt được chia sẻ và lưu lại thành lịch sử, ta có thể nhìn một mạch từ vấn đề cốt lõi mà nhà phát triển ban đầu định giải quyết, cho đến cách nó thay đổi và cả những vấn đề mới nảy sinh sau đó
Dự án rất ngầu
Bài viết về sử dụng LLM có trách nhiệm
Tôi đã làm trong giới công nghệ hơn 20 năm, và gần đây đang thử nghiệm đủ thứ bằng cách game hóa công cụ kiểm thử tích hợp cho ứng dụng enterprise với Gemini-cli
Khi kết hợp với MCP server, tôi thấy kết quả tốt nhất đến từ việc chia vấn đề thành từng bước và làm cho prompt rõ ràng hơn
AI có thể mắc lỗi hoặc rơi vào vòng lặp, nhất là ở những chỗ như routing của ứng dụng, nên khi đó tiếp cận theo kiểu ‘pair programming’ chủ động sẽ rất hữu ích
Một điều nữa tôi nhận ra là các nguyên tắc như không được trùng lặp code giờ dễ giữ hơn nhiều so với trước đây
Nếu không, rất dễ xảy ra tình huống AI chỉ sửa một phần mà bỏ sót các file liên quan
Đây là chân lý không chỉ áp dụng cho logic lập trình mà còn cho cả UX và hành vi của ứng dụng
Làm cùng AI, những việc ngày xưa mất hàng tuần giờ có thể hoàn thành vui vẻ chỉ trong vài giờ
Việc có thể gán cá tính cho Gemini và mang file
GEMINI.mdđi tinh chỉnh y nguyên trên nhiều thiết bị là một lợi thế rất lớn