K
K
kanto2020-05-26 12:24:30
Python
kanto, 2020-05-26 12:24:30

Non-working code from Python Crash Course book?

I am learning the basics of Python in the Python Crash Course and came across a problem with non-working code when displaying a ship on the screen.
Main game module

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 class module
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)

Settings(setar)
class Settings():
    def __init__(self):
        self.screen_width = 1280#Разрешение поверхности
        self.screen_height = 720
        self.bg_color=(32, 178, 170)#Цвет

And the
Traceback error itself (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

Answer the question

In order to leave comments, you need to log in

3 answer(s)
D
Dr. Bacon, 2020-05-26
@kanto

If you copied it by hand, then check it, most likely you didn’t write it right or there was a typo in the book.

R
Rifat_Zabirov, 2020-05-30
@Rifat_Zabirov

Hi. Faced the same. Actually, you need to write
self.ship=Ship(self)

E
ElsKazi, 2020-11-13
@ElsKazi

it's funny that there are a lot of jambs in the book
, so on page 154 - no Age = ''
on 175 - the self.manufacturer argument is not correct, you need self.make

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question