Tôi đã hoàn thiện một trò chơi bài chỉ trong một cuối tuần

Tôi đã xây dựng một phiên bản trình duyệt của Prší. Đây là một trò chơi bài của Séc. Đây là trò chơi 1v1 đấu với một AI đơn giản. Bạn có thể chơi bằng chuột hoặc màn hình cảm ứng.

Chơi tại đây: https://czsoftcode.github.io/prsi/

Hầu hết mọi người gọi đây là vibe coding. Tôi không đồng ý. Vibe coding thường có nghĩa là bạn mô tả một ứng dụng và chấp nhận bất cứ thứ gì AI đưa cho bạn. Tôi đã sử dụng một phương pháp khác.

Tôi đã sử dụng Claude Code để điều phối quá trình xây dựng thông qua 10 giai đoạn rõ rệt. Mỗi giai đoạn đều có một mục tiêu cụ thể và kết quả đầu ra có thể kiểm chứng được.

Các giai đoạn bao gồm:

  • Thiết lập scaffold cho Vite và TypeScript
  • Xây dựng mô hình dữ liệu (data model) cho game engine
  • Thêm các nước đi cơ bản và các lá bài đặc biệt
  • Tạo logic cho đối thủ AI
  • Xây dựng UI và vòng lặp tương tác
  • Chạy 200 mô phỏng AI end-to-end
  • Triển khai trang web

Tôi đã lập kế hoạch và xem xét từng giai đoạn trước khi chuyển sang giai đoạn tiếp theo. Điều này giúp mã nguồn luôn sạch sẽ. Tôi đã viết khoảng 300 unit tests. Khi AI mắc lỗi, các bài kiểm tra của tôi đã phát hiện ra ngay lập tức.

Phần khó nhất không phải là mã nguồn. Đó là các quy tắc trò chơi.

  • Chồng các lá số 7: Người chơi có thể chồng tối đa bốn lá số 7 để buộc đối thủ phải rút 8 lá bài.
  • Lá Queen vạn năng: Lá Queen làm thay đổi chất bài yêu cầu. Tôi phải đảm bảo engine xử lý việc này một cách chính xác.

Tôi cũng gặp phải những rào cản kỹ thuật:

  • Triển khai: Hình ảnh của tôi bị lỗi trên GitHub Pages do lỗi đường dẫn. Tôi đã khắc phục bằng cách sử dụng base URL của Vite.
  • Quản lý phiên bản: Tôi đã quên cập nhật package.json sau khi gắn thẻ (tagging) một bản phát hành.

Tôi giữ cho AI ở mức đơn giản. Nó chỉ thực hiện các nước đi hợp lệ. Mục tiêu là một AI hoạt động chính xác, chứ không phải một AI thông minh. Tôi đã sử dụng 200 ván đấu mô phỏng để chứng minh rằng trò chơi luôn kết thúc bằng một chiến thắng hoặc một thế hòa.

Việc xây dựng theo từng giai đoạn thay vì dựa vào "vibe" đã cho phép tôi ra mắt một sản phẩm mà tôi thực sự hiểu rõ.

Nguồn: https://dev.to/stkremen/i-shipped-a-card-game-in-a-weekend-but-i-didnt-really-vibe-code-it-34g9

Cộng đồng học tập tùy chọn: https://github.com/czsoftcode/prsi