Я пытался создать меню для своей игры. Он работает в первый раз, когда я открываю игру, и когда игрок умирает, он входит в menu()
, как и ожидалось. Но когда я нажимаю «начать игру» после того, как игрок умер один раз, он выполняет main()
менее секунды, а затем возвращается к menu()
. Вот как я сделал меню
def menu():
controls = pygame.image.load(r"C:\Users\rahul\OneDrive\Documents\A level python codes\final game\controls.png").convert()
controls.set_colorkey((0, 0, 0))
controls = pygame.transform.scale(controls, (1200, 600))
back_rect = pygame.Rect(800, 550, 400, 50)
back_rect_border = pygame.Rect(800, 550, 400, 50)
start_rect = pygame.Rect( 400, 200, 400, 100)
start_rect_border = pygame.Rect( 400, 200, 400, 100)
controls_rect = pygame.Rect(400, 310, 400, 100)
controls_rect_border = pygame.Rect(400, 310, 400, 100)
x = 1200
loop = True
display_controls = False
while loop:
D.fill((255,173,96))
events = pygame.event.get()
mouse_pos = pygame.mouse.get_pos()
for event in events:
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if not display_controls:
if start_rect.collidepoint(mouse_pos):
start_color = (200, 150, 0)
for event in events:
if event.type == pygame.MOUSEBUTTONDOWN:
loop = False
run_menu = False
else:
start_color = (100, 200, 150)
if controls_rect.collidepoint(mouse_pos):
control_color = (200, 150, 0)
for event in events:
if event.type == pygame.MOUSEBUTTONDOWN:
display_controls = True
else:
control_color = (100, 100, 150)
pygame.draw.rect(D, start_color, (start_rect))
pygame.draw.rect(D, control_color, (controls_rect))
pygame.draw.rect(D, (0, 0, 0), (start_rect_border), 3)
pygame.draw.rect(D, (0, 0, 0), (controls_rect_border), 3)
write(50, "START GAME", (255, 255, 255), 404, 220)
write(50, "CONTROLS", (255, 255, 255), 404, 330)
if display_controls:
D.blit(controls, (x, 0))
x -= 10
if x<= 0:
x = 0
if back_rect.collidepoint(mouse_pos):
back_color = (200, 180, 182)
for event in events:
if event.type == pygame.MOUSEBUTTONDOWN:
display_controls = False
x = 1200
else:
back_color = (254, 219, 183)
pygame.draw.rect(D, back_color, (back_rect))
pygame.draw.rect(D, (0, 0, 0), (back_rect_border), 3)
write(25, "BACK TO MAIN MENU", (255, 255, 255), 802, 555)
win.flip()
Теперь в моем if __name__ == "__main__":
я запустил меню и основную функцию, как это
if __name__ == "__main__":
pygame.init()
menu()
main()
main()
это просто набор вызовов функций :
def main():
def handle_events(events):
for event in events:
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if event.type == pygame.MOUSEBUTTONDOWN:
game.bullets.append(Bullet())
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_q:
if not game.fireballs:
game.fireballs.append(Fire_ball())
while True:
events = pygame.event.get()
handle_events(events)
D.fill((254, 219, 183))
game_map.draw()
player.draw()
player.move()
player.camera()
player.boundries()
player.jetpack()
game.fall_player()
player.draw_jet_bar()
player.draw_health_bar()
player.dead()
game.shoot_bullet()
game.shoot_fireball()
game.destroy_bullet()
game.spawn_enemy()
game.move_enemy()
check_fireball_hit()
game.destroy_fireballs()
check_bullet_hit()
print_stats()
mouse.update()
scroll[0] += 1
win.flip()
Функция player.dead()
в main()
должна вызывать меню после смерти игрока (а это часть, которая не работает), и выглядит это так:
def dead(self):
if self.hp <= 0:
menu()
Я впервые создаю меню для игры, поэтому я не уверен, что будет лучшим способом сделать это. Она перестала работать после смерти игрока, что означает, что проблема в функции player.dead()
, которая вызывает меню. Любая помощь будет оценена. Спасибо
Редактировать: я понял, потому что у игрока все еще 0 или меньше 0 в следующий раз, когда я нажимаю кнопку запуска игры, из-за чего меню запускается. Теперь мой вопрос: как мне сбросить всю статистику в игре после смерти игрока? Есть ли какой-нибудь способ начать свободное sh выполнение основного заново после смерти игрока?