-
Notifications
You must be signed in to change notification settings - Fork 8
/
jogo_sem_classes.py
86 lines (66 loc) · 2.6 KB
/
jogo_sem_classes.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import pygame
from constantes import *
def inicializa():
pygame.init()
window = pygame.display.set_mode((LARGURA, ALTURA))
pygame.display.set_caption(TITULO)
# Imprime instruções
print('*' * len(TITULO))
print(TITULO.upper())
print('*' * len(TITULO))
print('Utilize a tecla "ESPAÇO" ou seta para cima para pular.')
jogador_img = pygame.image.load(IMG_DIR / 'hero-single.png').convert_alpha()
jogador_img = pygame.transform.scale(jogador_img, (100, 160))
estado = {
'jogador': {
'estado': PARADO,
'img': jogador_img,
'x': LARGURA / 2 - jogador_img.get_width() / 2,
'y': 0,
'largura': jogador_img.get_width(),
'altura': jogador_img.get_height(),
'velocidade_y': 0,
},
'clock': pygame.time.Clock(),
}
return window, estado
def atualiza_estado(estado):
dt = estado['clock'].tick(FPS) / 1000
for event in pygame.event.get():
if event.type == pygame.QUIT:
return False
# Verifica se apertou alguma tecla.
if event.type == pygame.KEYDOWN:
# Dependendo da tecla, altera o estado do jogador.
if event.key == pygame.K_SPACE or event.key == pygame.K_UP:
if estado['jogador']['estado'] == PARADO:
estado['jogador']['velocidade_y'] -= VELOCIDADE_PULO
estado['jogador']['estado'] = PULANDO
# Depois de processar os eventos.
# Atualiza a posição do jogador
estado['jogador']['velocidade_y'] += GRAVIDADE * dt
# Atualiza o estado para caindo
if estado['jogador']['velocidade_y'] > 0:
estado['jogador']['estado'] = CAINDO
estado['jogador']['y'] += estado['jogador']['velocidade_y'] * dt
# Se bater no chão, para de cair
if estado['jogador']['y'] + estado['jogador']['altura'] >= CHAO:
# Reposiciona para a posição do chão
estado['jogador']['y'] = CHAO - estado['jogador']['altura']
# Para de cair
estado['jogador']['velocidade_y'] = 0
# Atualiza o estado para parado
estado['jogador']['estado'] = PARADO
return True
def desenha(window, estado):
window.fill(PRETO)
# Desenha chão
pygame.draw.rect(window, VERDE, (0, CHAO, LARGURA, ALTURA - CHAO))
window.blit(estado['jogador']['img'], (int(estado['jogador']['x']), int(estado['jogador']['y'])))
pygame.display.update()
def game_loop(window, estado):
while atualiza_estado(estado):
desenha(window, estado)
if __name__ == '__main__':
window, estado = inicializa()
game_loop(window, estado)