• Jogos
  • 02. Criando uma janela

Criando uma janela

Desenhando na tela

Agora vamos trabalhar com a função de desenho. Vejamos quais linhas do jogo_v0.py desenham na tela.

    window.fill((255, 255, 255))  # Preenche com a cor branca

    # ----- Atualiza estado do jogo
    pygame.display.update()  # Mostra o novo frame para o jogador

E mais uma vez, vamos para a documentação!

Exercício 1

Abra a documentação da função window.fill((255, 255, 255)). Lembrando que window é o nome da variável, mas ela guarda um objeto do tipo Surface, como vimos anteriormente. Escreva abaixo, em uma frase, o que essa função faz.

Resposta

Preenche a janela com a cor branca (pois o argumento foi (255, 255, 255)). As cores são valores RGB (Red, Green, Blue) que variam entre 0 e 255. Note que existe um parênteses ao redor dos três valores. Esse parênteses é muito importante, pois define uma tupla (uma sequência de valores, semelhante a uma lista).

A variável window é do tipo pygame.Surface, que representa um superfície 2D que pode ser desenhada na tela. A função fill preenche a tela toda com a cor passada. Do jeito que chamamos ela recebe só um argumento, mas a documentação mostra ela recebendo três!

Esse parâmetros extra possuem valores padrão1, então podemos não passá-los e eles receberão o valor declarado. Vamos agora interpretar isso.

Exercício 2

O quê o segundo parâmetro representa?

Resposta

O segundo parâmetro representa o retângulo que deverá ser preenchido com a cor passada para fill.

Exercício 3

Abra a documentação da função pygame.display.update(). Escreva abaixo, em uma frase, o que essa função faz. Dica: pode ser útil ler a documentação da função pygame.display.flip(), logo acima da função update.

Resposta

Tudo o que é feito na tela (window) não é mostrado para o usuário imediatamente, assim é possível desenhar várias coisas e somente depois de terminar de desenhar mostramos a nova tela (ou frame) para o usuário. Essa função é responsável por mostrar a nova tela que foi desenhada.

Desenhando retângulos#

Agora consulte a documentação de pygame.Rect para descobrir como construir retângulos válidos.

Exercício 4

Para construir um retângulo posicionado com vértices \((20, 30)\), \((30, 30)\), \((30, 70)\) e \((20, 70)\), devo utilizar:

Resposta

Como visto na documentação, passamos primeiro as coordenadas x e y do canto superior esquerdo do retângulo e depois sua largura e altura.

Vamos juntar tudo agora.

Exercício 5

Se eu quiser pintar a tela toda de azul, eu chamaria

Resposta

Como queremos pintar toda a tela sempre usamos a versão sem o segundo argumento. Nem sempre nossa tela será do tamanho \(320\times 240\), então o correto aqui é não passar esse parâmetro.

Exercício 6

Para pintar a metade direita da tela de branco, você chamaria qual das funções abaixo? Pode supor que a tela tem tamanho \(640\times 480\)

Resposta

Podemos eliminar algumas alternativas lembrando que a cor branca é (255, 255, 255). Como nossa tela tem tamanho \(640\times 480\), precisamos que nosso retângulo inicie na metade disso (ou seja, x=320) e que ele comece no topo da tela (y=0). Como dividimos a tela em dois na vertical, ela tem largura 320 e altura 480. Juntando tudo isso chegamos à chamada

window.fill((255, 255, 255), pygame.Rect(320, 0, 320, 480))

Exercício 7

Agora implementaremos a função desenha. Ela deverá receber um parâmetro window e será responsável por realizar as opções de desenho acima. Faça sua função pintar a tela inteira de vermelho. Essa função também é responsável por mostrar a nova tela que foi desenhada.

Sua função deverá passar no teste test_3_desenha_na_tela.

Nossas duas últimas tarefas são implementar as funções de loop do jogo.


  1. Em Python, e diversas outras linguagens, é comum utilizarmos valores padrão para argumentos de uma função. No caso do Python esses valores são indicados com nome_do_argumento=valor_padrao_do_argumento. Esses valores são utilizados na variável caso a chamada da função não inclua esse argumento. Por exemplo:

    def soma(a, b=1):
        return a + b
    
    # Imprime 5
    print(soma(2, 3))
    # Imprime 7
    print(soma(6))