paint-brush
Como deixei uma IA codificar um jogo para mim!por@lukaszwronski
17,868 leituras
17,868 leituras

Como deixei uma IA codificar um jogo para mim!

por Lukasz Wronski2022/06/29
Read on Terminal Reader
Read this story w/o Javascript

Muito longo; Para ler

Eu estava tentando descobrir se posso escrever um clone inteiro do Space Invaders usando apenas o código escrito por uma IA. Eu usei o Copilot para experimentá-lo. Demorou 2 horas para construir o jogo com alguns problemas importantes, mas no geral o experimento foi um sucesso. Você pode ver minha luta em um vídeo de 2 horas anexado a este artigo.

Company Mentioned

Mention Thumbnail
featured image - Como deixei uma IA codificar um jogo para mim!
Lukasz Wronski HackerNoon profile picture


Recentemente, descobri que o Github Copilot, uma IA que ajuda a escrever o código sugerindo trechos inteiros (geralmente baseados apenas em comentários em linguagem natural), agora está disponível como um serviço comercial. Não precisando mais esperar pelo acesso beta, fiz o check-in para um teste gratuito de dois meses.


Devo dizer - minhas expectativas eram altas. Já joguei um pouco com a API OpenAI antes. Eu acredito que ele usa o mesmo modelo do Copilot, então eu sabia que poderia ser uma experiência alucinante. Instalei-o como uma extensão do Visual Studio Code e comecei a me perguntar como devo desafiar meu novo colega virtual.

Que os jogos comecem


Lendo alguns dos comentários e artigos da comunidade, descobri que uma das vantagens do Copilot é que essa IA conhece mais linguagens de programação, estruturas e APIs do que qualquer desenvolvedor de flash e osso que vive hoje. Afinal, ele aprende usando todos os repositórios GitHub públicos que já existiram. Pode ser mais do que apenas uma ferramenta de produtividade. Também pode ser uma forma interativa de descobrir coisas novas.


Enquanto esperava utilizá-lo dessa maneira, decidi criar um jogo. Um clone de Space Invaders parecia ser uma escolha apropriada, mas para tornar isso mais interessante, fiz algumas suposições:


  1. Usarei Python - uma linguagem que mal conheço e a emprego apenas de vez em quando para resolver desafios de CTF
  2. Vou usar o PyGame - uma biblioteca com a qual mexi há mais de dez anos para criar um pequeno projeto acadêmico
  3. Não vou me preparar de forma alguma - apenas siga o fluxo
  4. Não escreverei uma única linha de código - esperando que meu copiloto escreva tudo para mim


Configurei a gravação de tela, liguei meu microfone para fazer um pequeno comentário, iniciei o Visual Studio e acabei de escrever minha primeira solicitação:


"""main function for a pygame"""


Copilot começou a me dar linhas de código, uma após a outra. Acabei de entrar na lista de sugestões aceitando uma tonelada de importações. Entusiasmado no início, rapidamente me vi preso em um loop infinito de adicionar as mesmas duas linhas de código repetidamente. Nada de bom.


Com um começo ruim, rapidamente percebi que estou tentando fazer muito, muito rapidamente. Pedir ao Copilot para adicionar uma importação do PyGame primeiro e depois criar uma função mostrando uma janela funcionou.

Nesse ponto, também percebi que, ao tornar meu pedido mais preciso, posso melhorar os resultados. Enquanto escrevo


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


Eu o fiz funcionar, exceto pelo fato de que ele apareceu apenas por um segundo e depois saiu imediatamente. Então imaginei que precisava ser muito direto em relação às minhas expectativas. Mudando para


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


O Copilot estendeu o código adicionando um loop de jogo básico que impedia que a janela fosse fechada.


Parecia que meu amigo e eu começamos a nos comunicar. Agradável!

Traças no meu estômago

O próximo passo foi criar uma classe de nave espacial. Criei uma classe em um arquivo separado, novamente comecei a escrever outro pedido e encontrei outra coisa legal. Acontece que o Copilot sugere não apenas o código, mas também o conteúdo dos comentários que estou escrevendo. Comecei a pedir para usar as teclas de seta para mover minha nave espacial e isso sugeriu uma frase inteira.


O copiloto não apenas escreve o código, mas também sugere o que você pode querer que ele faça


Devo dizer que estava um pouco cético se o Copilot realmente entenderia o que está acontecendo em termos de projeto. Analisar o código em um arquivo atualmente editado é uma coisa. Descobrir como esses arquivos estão interconectados é outra questão difícil.


