Pygame
Biblioteca Python útil para criação de jogos que auxilia em diversos pontos importantes, como:
- Desenho de formas gráficas (círculos, retângulos, etc.)
- Exibição de imagens
- Animação
- Interação com teclado, mouse e gamepad
- Reproduzir sons
- Detectar quando objetos colidem
Instalação
Rodar no terminal: pip install pygame
Caso dê o seguinte erro:
Rodar o comando:
sudo apt-get install python-dev libsdl-image1.2-dev libsdl-mixer1.2-dev libsdl-ttf2.0-dev libsdl1.2-dev libsmpeg-dev python-numpy subversion libportmidi-dev ffmpeg libswscale-dev libavformat-dev libavcodec-dev libfreetype6-dev
Depois: pip install pygame
Pronto!
Inicialização
Todo projeto que utiliza essa biblioteca possui as seguintes linhas:import pygame
pygame.init()
Cores
As cores precisam ser definidas com três valores, que irão representar uma cor no formato RGB (Red Green Blue), sendo que cada valor representa um valor para uma dessas cores primárias.A partir dessas cores primárias, podemos gerar qualquer cor, por isso elas são usadas como base.
Exemplos:
BLACK = ( 0, 0, 0)
WHITE = (255, 255, 255)
RED = (255, 0, 0)
GREEN = ( 0, 255, 0)
BLUE = ( 0, 0, 255)
YELLOW = (255, 255, 0)
PURPLE = (255, 0, 255)
Link para cálculo de cores: https://www.w3schools.com/colors/colors_rgb.asp
Controlando a tela
Para abrir uma tela, primeiro precisamos definir o tamanho (altura, largura) e, em seguida, passar esse tamanho para o comando pygame.display.set_mode(size).
Exemplo:
size = (700, 500)
screen = pygame.display.set_mode(size)
Para fechar a tela, usamos o comando pygame.display.quit()
Para alterar o título da janela, usamos pygame.display.set_caption(“Titulo da janela”)
Para definir uma cor de fundo: screen.fill(cor)
Para identificarmos que o usuário clicou no botão “fechar” da janela:
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
Para definirmos o limite de quadros por segundo (FPS):
clock = pygame.time.Clock()
clock.tick(60) # Limita à 60 fps
Para exibir na tela o que foi desenhado: pygame.display.flip()
Com os comandos acima, já conseguimos criar uma janela em branco que fecha quando clicamos no botão fechar:
import pygame
WHITE = (255, 255, 255)
WINDOW_SIZE = (700, 500)
pygame.init()
screen = pygame.display.set_mode(WINDOW_SIZE)
pygame.display.set_caption("PyGame test")
done = False
clock = pygame.time.Clock()
while not done:
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
if not done:
# Aqui vai a logica do jogo
# Aqui vai a logica para exibição dos objetos
screen.fill(WHITE)
pygame.display.flip() # Exibe na tela o que foi desenhado
clock.tick(60) # Limita para 60 fps
pygame.display.quit() # Fecha a janela
Desenhando na tela
Formas possíveis de desenhar: http://www.pygame.org/docs/ref/draw.html
Para desenhar um retângulo na tela:
pygame.draw.rect(screen, cor, [x, y, width, height], width)
Se o width for:
- < 0: não exibe nada
- = 0: preenche o retângulo
- > 0: define a largura da borda do retângulo
pygame.draw.rect(screen, RED, [50, 150, 20, 200])
Para desenhar uma linha:
pygame.draw.line(screen, cor, [x_inicio, y_inicio], [x_fim, y_fim], width)
Para desenha uma elipse:
pygame.draw.ellipse(screen, cor, [x, y, width, height], width)
Para desenhar um polígono:
pygame.draw.polygon(screen, cor, [[x1, y1], [x2, y2], etc.], width])
Exemplo:
pygame.draw.polygon(screen, PURPLE, [[300, 100], [320, 140], [330, 142], [280, 150], [200, 140]], 2)
Para escrever na tela, são precisos 3 passos:
- Definir a fonte: font = pygame.font.SysFont(‘nome_da_fonte’, tamanho, negrito, itálico)
- Usar a fonte para definir um texto, sua cor e se deve ser “anti-aliased”: text = font.render(‘Texto’, anti-aliased, cor)
- Inserir o texto criado na tela: screen.blit(text, [x, y])
font = pygame.font.SysFont('Montserrat', 40, True, False)
text = font.render('Lucas Ferraz', True, BLACK)
screen.blit(text, [SCREEN_WIDTH/2, SCREEN_HEIGHT/2])
Para carregar uma imagem:
Quando carregamos uma imagem com partes transparentes, essa parte será exibida com a cor preta. Para que isso não ocorra, precisamos informar para o pygame que ela deve ser ignorada usando o método colorkey():
player_image.set_colorkey(BLACK)
Inserindo Áudios
Para reproduzir um som:
shot_sound.play()
Obs: a biblioteca pygame não consegue reproduzir qualquer formate de arquivo de som. Caso esteja tendo problemas tentando reproduzir um áudio, tente converter o arquivo para o formato ogg-vorbis (.ogg). Uma ferramenta que faz isso é a Audacity (https://sourceforge.net/projects/audacity/)
Para tocar uma música de fundo:
pygame.mixer.music.set_endevent(pygame.constants.USEREVENT)
pygame.mixer.music.play()
while not done:
for event in pygame.event.get():
if event.type == pygame.constants.USEREVENT:
pygame.mixer.music.play()
Usando a biblioteca
Template
Abaixo você encontra um template que pode ser usado para basicamente qualquer jogo usando a biblioteca PyGame, com os métodos básicos necessários para abrir uma tela em branco que fecha quando pressiona "Esc" ou clicar no botão fechar da tela:
import pygame
window_size = (700, 700)
def init():
pygame.init()
screen = pygame.display.set_mode(window_size)
pygame.display.set_caption('mouse position')
clock = pygame.time.Clock()
done = False
return screen, clock, done
def quit():
pygame.display.quit()
pygame.quit()
def main():
screen, clock, done = init()
while not done:
for event in pygame.event.get():
if event.type == pygame.QUIT or (event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE):
done = True
screen.fill(WHITE)
pygame.display.flip()
clock.tick(60)
quit()
if __name__ == "__main__":
main()
Interações com usuário
Para que o jogo seja de fato um jogo, é preciso que o usuário tenha algum tipo de interação com ele, seja através do teclado, mouse ou joystick. Veremos abaixo como capturar essas interações.
Teclado
Para identificar a interação através do teclado, precisamos fazer duas validações:
- Se o tipo de evento é de tecla pressionada/liberada:
- event.type == pygame.KEYDOWN
- event.type == pygame.KEYUP
- Qual a tecla pressionada:
- event.key == pygame.K_SPACE
- event.key == pygame.K_ESCAPE
- etc.
Mouse
A interação com o mouse pode ocorre de diversas formas:
- Botão pressionado
- Movimentação do mouse
- Scroll
- event.button == 1 # verifica se foi o botão esquerdo
- event.button == 2 # verifica se foi o botão do meio (scroll)
- event.button == 3 # verifica se foi o botão direito
- etc
Para obtermos a posição do mouse:
pygame.mouse.get_pos()
Também podemos definir se o mouse deve ficar visível ou não usando o comando pygame.mouse.set_visible(False)
Comentários
Postar um comentário