Python - Ayuda Pygame "Class & Def Main"

 
Vista:

Ayuda Pygame "Class & Def Main"

Publicado por Psycho (1 intervención) el 08/07/2020 18:28:58
Hola!
Es mi primer año dando programación en la Universidad y se me da bastante mal, quería saber si alguien podría ayudarme a solucionar el siguiente problema.
Tengo que programar un mini-juego con Pygame, y a base de buscar tutoriales y más tutoriales he conseguido hacer el siguiente código y que funcione perfectamente.
El problema es que 2 de los requisitos mínimos son utilizar Clases y usar la función Def Main, y por más que lo he intentado soy incapaz de incorporarlos al código.
Podría ayudarme alguien?

Código:

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
import pygame
import sys
import random
from pygame import mixer
 
pygame.init()
 
WIDTH = 1200
HEIGHT = 720
 
screen = pygame.display.set_mode (((WIDTH, HEIGHT)), pygame.FULLSCREEN)
 
pygame.display.set_caption("Cyberpunk 2020 A New Dawn")
 
pygame.mouse.set_cursor((8,8),(0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0))
 
BLUE = (15, 150, 255)
PURPLE = (255, 150, 255)
ORANGE = (255, 155, 50)
 
MENU_1_IMAGE = pygame.image.load("Fondos/Background_01_720.png")
MENU_2_IMAGE = pygame.image.load("Fondos/Background_02_720.png")
BACKGROUND_IMAGE = pygame.image.load("Fondos/Background_03_720.png")
GAME_OVER_IMAGE = pygame.image.load("Fondos/Background_04_720.png")
PLAYER_IMAGE = pygame.image.load("Sprites/Player_02.png")
ENEMIES_IMAGE = pygame.image.load("Sprites/Enemy_02.png")
 
mixer.music.load("Sound/Menu_00.mp3")
mixer.music.play(-1)
Move_Sound = pygame.mixer.Sound("Sound/Audio/phaserUp5.ogg")
Collision_Sound = pygame.mixer.Sound("Sound/Audio/laser3.ogg")
 
Font_1 = pygame.font.Font("Fuentes/BLADRMF_.TTF", 20)
Font_2 = pygame.font.Font("Fuentes/BLADRMF_.TTF", 90)
Font_3 = pygame.font.Font("Fuentes/SwipeRaceDemo.ttf", 20)
Font_4 = pygame.font.Font("Fuentes/Miami.ttf", 25)
Font_5 = pygame.font.Font("Fuentes/Real Miami.ttf", 20)
 
enemy_size = 50
enemy_pos = [random.randint(0,WIDTH-enemy_size), 0]
enemy_list = [enemy_pos]
player_size = 50
player_pos = [WIDTH/2, 620]
 
SPEED = 10
 
clock = pygame.time.Clock()
 
score = 0
 
menu_1 = True
menu_2 = True
 
game_over = False
 
class player(pygame.sprite.Sprite):
        def __init__(self):
                super().__init__()
 
                self.PLAYER_IMAGE = pygame.image.load("Sprites/Player_02.png")
                self.player_size = 50
                self.player_pos = [WIDTH/2, 620]
 
def difficulty(score, SPEED):
 
	if score < 40:
		SPEED = 5
	elif score < 80:
		SPEED = 10
	elif score < 120:
		SPEED = 15
	else:
		SPEED = 20
	return SPEED
 
def draw_enemies(enemy_list):
 
	for enemy_pos in enemy_list:
		screen.blit(ENEMIES_IMAGE, (enemy_pos[0], enemy_pos[1], enemy_size, enemy_size))
 
def drop_enemies(enemy_list):
 
	delay = random.random()
 
	if len(enemy_list) < 8 and delay < 0.075:
		x_pos = random.randint(0,WIDTH-enemy_size)
		y_pos = 0
		enemy_list.append([x_pos, y_pos])
 
def update_enemies(enemy_list, score):
 
	for idx, enemy_pos in enumerate(enemy_list):
 
		if enemy_pos[1] >= 0 and enemy_pos[1] < HEIGHT:
			enemy_pos[1] += SPEED
		else:
			enemy_list.pop(idx)
			score += 1
	return score
 
def get_collision(player_pos, enemy_pos):
 
	p_x = player_pos[0]
	p_y = player_pos[1]
	e_x = enemy_pos[0]
	e_y = enemy_pos[1]
 
	if (e_x >= p_x and e_x < (p_x + player_size)) or (p_x >= e_x and p_x < (e_x + enemy_size)):
		if (e_y >= p_y and e_y < (p_y + player_size)) or (p_y >= e_y and p_y < (e_y + enemy_size)):
			return True
	return False
 
def collision_check(enemy_list, player_pos):
 
	for enemy_pos in enemy_list:
 
		if get_collision(enemy_pos, player_pos):
			return True
	return False
 
