forked from matheusopessoa/The-Rise-of-Lequeleto
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.py
358 lines (301 loc) · 13.7 KB
/
main.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
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
import pygame
import sys
import constantes
import layout
import random
import pygame.mixer
from layout import GerenciadorLayout
from brick import Brick
from quebravel import Bloco_q
from player import Player
from tempoDecorrido import Temporizador
from coletaveis import Coin, Extra_Time, Freeze
from button import Button
pygame.mixer.init()
pygame.mixer.music.load('assets/esqueleto - kelvis duran.mp3')
pygame.mixer.music.set_volume(0.15)
pygame.init()
#FPS DO JOGO
clock = pygame.time.Clock()
FPS = 30
temporizador = Temporizador(120)
#Tela
tela = pygame.display.set_mode((constantes.WIDTH, constantes.HEIGHT))
icon = pygame.image.load('assets/icon.png')
pygame.display.set_icon(icon)
# Criando um grupo de blocos
todos_quebraveis = pygame.sprite.Group()
todos_fixos = pygame.sprite.Group()
todos_blocos = pygame.sprite.Group()
# Criando um grupo de sprites
todos_sprites = pygame.sprite.Group()
todas_bombas = pygame.sprite.Group()
todos_players = pygame.sprite.Group()
player1 = None
player2 = None
freeze_1 = 0
freeze_2 = 0
times_1 = 0
times_2 = 0
coins_player1=0
coins_player2=0
jogador1_congelado = False
tempo_congelamento1 = 0
jogador2_congelado = False
tempo_congelamento2 = 0
gerenciador = GerenciadorLayout()
def menu_principal():
while True:
pygame.display.set_caption('Menu Principal')
#BOTAO É 246,433
button = Button(247,380)
button.show_button(tela)
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
if event.type == pygame.MOUSEBUTTONDOWN:
mouse_x, mouse_y = pygame.mouse.get_pos()
if button.pressed(mouse_x, mouse_y, 380, 460):
jogo()
pygame.display.update()
tela.blit(layout.tela_inicial, (0, 0))
def desenhar_mapa():
global player1, player2, coins_player1, coins_player2
for l in range (len(gerenciador.LAYOUT)):
for c in range (len(gerenciador.LAYOUT[l])):
item = gerenciador.LAYOUT[l][c]
if item == 0:
r= random.randint(2,4)
if r ==3 or r==4:
madeira = Bloco_q(c, l, constantes.QUEBRAVEL_WIDTH, constantes.QUEBRAVEL_HEIGHT)
todos_quebraveis.add(madeira)
gerenciador.LAYOUT[l][c] = 1
else:
gerenciador.LAYOUT[l][c] = 0
if item == 1:
pedra = Brick(c, l, constantes.BRICK_WIDTH, constantes.BRICK_HEIGHT)
todos_fixos.add(pedra)
#Definindo Add Time
if item == 2:
gerenciador.LAYOUT[l][c] = 0
add_time = Extra_Time(layout.add_time_img, c, l, constantes.QUEBRAVEL_WIDTH,
constantes.QUEBRAVEL_HEIGHT)
todos_sprites.add(add_time)
if item == 4 :
gerenciador.LAYOUT[l][c] = 0
if item == 5 :
gerenciador.LAYOUT[l][c] = 0
player1 = Player(layout.player1_img, todos_sprites, todas_bombas, todos_players, todos_quebraveis, c, l,
constantes.BRICK_WIDTH, constantes.BRICK_HEIGHT, gerenciador, layout.kiriku)
todos_sprites.add(player1)
todos_players.add(player1)
if item == 6:
gerenciador.LAYOUT[l][c] = 0
player2 = Player(layout.player2_img, todos_sprites, todas_bombas, todos_players, todos_quebraveis, c, l,
constantes.BRICK_WIDTH, constantes.BRICK_HEIGHT, gerenciador, layout.esqueleto)
todos_sprites.add(player2)
todos_players.add(player2)
#Definindo Moeda
if item==7:
gerenciador.LAYOUT[l][c] = 0
coin = Coin(layout.coin_img, c, l, constantes.QUEBRAVEL_WIDTH, constantes.QUEBRAVEL_HEIGHT)
todos_sprites.add(coin)
#Definindo Freeze
if item==8:
gerenciador.LAYOUT[l][c] = 0
freeze = Freeze(layout.freeze_img, c, l, constantes.QUEBRAVEL_WIDTH, constantes.QUEBRAVEL_HEIGHT)
todos_sprites.add(freeze)
# adicionando aos grupos de sprites
todos_sprites.add(todos_players)
todos_sprites.add(todos_fixos)
todos_sprites.add(todos_quebraveis)
todos_blocos.add(todos_fixos)
todos_blocos.add(todos_quebraveis)
desenhar_mapa()
def desenhar_temporizador(tempo_decorrido):
fonte = pygame.font.Font('assets/Minecraft.ttf', 30)
texto = fonte.render(f"Tempo: {tempo_decorrido} s", True, (16,28,64))
tela.blit(texto, (550, 15))
def desenhar_moedas_player1(coins_player1):
fonte = pygame.font.Font('assets/Minecraft.ttf', 15)
texto = fonte.render(f"Moedas Player 1: {coins_player1} ", True, (16,28,64))
tela.blit(texto, (1, 1))
def desenhar_moedas_player2(coins_player2):
fonte = pygame.font.Font('assets/Minecraft.ttf', 15)
texto = fonte.render(f"Moedas Player 2: {coins_player2} ", True, (16,28,64))
tela.blit(texto, (1, 30))
def jogo():
pygame.display.set_caption('The rise of lequeleto')
global freeze_1, freeze_2, times_1, times_2, coins_player1,coins_player2,jogador1_congelado,tempo_congelamento1,jogador2_congelado,tempo_congelamento2
pygame.mixer.music.play(-1)
jogo = True
temporizador.iniciar() #INICIALIZA O TEMPORIZADOR QUANDO RODA O JOGO
while jogo:
clock.tick(FPS)
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
pygame.mixer.music.stop()
sys.exit()
# Tratamento de eventos de teclado
if event.type == pygame.KEYDOWN:
if not jogador1_congelado:
if event.key == pygame.K_UP:
if gerenciador.LAYOUT[player1.y - 1][player1.x] == 0 or gerenciador.LAYOUT[player1.y - 1][player1.x] == 9:
player1.y -= 1 # Mova o jogador para cima
elif event.key == pygame.K_DOWN:
if gerenciador.LAYOUT[player1.y + 1][player1.x] == 0 or gerenciador.LAYOUT[player1.y + 1][player1.x] == 9:
player1.y += 1 # Mova o jogador para baixo
elif event.key == pygame.K_LEFT:
if gerenciador.LAYOUT[player1.y][player1.x - 1] == 0 or gerenciador.LAYOUT[player1.y][player1.x - 1] == 9:
player1.x -= 1 # Mova o jogador para a esquerda
elif event.key == pygame.K_RIGHT:
if gerenciador.LAYOUT[player1.y][player1.x + 1] in[0,9]:
player1.x += 1
elif event.key == pygame.K_RSHIFT:
player1.soltar_bomba()
#TECLADO DO SEGUNDO JOGADOR
if not jogador2_congelado:
if event.key == pygame.K_w:
if gerenciador.LAYOUT[player2.y - 1][player2.x] == 0 or gerenciador.LAYOUT[player2.y - 1][player2.x] == 9:
player2.y -= 1 # Mova o jogador para cima
elif event.key == pygame.K_s:
if gerenciador.LAYOUT[player2.y + 1][player2.x] == 0 or gerenciador.LAYOUT[player2.y + 1][player2.x] == 9:
player2.y += 1 # Mova o jogador para baixo
elif event.key == pygame.K_a:
if gerenciador.LAYOUT[player2.y][player2.x - 1] == 0 or gerenciador.LAYOUT[player2.y][player2.x - 1] == 9:
player2.x -= 1 # Mova o jogador para a esquerda
elif event.key == pygame.K_d:
if gerenciador.LAYOUT[player2.y][player2.x + 1] in[0,9]:
player2.x += 1
elif event.key == pygame.K_f:
player2.soltar_bomba()
# Verifique se o jogador 1 colidiu com uma moeda
if player1.colidir_coin(player1) == "TrueCoin":
coins_player1 += 1
# Verifique se o jogador 2 colidiu com uma moeda
if player2.colidir_coin(player2) == "TrueCoin":
coins_player2 += 1
def determinar_vencedor(coins_player1, coins_player2):
if coins_player1 > coins_player2:
return "Player 1"
elif coins_player2 > coins_player1:
return "Player 2"
else:
return "Empate"
# Verifique se o jogador 1 colidiu com freeze
if player1.colidir_freeze(player1) == True:
freeze_1 += 1
jogador2_congelado = True
tempo_congelamento2 = 100
# Verifique se o jogador 2 colidiu com freeze
if player2.colidir_freeze(player2) == True:
freeze_2 += 1
jogador1_congelado = True
tempo_congelamento1 = 100
# Reduza o tempo de congelamento
if jogador1_congelado:
tempo_congelamento1 -= 1
# Se o tempo de congelamento terminou, descongele o jogador 2
if tempo_congelamento1 <= 0:
jogador1_congelado = False
# Reduza o tempo de congelamento
if jogador2_congelado:
tempo_congelamento2 -= 1
# Se o tempo de congelamento terminou, descongele o jogador 2
if tempo_congelamento2 <= 0:
jogador2_congelado = False
# Verifique se o jogador 1 colidiu com add_time
if player1.colidir_time(player1) == True:
times_1 += 1
temporizador.aumentar(6)
# Verifique se o jogador 2 colidiu com add_time
if player2.colidir_time(player2) == True:
times_2 += 1
temporizador.aumentar(6)
#TRATANDO COLETAVEIS PARA A APRESENTACAO DE P1
def desenhar_freeze_player1(freeze_1):
fonte = pygame.font.Font('assets/Minecraft.ttf', 15)
texto = fonte.render(f"Freeze Player 1: {freeze_1} ", True, (16,28,64))
tela.blit(texto, (160, 1))
def desenhar_freeze_player2(freeze_2):
fonte = pygame.font.Font('assets/Minecraft.ttf', 15)
texto = fonte.render(f"Freeze Player 2: {freeze_2} ", True, (16,28,64))
tela.blit(texto, (160, 30))
def desenhar_times_player1(times_1):
fonte = pygame.font.Font('assets/Minecraft.ttf', 15)
texto = fonte.render(f"Extra Times Player 1: {times_1} ", True, (16,28,64))
tela.blit(texto, (320, 1))
def desenhar_times_player2(times_2):
fonte = pygame.font.Font('assets/Minecraft.ttf', 15)
texto = fonte.render(f"Extra Times Player 2: {times_2} ", True, (16,28,64))
tela.blit(texto, (320, 30))
#VERIFICAÇÃO DE QUAL PLAYER VENCEU OU NÃO
if len(todos_players) == 1:
vencedor = todos_players.sprites()[0]
imagem_vencedor =vencedor.image
if imagem_vencedor == layout.player1_img:
win(player1)
elif imagem_vencedor == layout.player2_img:
win(player2)
# Atualize a posição do jogador
player1.update()
player2.update()
todos_sprites.update()
todas_bombas.update()
tela.fill((144, 238, 144)) # PREENCHER A TELA DE VERDE
# Desenha os blocos
todos_fixos.draw(tela)
todos_quebraveis.draw(tela)
todas_bombas.draw(tela)
todos_sprites.draw(tela)
# Obtenha o tempo decorrido do temporizador
tempo_decorrido = temporizador.atualizar()
if tempo_decorrido == 0:
vencedor = determinar_vencedor(coins_player1, coins_player2)
if vencedor == 'Player 1':
win(player1)
elif vencedor == 'Player 2':
win(player2)
else:
fonte = pygame.font.Font('assets/Minecraft.ttf', 100)
texto = fonte.render(f"EMPATE", True, (0,0,0))
tela.blit(texto, (200, 325))
# Desenhe o temporizador
desenhar_freeze_player1(freeze_1)
desenhar_freeze_player2(freeze_2)
desenhar_times_player1(times_1)
desenhar_times_player2(times_2)
desenhar_temporizador(tempo_decorrido)
desenhar_moedas_player1(coins_player1)
desenhar_moedas_player2(coins_player2)
pygame.display.update() # Atualiza a tela
def win(player):
while True:
pygame.display.set_caption('Fim de jogo')
tela.fill((0, 255, 100))
kiriku_grande = pygame.transform.scale(layout.player1_img, (100, 100))
letoleto_grande = pygame.transform.scale(layout.player2_img, (100, 100))
if player == player1:
tela.blit(layout.floresta, (0,0))
tela.blit(kiriku_grande,(310,320))
fonte = pygame.font.Font('assets/Minecraft.ttf', 50)
texto = fonte.render(f"KIRIKU VENCEU", True, (91,140,77,55))
#(148,190,76,75)
(91,140,77,55)
#(140,217,119,59)
tela.blit(texto, (190, 240))
elif player == player2:
tela.blit(layout.cemiterio, (0,0))
tela.blit(letoleto_grande,(310,320))
fonte = pygame.font.Font('assets/Minecraft.ttf', 50)
texto = fonte.render(f"LEQUELETO VENCEU", True, (255,255,255))
tela.blit(texto, (115, 250))
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
pygame.display.update()
# Chama a função para iniciar o loop do jogo
menu_principal()