Изучаю азы Python по Python Crash Course и наткнулся на проблему не рабочего кода при выводе корабля на экран.
Основной модуль игры
import pygame
import sys
from setar import Settings
from ship import Ship
class AlienInvasion:
"""Класс для управления ресурсами и поведением игры."""
def __init__(self):
"""Инициализирует игру и создает игровые ресурсы."""
pygame.init()
self.Settings = Settings()
#Задаем разрешение из настроек
self.screen = pygame.display.set_mode(
(self.Settings.screen_width, self.Settings.screen_height))
pygame.display.set_caption("Alien Invasion")
#ЗДЕСЬ ОШИБКА ПРИ ОБЪЯВЛЕНИИ ЭКЗЕМПЛЯРА КЛАССА В КОНСТРУКТОРЕ
self.ship=Ship(screen)
def run_game(self):
"""Запуск основного цикла игры."""
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
# При каждом проходе цикла перерисовывается экран.
self.screen.fill(self.Settings.bg_color)
self.ship.blitme()
# Отображение последнего прорисованного экрана.
pygame.display.flip()
if __name__ == '__main__':
# Создание экземпляра и запуск игры.
ai = AlienInvasion()
ai.run_game()
Модуль с классом Ship
import pygame
class Ship():
"""Класс для управления кораблем."""
def __init__(self,ai_game):
"""Инициализирует корабль и задает его начальную позицию."""
self.screen =ai_game.screen
self.screen_rect = ai.game.get_rect()
# Загружает изображение корабля и получает прямоугольник.
self.image = pygame.image.load('Загрузки/ship.bmp')
self.rect = self.image.get_rect()
# Каждый новый корабль появляется у нижнего края экрана.
self.rect.midbottom = self.screen_rect.midbottom
def blitme(self):
#Рисует корабль в текущей позиции.
self.screen.blit(self.image, self.rect)
Настройки(setar)
class Settings():
def __init__(self):
self.screen_width = 1280#Разрешение поверхности
self.screen_height = 720
self.bg_color=(32, 178, 170)#Цвет
И сама ошибка
Traceback (most recent call last):
File "C:/Python/venv/alien_invasion/alien_invasion.py", line 35, in
ai = AlienInvasion()
File "C:/Python/venv/alien_invasion/alien_invasion.py", line 16, in __init__
self.ship=Ship(screen)
NameError: name 'screen' is not defined
Process finished with exit code 1