@MoRo67

Ошибка Traceback. Как исправить?

Вот код
import pygame
import sys
from settings_of_game import Settings
from ship import Ship

class AlienInvasion:
    """"Класс для управления ресурсами и поведением игры"""

    def __init__(self):
        """"Инициализация игры и создание игровых ресурсов"""
        pygame.init()
        self.settings_of_game = Settings()

        self.screen = pygame.display.set_mode((self.settings_of_game.screen_width, self.settings_of_game.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_of_game.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.screen.get_rect()

        #Загружам изображение корабля
        self.image = pygame.image.load('images/ship.png')
        self.rect = self.image.get_rect()
        #Каждый новый корабль появлеяется у нижнего края экрана
        self.rect.midbottom = self.screen_rect.midbottom

    def blitme(self):
        """Рисует корабль в текущей позиции"""
        self.screen.blit(self.image, self.rect)


Вот ошибка
Traceback (most recent call last):
  File "D:\pythonProject\main.py", line 38, in <module>
    ai = AlienInvasion()
  File "D:\pythonProject\main.py", line 17, in __init__
    self.ship = Ship(screen)
NameError: name 'screen' is not defined
  • Вопрос задан
  • 172 просмотра
Решения вопроса 1
@MoRo67 Автор вопроса
Надо в self.ship = Ship(screen) вместо 'screen' написать 'self'.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Lord_of_Rings
@Lord_of_Rings
Python developer
Вместо screen надо self.screen

import pygame
import sys
from settings_of_game import Settings
from ship import Ship

class AlienInvasion:
    """"Класс для управления ресурсами и поведением игры"""

    def __init__(self):
        """"Инициализация игры и создание игровых ресурсов"""
        pygame.init()
        self.settings_of_game = Settings()

        self.screen = pygame.display.set_mode((self.settings_of_game.screen_width, self.settings_of_game.screen_height))
        pygame.display.set_caption('Alien Invasion')

        self.ship = Ship(self.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_of_game.bg_color)
            self.ship.blitme()

            #Отображение последнего прорисованного экрана.
            pygame.display.flip()

if __name__ == '__main__':
    #Создание экземпляра и запуск игры
    ai = AlienInvasion()
    ai.run_game()
Ответ написан
@bituke
17 строка, исправь на:
self.ship = Ship(self.screen)
и читай, что тебе пишут в консоли
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы