Перепробовал много различных способов создания нового ряда, после удаления предыдущего. Ничего не выходит
Задание из книги Эрика Метиза
13-3. Капли: найдите изображение дождевой капли и создайте сетку из капель. Капли
должны постепенно опускаться вниз и исчезать у нижнего края экрана.
13-4. Дождь: измените свой код в упражнении 13-3, чтобы при исчезновении ряда капель
у нижнего края экрана новый ряд появлялся у верхнего края и начинал падение.
Основной файл
import sys
import pygame
from settings_stars import Settings
import functions_stars as fs
from pygame.sprite import Group
def run_game():
pygame.init()
settings = Settings()
screen = pygame.display.set_mode((settings.screen_width, settings.screen_height))
pygame.display.set_caption(settings.display_name)
patrik = Group()
fs.create_fleet(settings, screen, patrik)
while True:
fs.check_ivents()
fs.update_drop(settings, patrik, screen)
fs.update_screen(settings, screen, patrik)
pygame.display.flip()
run_game()
Функции игры, где происходят все основные события
Конкретно проблема в функции delete_drops, после удаления ряда капель, я хочу чтобы она появлялась вновь сверху экрана
import sys
import pygame
from patrik import Patrik
import random
def check_ivents():
"""Обрабатывает нажатия клавиш и события мыши."""
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
def update_screen(settings, screen, patrik):
"""Обновляет изображение на экране и отображает новый экран."""
screen.fill(settings.bg_color)
patrik.draw(screen)
def get_number_aliens_x(settings, drop_width):
"""Вычисляет количество пришельцев в ряду."""
available_space_x = settings.screen_width - (2 * drop_width)
number_drop = int(available_space_x / (2 * drop_width))
return number_drop
def get_number_rows(settings, drop_height):
"""Вычисляет количество рядов."""
available_space_y = settings.screen_height - (2 * drop_height)
number_rows = int(available_space_y / (2 * drop_height))
return number_rows
def create_alien(settings, screen, patriks, number_drop, number_rows):
"""Создаёт пришельца и размещает его в ряду"""
patrik = Patrik(settings, screen)
patrik_width = patrik.rect.width
patrik.rect.x = patrik_width + 2 * patrik_width * number_drop
patrik.rect.y = patrik.rect.height + 2 * patrik.rect.height * number_rows
patriks.add(patrik)
def create_fleet(settings, screen, patriks):
"""Создаёт флот пришельцев"""
patrik = Patrik(settings, screen)
number_drop = get_number_aliens_x(settings, patrik.rect.width)
number_rows = get_number_rows(settings, patrik.rect.height)
for row_number in range(number_rows):
for patrik_number in range(number_drop):
#Создание патрика и размещение его в ряду.
create_alien(settings, screen, patriks, patrik_number, row_number)
def check_fleet_edges(settings, patriks, screen):
"""Регирует на достижение краёв экрана"""
for patrik in patriks.sprites():
if patrik.check_edges():
delete_drops(settings, patriks, screen)
def delete_drops(settings, patriks, screen):
screen_rect = screen.get_rect()
for patrik in patriks.sprites():
if patrik.rect.y == 800:
patrik.rect.y = screen_rect.rect.top
def update_drop(settings, patriks, screen):
"""Проверяет достиг ли капли конца экрана"""
check_fleet_edges(settings, patriks, screen)
patriks.update()
класс представляющий капельку
import pygame
from pygame.sprite import Sprite
import random
from settings_stars import Settings
class Patrik(Sprite):
"""Класс представляющий капельку"""
def __init__(self, settins, screen):
"""Инициализирует капельку и задаёт его начальную позицию"""
super(Patrik, self).__init__()
self.screen = screen
self.settings = settins
#Загрузка изображение капельки и назначение атрибута rect.
self.image = pygame.image.load('images/gold_drop.png')
self.rect = self.image.get_rect()
#Каждый новая капелька появляется в левом верхнем углу экрана
self.rect.x = self.rect.width
self.rect.y = self.rect.height
#Сохранение точной позиции пришельца
self.x = float(self.rect.x)
def blitme(self):
"""Выводит пришельца в текущем положении."""
self.screen.blit(self.image, self.rect)
def check_edges(self):
"""Возвращает True, если капли находятся у края экрана."""
screen_rect = self.screen.get_rect()
if self.rect.bottom >= screen_rect.bottom:
return True
elif self.rect.left <= 0:
return True
def update(self):
"""Перемещает капли вниз"""
self.rect.y += self.settings.drop_speed_factor
И настройки
class Settings():
def __init__(self):
self.screen_width = 1200
self.screen_height = 800
self.bg_color = (0, 84, 166)
self.display_name = ("Stars")
#скорость капелек
self.drop_speed_factor = 1
Буду очень благодарен за подсказки и советы! Только учусь искусству программирования