PythonJogaPong — Parte 2 Capturando teclas pressionadas e salvando dados de treino

Lucas Oliveira
pilotorobo
Published in
2 min readOct 16, 2017

Esse post faz parte de uma série onde explico o projeto PythonJogaPong, que usa redes neurais para jogar o jogo clássico de atari Pong. Veja também as outras partes: Parte 1 Parte 3 Parte 4

Para que a rede a neural possa saber quais ações tomar durante o jogo, ela precisa ser “ensinada” com dados reais. Então precisamos de rotinas para capturar nossos movimentos durante o jogo para que possamos ensinar nossa neural network. Para isso vamos usar dois arquivos:

Aqui definimos a função para capturar as teclas pressionadas. Precisamos da lib numpy e da lib cv2(opencv). Vamos utilizar o módulo win32api que faz parte do pacote pywin32. Ela utiliza o método GetAsyncKeyState para verificar cada tecla que está pressionada. O código 38 é a seta para cima do teclado, o código 40 é a seta para baixo, e a função ord(“Q”) retorna o código da letra Q. Queremos verificar apenas essas teclas pois usamos a tecla Q para finalizar o programa e as setas para movimentar as barras. Utilizamos a comparação down_pressed==up_pressed porque caso as duas teclas tenham o mesmo estado, soltas ou pressionadas, a barra não se movimentará, então interpretamos como um caso só.

A rotina desse arquivo é utilizada para gravar os movimentos do jogador e o estado dos objetos do jogo a cada instante. Utilizamos a cada instante a função get_screen features para capturar a tela do jogo e seus atributos e a função get_key_pressed para saber qual tecla está sendo pressionada neste momento. Antes de começar gravar qualquer ação, a rotina permite que o usuário ajuste a tela do jogo dentro do range da tela auxiliar, já que só será capturado o que estiver dentro desta tela auxiliar. Após isso, ao pressionar as teclas para cima ou para baixo, a flag saving_data setará e a rotina de gravação entrará em ação. Juntamos os dados da tela e da tecla pressionada no mesmo vetor train_data_point e após isso adicionamos essa variável no buffer train_data_buffer. Para terminarmos a gravação e salvar os dados em um arquivo, apenas pressionamos a tecla Q. Os dados de treino serão salvos em um arquivo .npy. Sem segredos.

Siga o blog e fique ligado para os próximos posts sobre como jogar python com pong! Veja também as outras partes: Parte 1 Parte 3 Parte 4

Qualquer dúvida ou sugestão poste nos comentários!

Se gostou, bata algumas palmas 👏 para nós ! e ajude outros encontrar este artigo!

--

--

Lucas Oliveira
pilotorobo

Working at the intersection of artificial intelligence and education.