Я хочу добавить бомбу в мою игру с птицами, но она не обнаружит столкновения. вот код - PullRequest
3 голосов
/ 03 мая 2020

Я хочу добавить бомбу в мою игру с птицами, но она не обнаружит столкновения. Я не могу обнаружить птицу, если она вступит в контакт с бомбой Бомба обнаруживается, но я не могу заставить ее обнаружить столкновение с птицей, вот код, который у меня есть до сих пор. Я не классифицировал новый объект для бомбы, я положил его с трубами. Я думаю, что есть проблема с colliderect. Если вам нужны изображения, пожалуйста, сообщите мне. Кто-нибудь может мне помочь? Я был бы очень благодарен. Заранее спасибо.

import pygame
from pygame.locals import *  # noqa
import sys
import random


class FlappyBird:
    def __init__(self):
        self.screen = pygame.display.set_mode((400, 708))
        self.bird = pygame.Rect(65, 50, 50, 50)
        self.background = pygame.image.load("background.png")
        self.birdSprites = [pygame.image.load("1.png"),
                            pygame.image.load("2.png"),
                            pygame.image.load("dead.png")]
        self.wallUp = pygame.image.load("bottom.png")
        self.wallDown = pygame.image.load("top.png")
        self.bomb = pygame.image.load("bomb.png")
        self.bombx = 600
        self.gap = 130
        self.wallx = 400
        self.birdY = 350
        self.jump = 0
        self.jumpSpeed = 10
        self.gravity = 5
        self.dead = False
        self.sprite = 0
        self.counter = 0
        self.offset = random.randint(-110, 110)

    def updateWalls(self):
        self.wallx -= 2
        if self.wallx < -80:
            self.wallx = 400
            self.counter += 1
            self.offset = random.randint(-110, 110)
        self.bombx -= 2
        if self.bombx < -80:
            self.bombx = 600
            self.counter += 1
            self.offset = random.randint(-110, 110)


    def birdUpdate(self):
        if self.jump:
            self.jumpSpeed -= 1
            self.birdY -= self.jumpSpeed
            self.jump -= 1
        else:
            self.birdY += self.gravity
            self.gravity += 0.2
        self.bird[1] = self.birdY
        upRect = pygame.Rect(self.wallx,
                             360 + self.gap - self.offset + 10,
                             self.wallUp.get_width() - 10,
                             self.wallUp.get_height())
        downRect = pygame.Rect(self.wallx,
                               0 - self.gap - self.offset - 10,
                               self.wallDown.get_width() - 10,
                               self.wallDown.get_height())
        bombRect = pygame.Rect(self.bombx,
                               0 - self.gap - self.offset - 10,
                               self.bomb.get_width() - 10,
                               self.bomb.get_height()
                               )
        if upRect.colliderect(self.bird):
            self.dead = True
        if downRect.colliderect(self.bird):
            self.dead = True
        if bombRect.colliderect(self.bird):
            self.bomb = pygame.image.load("bombexplode")
            self.dead = True
        if not 0 < self.bird[1] < 720:
            self.bird[1] = 50
            self.birdY = 50
            self.dead = False
            self.counter = 0
            self.wallx = 400
            self.offset = random.randint(-110, 110)
            self.gravity = 5

    def run(self):
        clock = pygame.time.Clock()
        pygame.font.init()
        font = pygame.font.SysFont("Arial", 50)
        while True:
            clock.tick(60)
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    sys.exit()
                if (event.type == pygame.KEYDOWN or event.type == pygame.MOUSEBUTTONDOWN) and not self.dead:
                    self.jump = 17
                    self.gravity = 5
                    self.jumpSpeed = 10

            self.screen.fill((255, 255, 255))
            self.screen.blit(self.background, (0, 0))
            self.screen.blit(self.wallUp,
                             (self.wallx, 360 + self.gap - self.offset))
            self.screen.blit(self.wallDown,
                             (self.wallx, 0 - self.gap - self.offset))
            self.screen.blit(self.bomb,
                             (self.bombx, 0 - self.gap - self.offset))
            self.screen.blit(font.render(str(self.counter),
                                         -1,
                                         (255, 255, 255)),
                             (200, 50))
            if self.dead:
                self.sprite = 2
            elif self.jump:
                self.sprite = 1
            self.screen.blit(self.birdSprites[self.sprite], (70, self.birdY))
            if not self.dead:
                self.sprite = 0
            self.updateWalls()
            self.birdUpdate()
            pygame.display.update()

if __name__ == "__main__":
    FlappyBird().run()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...