45 điểm bởi GN⁺ 2025-07-05 | 3 bình luận | Chia sẻ qua WhatsApp
  • 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

 
softer 2025-07-07

Có vẻ sẽ là một tài liệu tham khảo tốt.

 
ifmkl 2025-07-06

Tôi cũng đang chăm chỉ tận dụng AI để làm một trò chơi web.

 
GN⁺ 2025-07-05
Ý 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 print như 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

    • Tôi chạy trên Chrome của Android thì bubble không nổ đúng cách và bộ đếm cũng không tăng khỏi 0
      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.md
    Ví dụ, EnergySystem.ts đã có mặt ngay từ commit đầu, nhưng trong PROMPTS.md về sau lại trông như thể AI tạo ra nó từ đầu
    Tô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

    • Vì dự án này là bài dự thi game jam với hạn chót 1 tuần, nên trong 2–3 ngày đầu tôi không dùng source control, thành ra phần việc của giai đoạn đó được để lại thành một commit lớn duy nhất
      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.md
      Nế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.ts là 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 xong
  • Tô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

    • Nhân tiện bổ sung cho câu hỏi này, tôi cũng muốn nghe OP nói rõ liệu có dùng Augment Code trong Cursor hay không, tổ hợp đó hoạt động như thế nào và có lợi ích gì
      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