Tôi đã bị thu hút bởi Thử thách CLI Copilot của GitHub và đưa ra một quyết định đáng ngờ: Tôi biến cơ sở mã của mình thành một ngục tối roguelike.
Nó bắt đầu với một lời nhắc đơn giản: Xây dựng tiện ích mở rộng GitHub CLI trong Go để lấy kho lưu trữ hiện tại và biến nó thành một ngục tối roguelike có thể chơi được, với các ngục tối được tạo bằng BSP [snip]. Và sau đó /yolo .
Kết quả là GitHub Dungeons, một trò chơi đầu cuối tạo ra ngục tối từ cơ sở mã của bạn. Các phòng, hành lang và kẻ thù, tất cả đều được xây dựng từ kho lưu trữ của bạn và hiển thị ngay trong thiết bị đầu cuối của bạn. Bạn điều hướng bằng các phím mũi tên, diệt bọ và tìm lối ra. Đêm
Tôi đã bị thu hút bởi Thử thách CLI Copilot của GitHub và đưa ra một quyết định đáng ngờ: Tôi biến cơ sở mã của mình thành một ngục tối roguelike.
Nó bắt đầu với một lời nhắc đơn giản: Xây dựng tiện ích mở rộng GitHub CLI trong Go để lấy kho lưu trữ hiện tại và biến nó thành một ngục tối roguelike có thể chơi được, với các ngục tối được tạo bằng BSP [snip]. Và sau đó /yolo .
Kết quả là GitHub Dungeons, một trò chơi đầu cuối tạo ra ngục tối từ cơ sở mã của bạn. Các phòng, hành lang và kẻ thù, tất cả đều được xây dựng từ kho lưu trữ của bạn và hiển thị ngay trong thiết bị đầu cuối của bạn. Bạn điều hướng bằng các phím mũi tên, diệt bọ và tìm lối ra. Mỗi kho lưu trữ tạo ra một bản đồ khác nhau. Mỗi cam kết định hình lại bố cục. Và nếu HP của bạn về 0, bạn sẽ bắt đầu lại.
💡 Sự thật thú vị: /yolo (“bạn chỉ sống một lần”) là lệnh CLI Copilot (bí danh của /allow-all). Phù hợp, vì roguelike được xây dựng xung quanh permadeath. Bạn thực sự chỉ có được một cuộc sống.
Roguelikes quay lại những trò chơi như Rogue vào những năm 1980 – những cuộc phiêu lưu dựa trên thiết bị đầu cuối, trong đó mỗi lần chạy sẽ tạo ra một ngục tối mới và cái chết có nghĩa là phải bắt đầu lại.
Sự kết hợp giữa việc tạo thủ tục, permadeath và giao diện dựa trên văn bản (sau này được chính thức hóa trong những thứ như “Giải thích Berlin”) làm cho thể loại này có cảm giác hiện đại một cách đáng ngạc nhiên và hoàn toàn phù hợp với dòng lệnh.
GitHub Dungeons dựa vào truyền thống đó. Nó được viết bằng Go, ngôn ngữ mà tôi thường không sử dụng, nhưng làm việc với Copilot có nghĩa là tôi có thể tập trung vào hành vi thay vì cú pháp.
Tạo thủ tục là gì?
Tạo thủ tục (hay “procgen” như cách gọi của những đứa trẻ sành điệu) là một cách tạo nội dung theo thuật toán thay vì thiết kế nội dung bằng tay. Trong trò chơi, điều đó thường có nghĩa là cấp độ, bản đồ, kẻ thù hoặc vật phẩm được tạo trong thời gian chạy bằng cách sử dụng một bộ quy tắc cộng với một chút ngẫu nhiên.
Vì vậy, thay vì thiết kế một ngục tối, bạn thiết kế một hệ thống tạo ra nhiều ngục tối.
Đó là điều mang lại cho roguelike khả năng chơi lại:
Mỗi lần chạy đều khác nhau
Bố cục thay đổi mỗi lần
cái gì đó
cái gì đó
Trong GitHub Dungeons, hệ thống đó được gắn với kho lưu trữ của bạn. Bố cục được tạo theo cam kết mới nhất của bạn, do đó, cùng một mã sẽ tạo ra cùng một ngục tối và mọi thay đổi sẽ định hình lại nó.
Vậy làm thế nào mà một kho lưu trữ thực sự trở thành một ngục tối?
Ở cấp độ cao, bố cục GitHub Dungeon được tạo bằng cách sử dụng Phân vùng không gian nhị phân (BSP), được tạo ra bởi cam kết SHA mới nhất của kho lưu trữ của bạn (sẽ nói thêm về BSP sau). Điều đó có nghĩa là cùng một cơ sở mã sẽ tạo ra bố cục nhất quán trong khi vẫn phát triển khi mã thay đổi.
Trong thực tế:
Cùng một cam kết luôn tạo ra cùng một bản đồ
Các kho lưu trữ khác nhau tạo ra các bố cục có cấu trúc khác biệt
Khi mã thay đổi, ngục tối sẽ phát triển theo nó
Đó là quá trình tạo thủ tục—nhưng được gắn trực tiếp với cơ sở mã của bạn. Đó là ý tưởng.
Phần thú vị thực sự là việc xây dựng nó.
Xây dựng nó với Copilot CLI
Làm việc với GitHub Copilot CLI có nghĩa là mô tả hành vi thay vì viết mọi thứ từ đầu. Một lệnh tạo ra sự khác biệt lớn là /delegate. Thay vì chỉ tạo mã nội tuyến, /delegate giao nhiệm vụ cho tác nhân mã hóa Copilot của GitHub chạy trên đám mây.
Tôi có thể mô tả những gì tôi muốn bằng tiếng Anh đơn giản, bắt đầu và sau đó làm việc khác trong khi nó hoạt động độc lập. Khi hoàn tất, nó mở một yêu cầu kéo kèm theo kết quả.
Ví dụ:/đại biểu Làm cho mỗi cấp độ ngày càng khó hơn, ví dụ: ở cấp độ 2 có thêm kẻ xấu, nhưng có nhiều bình máu hơn
Phi công phụ đã tạo ra đường chuyền đầu tiên chắc chắn một cách không đồng bộ và tôi đã xem xét và điều chỉnh PR từ đó cho đến khi cảm thấy có sự cân bằng phù hợp. Tôi đã áp dụng cách tiếp cận tương tự với các tính năng khác như thêm mã gian lận khiến người chơi trở nên bất khả chiến bại (vì tại sao không).
Tôi thậm chí còn nhờ Copilot tạo ra một tác nhân “người ghi chép ngục tối”, một người trợ giúp nhỏ bổ sung tài liệu và sơ đồ nghệ thuật ASCII để giải thích cách tạo ra các ngục tối, điều này mang lại cảm giác rất phù hợp với một thiết bị đầu cuối roguelike.
Tôi thậm chí còn nhờ Copilot tạo một tác nhân ghi chép ngục tối để tạo tài liệu và giải thích cách tạo ra các ngục tối bằng sơ đồ nghệ thuật ASCII, điều này mang lại cảm giác rất phù hợp cho một thiết bị đầu cuối roguelike.
Sử dụng Copilot (đặc biệt là với /delegate) giống như có sẵn một đội quân NPC để làm bất cứ điều gì tôi muốn họ làm.
Lee Reilly, Chủ ngục tối
Làm việc theo cách này (mô tả các tính năng, ủy quyền cho Copilot và xem xét các yêu cầu kéo kết quả) có nghĩa là tôi có thể dành ít thời gian hơn cho các trường hợp khó khăn và bản soạn sẵn, đồng thời có nhiều thời gian hơn cho trải nghiệm của người chơi, bao gồm cả việc thêm trứng Phục sinh để người chơi khám phá. Việc lặp lại với Copilot cho phép tôi duy trì tư duy thiết kế trò chơi thay vì liên tục chuyển sang chi tiết triển khai. Bởi vì Copilot đang xử lý hầu hết công việc xây dựng và giàn giáo nên tôi có thể tham gia vào quá trình thiết kế cơ chế, thử nghiệm ý tưởng và tìm ra điều gì thực sự khiến trò chơi trở nên thú vị.
Các mức được tạo theo thủ tục (với BSP)
Trọng tâm của mỗi thiết kế ngục tối là một kỹ thuật được gọi là Phân vùng không gian nhị phân (BSP), đây là một kỹ thuật tuyệt vời mà bạn có thể ngẫu nhiên đề cập cùng với việc nén từ giữa ra nếu bạn muốn gây ấn tượng với bạn bè và đồng nghiệp của mình. Nghe có vẻ đáng sợ nhưng ý tưởng lại đơn giản đến bất ngờ: tiếp tục chia không gian thành nhiều phần nhỏ hơn cho đến khi bạn có nhiều phòng có thể kết nối.
Tại sao BSP hoạt động rất tốt cho roguelike
Roguelike cần những bản đồ mang lại cảm giác:
Có cấu trúc (không phải hoàn toàn vô nghĩa ngẫu nhiên)
Có thể chơi lại (khác nhau mỗi lần chạy)
Có thể điều hướng (không có ngõ cụt hoặc bố cục bất khả thi)
BSP đạt được một điểm ngọt ngào. Nó mang lại cho bạn:
Phòng hình chữ nhật sạch sẽ
Kết nối được đảm bảo
Vừa đủ ngẫu nhiên để cảm thấy tự nhiên
Đây là cách nó hoạt động…
1. Bắt đầu với một khoảng trống lớn
Mọi thứ bắt đầu như một hình chữ nhật lớn: toàn bộ ngục tối của bạn.
2. Chia nó (đệ quy)
Chúng tôi chia không gian thành hai khu vực.
Sau đó chia chúng lại.
Và một lần nữa.
Mỗi phần chia có thể theo chiều ngang hoặc chiều dọc.
3. Dừng lại khi nó quá nhỏ
Chúng tôi tiếp tục chia nhỏ cho đến khi các vùng quá nhỏ để vừa với một căn phòng.
Điều đó tạo ra một loạt “l
Nguồn tin: GitHub AI Blog — Tác giả: Lee Reilly. Bản dịch tiếng Việt do AI thực hiện, có thể có sai sót.