Задать вопрос
@kanto

Нерабочий код из книги Python Crash Course?

Изучаю азы 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
  • Вопрос задан
  • 2838 просмотров
Подписаться 2 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 2
@Rifat_Zabirov
привет. Столкнулся с тем же. На самом деле надо писать
self.ship=Ship(self)
Ответ написан
@ElsKazi
забавно что в книге оч много косяков
так на стр 154 - нет Age=''
на 175 - не верный аргумент self.manufacturer, надо self.make
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы