paint-brush
Cách tôi để AI viết mã trò chơi cho mình!từ tác giả@lukaszwronski
16,827 lượt đọc
16,827 lượt đọc

Cách tôi để AI viết mã trò chơi cho mình!

từ tác giả Łukasz Wroński2022/06/29
Read on Terminal Reader
Read this story w/o Javascript

dài quá đọc không nổi

Tôi đang cố gắng tìm hiểu xem liệu tôi có thể viết toàn bộ bản sao Space Invaders chỉ bằng mã do AI viết hay không. Tôi đã sử dụng Copilot để thử nó. Mất 2 giờ để xây dựng trò chơi với một số vấn đề lớn, nhưng nhìn chung cuộc thử nghiệm đã thành công. Bạn có thể xem cuộc đấu tranh của tôi trong một đoạn video dài 2 giờ được đính kèm với bài viết này.

Company Mentioned

Mention Thumbnail
featured image - Cách tôi để AI viết mã trò chơi cho mình!
Łukasz Wroński HackerNoon profile picture


Gần đây, tôi đã phát hiện ra rằng Github Copilot, một AI giúp viết mã bằng cách đề xuất toàn bộ các đoạn trích (thường chỉ dựa trên các nhận xét bằng ngôn ngữ tự nhiên), hiện đã có sẵn như một dịch vụ thương mại. Không cần đợi để có quyền truy cập beta nữa, tôi đã tự đăng ký bản dùng thử miễn phí hai tháng.


Tôi phải nói - kỳ vọng của tôi rất cao. Tôi đã chơi một chút với API OpenAI trước đây. Tôi tin rằng nó sử dụng cùng một mô hình với Copilot, vì vậy tôi biết nó có thể là một trải nghiệm thú vị. Tôi đã cài đặt nó dưới dạng tiện ích mở rộng Visual Studio Code và bắt đầu tự hỏi tôi nên thử thách đồng nghiệp ảo mới của mình như thế nào.

Hãy để cuộc chơi bắt đầu


Đọc một số bình luận và bài báo của cộng đồng, tôi thấy rằng một trong những lợi thế của Copilot là AI này biết nhiều ngôn ngữ lập trình, khuôn khổ và API hơn bất kỳ nhà phát triển flash và xương sống nào hiện nay. Rốt cuộc, nó học cách sử dụng mọi kho lưu trữ GitHub công khai từng tồn tại. Nó có thể không chỉ là một công cụ năng suất. Nó cũng có thể là một cách tương tác để khám phá những điều mới.


Trong khi mong muốn sử dụng nó theo cách này, tôi đã quyết định xây dựng một trò chơi. Một bản sao của Space Invaders có vẻ là một lựa chọn thích hợp, nhưng để làm cho điều này thú vị hơn, tôi đã đưa ra một vài giả định:


  1. Tôi sẽ sử dụng Python - một ngôn ngữ mà tôi biết rõ và chỉ sử dụng nó theo thời gian để giải quyết các thách thức CTF
  2. Tôi sẽ sử dụng PyGame - một thư viện mà tôi đã tìm hiểu hơn mười năm trước để xây dựng một dự án học thuật nhỏ
  3. Tôi sẽ không chuẩn bị theo bất kỳ cách nào - cứ theo dòng chảy
  4. Tôi sẽ không tự viết một dòng mã nào - hy vọng Copilot của tôi sẽ viết tất cả cho tôi


Tôi đã đặt ghi màn hình, bật micrô của mình để thực hiện một bài bình luận nhỏ, khởi động Visual Studio và vừa viết yêu cầu đầu tiên của mình:


"""main function for a pygame"""


Copilot bắt đầu đưa cho tôi những dòng mã, hết dòng này đến dòng khác. Tôi vừa tự nhập tab qua danh sách đề xuất chấp nhận hàng tấn hàng nhập khẩu. Khi bắt đầu say mê, tôi nhanh chóng thấy mình bị mắc kẹt trong một vòng lặp vô hạn của việc thêm đi lặp lại hai dòng mã giống nhau. Không tốt.


