Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите найти ошибку в игре на pygame

Вадим Тагиров Ученик (34), открыт 3 недели назад
Есть игрок и противник. Я использовал sys.exit(), чтобы завершать программу, если игрок соприкасается с противником, но программа завершается до того, как они соприкасаются. Что не так? Чатгпт не решает проблему, сам тоже пытался, не знаю как исправить.
 import pygame 
import sys
fps = pygame.time.Clock()

pygame.init()
screen = pygame.display.set_mode((1280, 720))
pygame.display.set_caption('my game')
bg = pygame.image.load('images/bg.jpg')
walk_rigth = [pygame.image.load('images/player/stay.png'),
pygame.image.load('images/player/go.png')]
walk_left = [pygame.image.load('images/player/stay_left.png'),
pygame.image.load('images/player/go_left.png')]

player_anim_count = 0
bg_x = 0
player_speed = 5
player_x = 150
player_y = 450
is_jump = False
jump_count = 10

ghost = pygame.image.load('images/player/ghost.png')
ghost_x = 800
ghost_timer = pygame.USEREVENT + 1
pygame.time.set_timer(ghost_timer, 3000)
ghost_list_in_game = []

running = True
while running:
screen.blit(bg, (bg_x, 0))
screen.blit(bg, (bg_x + 1280, 0))
player_rect = walk_left[0].get_rect(topleft=(player_x, player_y))

if ghost_list_in_game:
for el in ghost_list_in_game:
screen.blit(ghost, el)
el.x -= 10

if player_rect.colliderect(el):
print('you lose')
sys.exit()
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
screen.blit(walk_left[player_anim_count], (player_x, player_y))
else:
screen.blit(walk_rigth[player_anim_count], (player_x, player_y))

if keys[pygame.K_LEFT] and player_x > 50:
player_x -= player_speed
elif keys[pygame.K_RIGHT] and player_x < 1200:
player_x += player_speed

if not is_jump:
if keys[pygame.K_SPACE]:
is_jump = True
else:
if jump_count >= -10:
if jump_count > 0:
player_y -= (jump_count ** 2) / 2
else:
player_y += (jump_count ** 2) / 2
jump_count -= 1
else:
is_jump = False
jump_count = 10

if player_anim_count == 1:
player_anim_count = 0
else:
player_anim_count += 1

bg_x -= 5
if bg_x == -1280:
bg_x = 0

pygame.display.update()
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
pygame.quit()
if event.type == ghost_timer:
ghost_list_in_game.append(ghost.get_rect(topleft=(620, 520)))

fps.tick(20)

3 ответа
Максим Макасин Профи (558) 3 недели назад
Несколько рекомендаций, которые могут помочь решить проблему с завершением программы в Pygame:

Проверить, что все запущенные потоки или процессы правильно завершены. Перед выходом из программы нужно присоединиться или завершить все запущенные потоки или процессы. 1
Вызвать функцию pygame.quit() в конце программы. Она освободит все ресурсы, используемые Pygame. 1
Проверить, что в программе нет бесконечных циклов или рекурсивных вызовов функций. В циклах должны быть определены правильные условия выхода, а у функций — условия выхода. 1
Если программа работает в отдельном потоке или процессе, перед выходом из программы нужно правильно завершить этот поток или процесс. 1
Также для закрытия окна Pygame вместо sys.exit() можно использовать pygame.quit()
Ocidn Знаток (275) 3 недели назад
в этой библиотеки не оч прошарен, но ты пробовывал использовать другой промт для чата гпт?
Вадим ТагировУченик (34) 3 недели назад
Да, разные чат гпт пробовал.
Ocidn Знаток (275) Вадим Тагиров, я имел виду промт (сообщение)
Вадим ТагировУченик (34) 3 недели назад
имеешь в виду несколько раз задать вопрос?
Вадим ТагировУченик (34) 3 недели назад
player_rect есть, а ghost_rect нет
Ocidn Знаток (275) Вадим Тагиров, как сработает отпишитесь пожалуйста, хочется знатьс помог хоть чемто или нет
Wang LingУченик (175) 3 недели назад
 https://deepai.org/chat 
этот чатгпт смог помочь.
Ocidn Знаток (275) Wang Ling, харош, надо было png обрещать получается? за андертейл уважуха кстати
Emir U. Ученик (124) 3 недели назад
там есть ошибка, которая может повлиять на производительность, привидения, тоесть ghost выходят за экран и остаются там, чем больше они там будут оставаться за пределами экрана, тем меньше фпс может быть
Вадим ТагировУченик (34) 3 недели назад
эта проблема пока не в приоритете
Emir U. Ученик (124) Вадим Тагиров, ну кроме этой ошибки я пока ничего в нем не нашёл
Похожие вопросы