обнаружение столкновения python?

Поэтому я работаю над игрой на python для проекта. У меня теперь проблемы: если я помещу препятствие в игре, я не могу заставить ее реагировать на мою картинку, как когда моя фотография сталкивается с ней, игра заканчивается. Я был в этом довольно давно, но я не могу понять код. Любая помощь будет очень признательна. Мне очень нужна помощь в этом. Пожалуйста, не то, что я новичок, и я только начал изучать python a месяц назад. Так что попробуйте разобраться. Я приложил код ниже.

import pygame, random, sys from pygame.locals import * BACKGROUNDCOLOR = (181, 230, 29) FPS = 30 pixels = 5 pygame.init() mainClock = pygame.time.Clock() windowSurface = pygame.display.set_mode((990, 557)) pygame.display.set_caption('Clumsy Claire :D') background = pygame.image.load('grass.jpg') backgroundRect = background.get_rect() size = (990, 557) background.get_size() image = pygame.image.load('snail 2.png') imageRect = image.get_rect() stone1 = pygame.image.load('rock.PNG') stone1Rect = stone1.get_rect() stone2 = pygame.image.load('rock.PNG') stone2Rect = stone2.get_rect() BROWN = (128,64,0) pygame.draw.line(background, BROWN, (98, 555), (98,69), 12) pygame.draw.line(background, BROWN, (98, 16), (98,1), 12) pygame.draw.line(background, BROWN, (94, 3), (283, 3),12) pygame.draw.line(background, BROWN, (278, 457), (278, 3),12) pygame.draw.line(background, BROWN, (278, 554), (278, 512),12) pygame.draw.line(background, BROWN, (274, 554), (470, 554),12) pygame.draw.line(background, BROWN, (465, 554), (465, 90),12) pygame.draw.line(background, BROWN, (465, 35), (465, 0),12) pygame.draw.line(background, BROWN, (465, 3), (657, 3),12) pygame.draw.line(background, BROWN, (652,555 ), (652, 502),12) pygame.draw.line(background, BROWN, (652, 449), (652, 0),12) pygame.draw.line(background, BROWN, (648, 553), (844, 553),12) pygame.draw.line(background, BROWN, (838, 553 ), (838, 138),12) pygame.draw.line(background, BROWN, (838, 84 ), (838, 0),12) while True: imageRect.topleft = (10,488) moveLeft = False moveRight = False moveUp = False moveDown = False while True: for event in pygame.event.get(): if event.type == QUIT: pygame.quit() sys.exit() if event.type == KEYDOWN: if event.key == K_LEFT: moveLeft = True if event.key == K_RIGHT: moveRight = True if event.key == K_UP: moveUp = True if event.key == K_DOWN: moveDown = True if event.type == KEYUP: if event.key == K_LEFT: moveLeft = False if event.key == K_RIGHT: moveRight = False if event.key == K_UP: moveUp = False if event.key == K_DOWN: moveDown = False if moveLeft and imageRect.left > 0: imageRect.move_ip(-1 * pixels, 0) if moveRight and imageRect.right < 990: imageRect.move_ip(pixels, 0) if moveUp and imageRect.top > 0: imageRect.move_ip(0, -1 * pixels) if moveDown and imageRect.bottom < 557: imageRect.move_ip(0, pixels) windowSurface.blit(background, backgroundRect) windowSurface.blit(image, imageRect) rock1 = background.blit(stone1,(658,337)) rock2 = background.blit(stone2,(225,150)) pygame.display.update() mainClock.tick(FPS) 

Вы также можете добавить функцию colliderect к вашему коду. Прямо сейчас у вас нет возможности протестировать столкновения. Вставьте это ниже своего кода:

 if imageRect.colliderect(stone1Rect): print('Game Over') pygame.quit() if imageRect.colliderect(stone2Rect): print('Game Over') pygame.quit() 

Этот код здесь:

 rock1 = background.blit(stone1,(658,337)) rock2 = background.blit(stone2,(225,150)) 

также необходимо изменить на это:

 windowSurface.blit(stone1, (658, 337)) windowSurface.blit(stone2, (225, 150)) 

Причина, по которой нам нужно изменить вышесказанное, заключается в следующем: ваш код будет блить на фоновом изображении вместо окна; что является плохой практикой.

По какой-то причине, я предполагаю, что вы изучаете python с inventwithpython.org; D Так я тоже это узнал (если я правильно понял, D)

Если вам нужна дополнительная помощь или у вас есть вопросы, просто комментируйте ниже. Удачи!