Khởi đầu tồi tệ, tôi nhanh chóng nhận ra rằng mình đang cố gắng làm quá nhiều, quá nhanh. Yêu cầu Copilot thêm nhập PyGame trước và sau đó để tạo một chức năng hiển thị cửa sổ đã thực hiện một mẹo nhỏ.

Tại thời điểm đó, tôi cũng nhận ra rằng bằng cách đưa ra yêu cầu của mình chính xác hơn, tôi có thể cải thiện kết quả. Trong khi viết


"""create a function showing a game window"""


Tôi đã làm cho nó hoạt động ngoại trừ thực tế là nó hiển thị chỉ trong một giây và sau đó ngay lập tức thoát ra. Sau đó, tôi tưởng tượng rằng tôi cần phải rất thẳng thắn về những kỳ vọng của mình. Thay đổi nó thành


"""create a function showing a game window and then left it open"""


Copilot đã mở rộng mã thêm một vòng lặp trò chơi cơ bản ngăn cửa sổ đóng lại.


Có vẻ như tôi và bạn thân bắt đầu liên lạc với nhau. Tốt đẹp!

Bướm đêm trong dạ dày của tôi

Bước tiếp theo là tạo một lớp phi thuyền. Tôi đã tạo một lớp trong một tệp riêng biệt, lại bắt đầu viết một yêu cầu khác và tìm thấy một thứ thú vị khác. Hóa ra Copilot không chỉ gợi ý mã mà còn cả nội dung của các bình luận mà tôi đang viết. Tôi đã bắt đầu yêu cầu sử dụng các phím mũi tên để di chuyển tàu vũ trụ của mình và nó gợi ý cả một câu.


Copilot không chỉ viết mã, mà còn gợi ý những gì bạn có thể muốn nó làm


Tôi phải nói rằng tôi hơi nghi ngờ liệu Copilot có thực sự hiểu những gì đang diễn ra trong dự án hay không. Phân tích mã trong một tệp hiện đang được chỉnh sửa là một chuyện. Tìm ra cách các tệp này được kết nối với nhau là một ấm cá khác.


Copilot nói: "Tôi đã bảo vệ bạn". Nó nhận biết được các lớp trong các tệp khác và không thành vấn đề khi sử dụng phi thuyền trong lớp trò chơi của chúng tôi. Copilot cũng phát hiện ra rằng chúng tôi đã xác định kích thước cửa sổ trò chơi cụ thể và sử dụng nó trong khi định vị con tàu vũ trụ ở dưới cùng giữa màn hình.

Bạn phải nghĩ - "công cụ này thật tuyệt vời". Đúng?


Đại khái là vậy, nhưng mối quan hệ của chúng tôi không chỉ có ánh trăng và hoa hồng. Một số vấn đề nhỏ nhặt, chẳng hạn như logic không cần thiết trong các hàm mà tôi đã yêu cầu Copilot viết cho tôi. Một số đề xuất đã bị trì hoãn và tôi đã mất một chút thời gian chờ đợi chúng.


Đôi khi tôi cũng nản lòng vì những sai lầm của chính mình. Tôi đã để lại nhận xét rằng hàm sẽ trả về số 0 ở đầu tệp, và sau đó viết một nhận xét khác bên dưới Tôi đã tìm ra lý do tại sao Copilot đang cố gắng trả về số 0 ở cuối hàm của tôi. Nhưng nó chẳng là gì so với vấn đề mà tôi đã mất gần một giờ để giải quyết.


Tôi đang tìm cách đặt con tàu vào đúng vị trí và đặt kích thước của nó thành kích thước 50x50 pixel. Tôi đã cố gắng hình thành nhận xét của mình theo nhiều cách. Luôn nhận được cùng một kết quả. Mã không hoạt động vì Copilot quyết định sử dụng các phương pháp không tồn tại trong PyGame.

Bướng bỉnh như một con la nó đang cố gắng gọi set_size và set_center trên đối tượng sprite đã tải của tôi, mỗi lần nhận được:


AttributeError: 'pygame.Surface' object has no attribute 'set_size'


Vô số lần tôi đã cố gắng diễn đạt lại yêu cầu của mình nhưng luôn nhận được mã không hoạt động. Soooo bực bội.