O copiloto diz: "Eu cuidei de você". Ele está ciente de classes em outros arquivos, e não foi um problema usar nave espacial em nossa classe de jogo. Copilot também descobriu que definimos um tamanho de janela de jogo específico e o usamos enquanto posicionamos a nave espacial na parte inferior central da tela.

Você deve pensar - "esta ferramenta é incrível". Certo?


É meio que sim, mas nosso relacionamento não era apenas luar e rosas. Alguns dos problemas eram triviais, como lógica desnecessária em funções que pedi ao Copilot para escrever para mim. Algumas sugestões vinham atrasadas, e perdi um pouco de tempo esperando por elas.


Às vezes eu ficava frustrado por causa dos meus próprios erros. Deixei um comentário de que a função deveria retornar zero na parte superior do arquivo e, em seguida, escrevendo outro comentário abaixo, estava descobrindo por que o Copilot está tentando retornar zero no final da minha função. Mas não era nada em comparação com o problema que passei quase uma hora resolvendo.


Eu estava procurando posicionar o navio no lugar certo e definir seu tamanho para 50x50 pixels. Eu estava tentando formular meu comentário de várias maneiras. Obtendo sempre o mesmo resultado. Code, que não estava funcionando porque o Copilot decidiu usar métodos que não existiam no PyGame.

Teimoso como uma mula, tentava invocar set_size e set_center em meu objeto sprite carregado, sempre obtendo:


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


Inúmeras vezes tentei reformular meu pedido sempre obtendo o código que não estava funcionando de jeito nenhum. Muuuuito frustrante.


Em algum momento, até pensei que deveria parar de gravar e esquecer. Rotule o Copilot como não adequado para esta finalidade e encerre o experimento. No entanto, senti que deveria haver uma maneira de superar isso.

Não é você, sou eu

Eu pensei que trabalhando com o Copilot eu poderia esquecer os documentos, mas descobri que foi minha culpa por não entender o básico do PyGame. Não entendi o conceito de Rect ajudando a mover objetos na cena. Não entendi como usar classes utilitárias para dimensionar meu sprite.

Encontrar essa informação na documentação quebrou o feitiço. Pude sugerir uma estratégia diferente do Copilot separando o sprite representado como um objeto Surface do Rect e passando-os separadamente para a tela.


O resto deste curso foi tranquilo. Quanto mais código eu produzia, mais inteligente o Copilot ficava. Foi mágico quando leu minha mente e fez balas e alienígenas se moverem nas direções certas. Foi muito fácil adicionar um contador de pontuação que o Copilot descobriu automaticamente que deveria somar colisões de balas com invasores.


Copilot está sugerindo trechos inteiros de código


Afinal, foi um sucesso. O jogo estava funcionando e fiz em menos de 2 horas aprendendo tudo do zero. Copilot escreveu pelo menos 99% do código e mal precisei consultar a documentação, embora sem ela provavelmente ainda estaria preso com o código incorreto fornecido por meu novo amigo.


  • O Copilot é uma boa maneira de aprender a usar uma nova linguagem de programação ou biblioteca? É meio que é, mas se você acha que nunca mais vai ler a documentação, então você está errado. Saber pelo menos o básico dos conceitos do PyGame tornaria minha vida muito mais fácil e eu gastaria muito menos tempo.


  • Podemos usar o Copilot e não escrever uma única linha de código? Melhor não. Como nosso próprio código molda a maneira como a IA pensa. Ele realmente entende muito, então dar apenas um empurrãozinho torna um prazer trabalhar com ele. Isso trará muito mais valor ao ajudar você a expandir o código existente do que criar algo do zero.


  • O Copilot é uma ferramenta incrível? Definitivamente. Este é o futuro do desenvolvimento e não estou dizendo que vai tirar nossos empregos porque a IA não vai substituir os programadores tão cedo, mas com certeza vai nos tornar mais produtivos. É uma revolução e foi muito divertido descobrir as suas capacidades desta forma.


Você pode assistir a todos os meus esforços neste vídeo de 2 horas no YouTube:

👉


Sem preparação, sem edição, sem truques. Improvisação pura.


Apenas um aviso rápido - é emocional. Fico frustrado na metade do tempo apenas para rir e ficar totalmente animado dando cada pequeno passo na direção certa.


Você também pode encontrar o código-fonte gerado no meu Github. Como mencionei no vídeo não é bonito, mas funciona:

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



Espero que você tenha aproveitado. Obrigado por ler!