while menu_1:
 
        for event in pygame.event.get():
 
                if event.type == pygame.QUIT:
                        game_over = True
                        pygame.quit()
 
                if event.type == pygame.KEYDOWN:
                        if event.key == pygame.K_a:
                                Collision_Sound.play()
                                menu_1 = False
 
                if event.type == pygame.KEYDOWN:
                        if event.key == pygame.K_b:
                                game_over = True
                                pygame.quit()
 
        text_1 = "Cyberpunk"
        text_2 = "Press a to Play"
        text_3 = "Use the Arrow Keys to move"
        text_4 = "A Game by Alejandro Patino"
        text_5 = "A New Dawn"
        text_6 = "Press b to Exit"
        render_1 = Font_2.render(text_1, 1, ORANGE)
        render_2 = Font_3.render(text_2, 1, PURPLE)
        render_3 = Font_3.render(text_3, 1, BLUE)
        render_4 = Font_5.render(text_4, 1, PURPLE)
        render_5 = Font_3.render(text_5, 1, ORANGE)
        render_6 = Font_3.render(text_6, 1, ORANGE)
        screen.blit(MENU_1_IMAGE, [0,0])
        screen.blit(render_1, [WIDTH -920, HEIGHT -510])
        screen.blit(render_2, [WIDTH -835, HEIGHT -200])
        screen.blit(render_3, [WIDTH -1005, HEIGHT -170])
        screen.blit(render_4, [WIDTH -745, HEIGHT -60])
        screen.blit(render_5, [WIDTH -780, HEIGHT -420])
        screen.blit(render_6, [WIDTH -835, HEIGHT -140])
        pygame.display.flip()
 
while menu_2:
 
        for event in pygame.event.get():
 
                if event.type == pygame.QUIT:
                        game_over = True
                        pygame.quit()
 
                if event.type == pygame.KEYDOWN:
                        if event.key == pygame.K_a:
                                Collision_Sound.play()
                                menu_2 = False
 
        text_1 = "In a near future..."
        text_2 = "...the androids have taken over the cities..."
        text_3 = "...you can run..."
        text_4 = "...but there is no scape."
        text_5 = "Press A to Play"
        render_1 = Font_4.render(text_1, 1, ORANGE)
        render_2 = Font_4.render(text_2, 1, ORANGE)
        render_3 = Font_4.render(text_3, 1, ORANGE)
        render_4 = Font_4.render(text_4, 1, ORANGE)
        render_5 = Font_5.render(text_5, 1, PURPLE)
        screen.blit(MENU_2_IMAGE, [0,0])
        screen.blit(render_1, [WIDTH -940, HEIGHT -480])
        screen.blit(render_2, [WIDTH -950, HEIGHT -440])
        screen.blit(render_3, [WIDTH -940, HEIGHT -280])
        screen.blit(render_4, [WIDTH -940, HEIGHT -240])
        screen.blit(render_5, [WIDTH -220, HEIGHT -100])
        pygame.display.flip()
 
 
while not game_over:
 
	for event in pygame.event.get():
		if event.type == pygame.QUIT:
			sys.exit()
 
		if event.type == pygame.KEYDOWN:
			x = player_pos[0]
			y = player_pos[1]
 
			if event.key == pygame.K_LEFT:
				x -= 50
				Move_Sound.play()
			elif event.key == pygame.K_RIGHT:
				x += 50
				Move_Sound.play()
 
			player_pos = [x,y]
 
	drop_enemies(enemy_list)
	score = update_enemies(enemy_list, score)
	SPEED = difficulty(score, SPEED)
 
	text = "Score:" + str(score)
	render = Font_3.render(text, 1, PURPLE)
	screen.blit(BACKGROUND_IMAGE, [0,0])
	screen.blit(render, [WIDTH -1150, HEIGHT -35])
	screen.blit(PLAYER_IMAGE, [player_pos, player_pos])
 
	if collision_check(enemy_list, player_pos):
		game_over = True
		Collision_Sound.play()
		break
 
	draw_enemies(enemy_list)
	clock.tick(50)
	pygame.display.update()
 
if game_over:
 
    game_over = False
 
    while not game_over:
 
        for event in pygame.event.get():
                if event.type == pygame.QUIT:
                        game_over = True
                        pygame.quit()
 
                if event.type == pygame.KEYDOWN:
                        if event.key == pygame.K_b:
                                game_over = True
                                pygame.quit()
 
        text_1 = "Game Over"
        text_2 = "Press B to Exit Game"
        text_3 = "Thanks for Playing!"
        render_1 = Font_2.render(text_1, 1, PURPLE)
        render_2 = Font_3.render(text_2, 1, ORANGE)
        render_3 = Font_5.render(text_3, 1, BLUE)
        screen.blit(GAME_OVER_IMAGE, [0,0])
        screen.blit(render_1, [WIDTH -940, HEIGHT -600])
        screen.blit(render_2, [WIDTH -890, HEIGHT -100])
        screen.blit(render_3, [WIDTH -715, HEIGHT -510])
        pygame.display.flip()
 
    pygame.quit()
    sys.exit()
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder