-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpersonagem_bat.py
149 lines (112 loc) · 4.93 KB
/
personagem_bat.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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
from typing import Tuple
import pygame as pg
from cronometro import Cronometro
from config_jogo import ConfigJogo
class Personagem_batalha:
pg.init()
def __init__(self, nome: str, vida: float, dano: float,
velocidade: float, posicao: Tuple[float, float], direcao: int, sprite_direita: any, sprite_esquerda: any, sprite_ataque: any,
sprite_especial: any, sprite_dano: any, sprite_agua: any, sprite_death: any, classe1, classe2):
self.nome = nome
self.vida = vida
self.dano = dano
self.velocidade = velocidade
self.velocidade_nominal = velocidade
self.velocidade_stunned = 0
self.posicao = posicao
self.velocidade_x = 0
self.velocidade_y = 0
self.sprite_direita = sprite_direita
self.sprite_esquerda = sprite_esquerda
self.sprite_ataque = sprite_ataque
self.sprite_especial = sprite_especial
self.sprite_dano = sprite_dano
self.sprite_agua = sprite_agua
self.sprite_death = sprite_death
self.posicao_centro = (posicao[0] + 41, posicao[1] + 41)
self.direcao = direcao
self.direcao_inicial = direcao
self.ataque_fisico_bool = False
self.ataque_distancia_bool = False
self.classe1 = classe1
self.classe2 = classe2
self.rect = pg.Rect(self.posicao[0], self.posicao[1], 60, 82)
self.tempo1 = Cronometro()
self.tempo2 = Cronometro()
self.stun = Cronometro()
self.tempo_area = Cronometro()
if self.direcao == 0:
self.sprite_inicial = self.sprite_direita
elif self.direcao == 1:
self.sprite_inicial = self.sprite_esquerda
self.sprite_atual = self.sprite_inicial
def mover_para_cima(self):
if self.stun.tempo_passado() > 2:
self.velocidade_y = -self.velocidade
def mover_para_baixo(self):
if self.stun.tempo_passado() > 2:
self.velocidade_y = self.velocidade
def mover_para_direita(self):
if self.stun.tempo_passado() > 2:
self.velocidade_x = self.velocidade
self.sprite_atual = self.sprite_direita
self.direcao = 0
def mover_para_esquerda(self):
if self.stun.tempo_passado() > 2:
self.velocidade_x = -self.velocidade
self.sprite_atual = self.sprite_esquerda
self.direcao = 1
def parar_x(self):
self.velocidade_x = 0
def parar_y(self):
self.velocidade_y = 0
def atualizar_posicao(self):
x, y = self.posicao
self.slow()
novo_x = x + self.velocidade_x
novo_y = y + self.velocidade_y
self.rect = pg.Rect(novo_x, novo_y, 60, 82)
#Limitação das bordas (blocos inquebráveis)
if ((novo_y >= 32) and \
((novo_y + 82) <= ConfigJogo.ALTURA_TELA_PRINCIPAL - 32)) and ((novo_x >= 32) \
and ((novo_x + 82) <= ConfigJogo.LARGURA_TELA_PRINCIPAL - 32)):
#Limitação da colisão com o bloco quebrável
if ConfigJogo.B_BLOCK_VIDA1 > 0:
if not self.rect.colliderect(ConfigJogo.B_BLOCK1):
self.posicao = (novo_x, novo_y)
else:
self.posicao = (novo_x, novo_y)
def slow(self): #atualização da velocidade e da sprite na água
x, y = self.posicao
if y < ConfigJogo.ALTURA_TELA_PRINCIPAL//2:
if x > 384 and x < 544:
self.velocidade= 0.5*self.velocidade_nominal
if self.direcao == 0:
self.sprite_atual = self.sprite_agua
if self.direcao == 1:
self.sprite_atual = pg.transform.flip(self.sprite_agua, True, False)
else:
self.velocidade = self.velocidade_nominal
elif y >= ConfigJogo.ALTURA_TELA_PRINCIPAL//2:
if x > 416 and x < 576:
self.velocidade= 0.5*self.velocidade_nominal
if self.direcao == 0:
self.sprite_atual = self.sprite_agua
if self.direcao == 1:
self.sprite_atual = pg.transform.flip(self.sprite_agua, True, False)
else:
self.velocidade = self.velocidade_nominal
def rect(self) -> Tuple[float, float, float, float]:
""" retorna os dados da P como os retangulos sao representados
no pygame, i.e., como uma tupla do tipo (px, py, largura, altura).
"""
return self.posicao + (ConfigJogo.LARGURA_P, ConfigJogo.ALTURA_P)
def desenha(self, tela):
x = self.posicao[0]
y = self.posicao[1]
# pg.draw.rect(tela, (0,0,0), self.rect, 3)
tela.blit(self.sprite_atual, (x,y))
if self.stun.tempo_passado() < 2:
tela.blit(ConfigJogo.stunned, (self.posicao[0], self.posicao[1] - 30))
if self.tempo_area.tempo_passado() < 2:
pass