Python. Name 'screen' is not defined

ivan_Russia

Новичок
Пользователь
Июн 6, 2020
5
0
1
Я делал игру по книге. И столкнулся с проблемой.
Вот программа:

import sys
import pygame

from settings 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")

bg_color = (230, 230, 230)

self.ship = Ship(screen)

def run_game(self):
while True:
self._check_events()
self._update_screen()

def _check_events(self):
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()

def _update_screen(self):
self.screen.fill(self.settings.bg_color)
self.ship.blitme()

pygame.display.flip()


if __name__ == '__main__':
ai = AlienInvasion()
ai.run_game()

Вот программа Ship.py:

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/ship2.bmp')
self.rect = self.image.get_rect()

self.rect.midbottom = self.screen_rect.midbottom

def blitme(self):
self.screen.blit(self.image, self.rect)

Ошибка:

NameError: name 'screen' is not defined.
Строчка self.ship = Ship(screen)

Как это исправить?
 

ivan_Russia

Новичок
Пользователь
Июн 6, 2020
5
0
1
уже не надо. В книге была опечатка. Надо было вместо screen писать self
 
Последнее редактирование:

Марина

Новичок
Пользователь
Июн 8, 2020
5
0
1
Привет! То есть вот здесь self.ship = Ship(screen) вы поменяли на self.ship = Ship(self) ?или в каком то другом месте кода?Напишите, пожалуйста, а то я тоже застряла. Спасибо
 

ivan_Russia

Новичок
Пользователь
Июн 6, 2020
5
0
1
Привет! То есть вот здесь self.ship = Ship(screen) вы поменяли на self.ship = Ship(self) ?или в каком то другом месте кода?Напишите, пожалуйста, а то я тоже застряла. Спасибо
У меня было ship = Ship(screen). А я поменял на ship = Ship(self)
 

Марина

Новичок
Пользователь
Июн 8, 2020
5
0
1
Спасибо.Правда все равно не выходит.
 

ivan_Russia

Новичок
Пользователь
Июн 6, 2020
5
0
1
Спасибо.Правда все равно не выходит.
А там другую ошибку высвечивает?
 

Марина

Новичок
Пользователь
Июн 8, 2020
5
0
1
Вон сколько всего! ну и эту тоже
Traceback (most recent call last):
File "C:\Users\user\Documents\phiton\alien_invasion\alien_invasion.py", line 31, in <module>
ai = AlienInvasion()
File "C:\Users\user\Documents\phiton\alien_invasion\alien_invasion.py", line 14, in __init__
ship = Ship(self)
File "C:\Users\user\Documents\phiton\alien_invasion\ship.py", line 7, in __init__
self.screen_rect - ai_game.screen.get_rect()
AttributeError: 'Ship' object has no attribute 'screen_rect'
 

Марина

Новичок
Пользователь
Июн 8, 2020
5
0
1
Добрый вечер!исправила как ты и написал, получилось. вот только странность: корабль становится виден только когда подвигаешь вниз экран, а отпустишь мышь - исчезает. Не было такого у тебя? А то я сейчас делаю чтоб его двигать туда сюда и вот такая хрень.Если не трудно, ответь, пожалуйста, буду очень рада
 

Марина

Новичок
Пользователь
Июн 8, 2020
5
0
1
ОО сама дошла
 

ivan_Russia

Новичок
Пользователь
Июн 6, 2020
5
0
1
 

АндрейPRO

Новичок
Пользователь
Дек 16, 2021
1
0
1
Марина, а если не секрет подскажи как сама дошли?
Я попробовал но ошибка высвечивается всё та же.
Поделитесь если не сложно
 

Nevazhno

Новичок
Пользователь
Июн 9, 2022
1
0
1
А что делать, если корабль не высвечивается ? Выходит только окно. Я исправил screen на self.

Изменено: я нашел решение! нужно pygame.display.flip() поместить после self.ship.blitme() , тогда экран будет обновляться после прорисовывания обьекта
 
Последнее редактирование:

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
969
219
43
20
Москва
Как вставлять код
1647162378032-png.1702
 

Форум IT Специалистов