Czemu gdy zeruje atrybut score w lini 73 a on nie zeruje się?

0

czemu gdy zeruje atrybut score w lini 73 a on nie zeruje się?

import pygame
from random import randint

pygame.init()
window = pygame.display.set_mode((600, 800))
background = pygame.image.load("tło.png")

class Player:
    def __init__(self):
        self.x = 0
        self.y = 600
        self.speed = 5
        self.max_bullets = 1
        self.image = pygame.image.load("Gracz.png")
        self.bullets = []

    def tick(self, keys):
        if keys[pygame.K_a]:
            self.x -= self.speed
        if keys[pygame.K_d]:
            self.x += self.speed
        if keys[pygame.K_RIGHT]:
            self.x += self.speed
        if keys[pygame.K_LEFT]:
            self.x -= self.speed
        if keys[pygame.K_SPACE] and len(self.bullets) < self.max_bullets:
            self.shoot_up()

        for bullet in self.bullets[:]:
            if bullet.y < 0:
                self.bullets.remove(bullet)

    def draw(self):
        window.blit(self.image, (self.x, self.y))
        for bullet in self.bullets:
            bullet.draw()
        pygame.display.update()

    def shoot_up(self):
        bullet = Bullet(self.x, self.y)
        self.bullets.append(bullet)


class Bullet:
    def __init__(self, x=0, y=0):
        self.x = x
        self.y = y
        self.speed = 5
        self.image = pygame.image.load("pocisk.png")
        self.height = self.image.get_height()
        self.width = self.image.get_width()
        self.hitbox = pygame.rect.Rect(self.x, self.y, self.width, self.height)

    def tick(self):
        self.y -= self.speed
        self.hitbox = pygame.rect.Rect(self.x, self.y, self.width, self.height)

    def draw(self):
        window.blit(self.image, (self.x, self.y))

class Asteroid:
    def __init__(self):
        self.x = randint(0, 400)
        self.y = -150
        self.speed = 2
        self.image = pygame.image.load("meteor.png")
        self.height = self.image.get_height()
        self.width = self.image.get_width()
        self.hitbox = pygame.rect.Rect(self.x, self.y, self.width, self.height)
        self.score = 0

    def reset(self):
        self.score = 0
        self.y = -150

    def tick(self):
        self.hitbox = pygame.rect.Rect(self.x, self.y, self.width, self.height)
        self.y += 1
        if self.y >= 500:
            self.reset()

    def draw(self):
        window.blit(self.image, (self.x, self.y))

def main():
    run = True
    clock = 0
    asteroids = []
    player = Player()
    bullet = Bullet()
    while run:
        clock += pygame.time.Clock().tick(60) / 1000
        print(clock)
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                run = False
        keys = pygame.key.get_pressed()
        if clock >= 1:
            clock = 0
            asteroids.append(Asteroid())

        player.tick(keys)
        for asteroid in asteroids:
            asteroid.tick()

        for asteroid in asteroids:
            if bullet.hitbox.colliderect(asteroid.hitbox):
                asteroid.y = -500
                bullet.y = -550
                asteroid.score += 1

        window.blit(background, (0, 0))
        teksiciorek2 = pygame.font.Font.render(pygame.font.SysFont("Kenney Mini Square", 48), f"Punkty: {sum(asteroid.score for asteroid in asteroids)}",True, (255, 213, 0))
        window.blit(teksiciorek2, (0, 0))
        player.draw()
        for asteroid in asteroids:
            asteroid.draw()
        for bullet in player.bullets:
            bullet.tick()
        pygame.display.update()

if __name__ == "__main__":
    main()

screenshot-20240428195908.png

0

A chcesz resetować tylko score dla danej asteroidy? Bo to w tej chwili robisz. Czy dla wszystkich?

1 użytkowników online, w tym zalogowanych: 0, gości: 1