Tại một số thời điểm, tôi thậm chí đã nghĩ rằng mình nên ngừng ghi âm và quên nó đi. Ghi nhãn Copilot là không phù hợp với mục đích này và kết thúc thử nghiệm. Tuy nhiên, tôi cảm thấy phải có một cách để vượt qua điều này.

Đó không phải là bạn, đó là tôi

Tôi nghĩ rằng làm việc với Copilot, tôi có thể quên các tài liệu, nhưng hóa ra đó là lỗi của tôi khi không hiểu những điều cơ bản về PyGame. Tôi không hiểu khái niệm Rect giúp di chuyển các đối tượng trên cảnh. Tôi không hiểu cách sử dụng các lớp tiện ích để mở rộng quy mô sprite của mình.

Tìm thấy thông tin đó trong tài liệu đã phá vỡ câu thần chú. Tôi đã có thể đề xuất một chiến lược khác Copilot tách sprite được biểu thị dưới dạng đối tượng Surface khỏi Rect và chuyển chúng riêng biệt ra màn hình.


Phần còn lại của khóa học này là hòa bình của bánh. Tôi càng tạo ra nhiều mã, Copilot càng thông minh hơn. Thật kỳ diệu khi nó đọc được suy nghĩ của tôi và khiến những viên đạn và người ngoài hành tinh di chuyển theo đúng hướng. Đó là một miếng bánh để thêm một bộ đếm điểm số mà Copilot tự động tìm ra nên cộng thêm các vụ va chạm đạn với những kẻ xâm lược.


Copilot đang đề xuất toàn bộ đoạn mã


Rốt cuộc, đó là một thành công. Trò chơi đã hoạt động và tôi đã hoàn thành nó trong vòng chưa đầy 2 giờ để tìm hiểu tất cả từ đầu. Copilot đã viết ít nhất 99% mã và tôi hầu như không cần xem xét tài liệu, mặc dù nếu không có nó, tôi có thể sẽ vẫn bị mắc kẹt với mã không chính xác do người bạn mới của tôi cung cấp.


  • Copilot có phải là một cách tốt để học cách sử dụng một ngôn ngữ lập trình hoặc thư viện mới không? Đại khái là vậy, nhưng nếu bạn nghĩ rằng bạn sẽ không bao giờ đọc lại tài liệu, thì bạn đã nhầm. Biết ít nhất những điều cơ bản về các khái niệm PyGame sẽ giúp cuộc sống của tôi dễ dàng hơn rất nhiều và tôi sẽ dành ít thời gian hơn rất nhiều.


  • Chúng ta có thể sử dụng Copilot và không viết một dòng mã nào không? Đúng hơn là không. Khi mã riêng của chúng ta định hình cách AI suy nghĩ. Nó thực sự hiểu rất nhiều điều nên chỉ cần thúc đẩy một chút thôi cũng khiến nó rất vui khi được làm việc cùng. Nó sẽ mang lại nhiều giá trị hơn trong việc giúp bạn mở rộng mã hiện có hơn là xây dựng thứ gì đó từ đầu.


  • Copilot có phải là một công cụ tuyệt vời không? Chắc chắn. Đây là tương lai của sự phát triển và tôi không nói rằng nó sẽ mất việc của chúng ta vì AI sẽ không sớm thay thế các lập trình viên, nhưng nó chắc chắn sẽ giúp chúng ta làm việc hiệu quả hơn. Đó là một cuộc cách mạng và thật vui khi khám phá ra khả năng của nó theo cách này.


Bạn có thể xem tất cả những nỗ lực của tôi trong video dài 2 giờ này trên YouTube:

👉


Không chuẩn bị, không chỉnh sửa, không thủ thuật. Sự ngẫu hứng thuần túy.


Chỉ là một cảnh báo nhanh - nó là cảm xúc. Tôi thất vọng trong nửa thời gian chỉ để cười và hoàn toàn hào hứng khi thực hiện từng bước nhỏ đi đúng hướng.


Bạn cũng có thể tìm thấy mã nguồn mà nó tạo ra trên Github của tôi. Như tôi đã đề cập trong video, nó không đẹp, nhưng nó hoạt động:

👉 https://github.com/lukasz-wronski/copilot-invaders



Hy vọng bạn thích nó. Cảm ơn vì đã đọc!