Computação Gráfica: Introdução ao PyGame
Afluentes: Computação Gráfica
PyGame
O PyGame é um conjunto de bibliotecas para o desenvolvimento de jogos para a linguagem de programação Python. Ela é independente de plataforma e pode ser executada no Windows, Linux, MacOS, etc..
O PyGame trabalha com SDL (Simple DirectMedia Layer), uma biblioteca multimídia e multiplataforma escrita em C, com interface para diversas linguagens de programação. O SDL objetiva abstrair o tratamento de gráficos, sons, entradas, vídeos, eventos, etc., para facilitar a programação de aplicações multimídias para diversos sistemas operacionais.
O PyGame
Pygame é um "motor de jogo" ou em inglês "game engine". Um motor de jogo é um software ou um conjunto de bibliotecas usado na simplificação do desenvolvimento de jogos, por exemplo, para videogames e computadores.
As funcionalidades típicas fornecidas por um motor de jogo incluem o mecanismo de renderização (ou rendering engine) para gráficos 2D ou 3D, um mecanismo de detecção de colisão, suporte a sons, uma linguagem de script, suporte à animação, inteligência artificial e jogos pela internet.
Ou seja, é utilizado um motor de jogo que contém todas as funções visuais e de processamento como base do código, e a essência do jogo como a estratégia, o design e a ideia principal que serão realmente pensadas e estudadas para o jogo.
Game Loop
Tal como uma biblioteca de jogo, ela segue o ciclo de vida de um jogo baseado no 'game loop:
- PROCESS_INPUT: Verifica todas as entradas e eventos, como teclado, mouse, dados de rede, etc.. Essa etapa é feita pela própria biblioteca do PyGame e abstraída ao desenvolvedor. Apenas usamos as informações coletadas nesse processo na próxima etapa do game loop.
- EXECUTE: ou SIMULATE_GAME_WORLD, é a etapa em que as entradas, eventos e dados são utilizados para executar algo do jogo, como dar um tiro, movimentar o personagem conforme uma tecla foi pressionada, etc..
- RENDER: é o processo de desenhar os elementos visuais do game.
Essas etapas são executadas a cada frame do jogo.
Antes e depois do game loop, são executadas duas etapas principais:
- INIT: inicializa as bibliotecas que serão utilizadas, carrega os recursos do jogo, configura informações, etc.
- END: desaloca os recursos e finaliza as bibliotecas.
Hello World no PyGame mostrando uma imagem
1import sys # importa a biblioteca sys
2import pygame # importa a biblioteca pygame
3
4# INIT: inicialização dos dados, load dos recursos, etc.
5pygame.init() # inicializa o pygame
6
7filename = sys.argv[1] # pega o parâmetro de entrada
8
9image = pygame.image.load(filename) # le a imagem do arquivo
10w = image.get_width() # retorna a largura da imagem
11h = image.get_height() # retorna a altura da imagem
12
13display_surface = pygame.display.set_mode((w, h)) # ajusta para o tamanho da imagem
14pygame.display.set_caption(filename) # nome da imagem como título da janela
15
16# GAME_LOOP: ocorre a cada frame
17finish = False # flag para game loop continuar
18while not finish: # enquanto não terminou
19 # PROCESS_INPUT: é de responsabilidade da biblioteca
20 # EXECUTE: usa as entradas ou informações para fazer algo
21 for event in pygame.event.get(): # verifica os eventos do pygame
22 if event.type == pygame.QUIT: # se clicou no botão [x]
23 finish = True # ... fim do game loop
24 elif event.type == pygame.KEYDOWN: # se uma tecla foi pressionada
25 if event.key == pygame.K_ESCAPE: # ... e a tecla for ESC
26 finish = True # ... fim do game loop
27 # RENDER: apresenta as imagens na tela
28 display_surface.blit(image, (0, 0)) # mostra a imagem
29 pygame.display.update() # atualiza o display
30
31# END: finaliza o game
32pygame.quit() # finaliza o pygame
33quit() # finaliza o programa