Найти - Пользователи
Полная версия: программа выдаёт ошибку в alien invasion (Эрик Мэтиз)
Начало » Python для новичков » программа выдаёт ошибку в alien invasion (Эрик Мэтиз)
1
GaDaub
Я, к сожалению, выбрала для первого изучения книгу “Изучаем Python. Программирование игр, визуализация данных, веб-приложения читать онлайн” Эрик Мэтиз. Каким-то невероятным образом (с вашей помощью) добралась до написания первой простенькой игры по этой же книжке. Я надеялась, что коды, которые выдал автор в книге не будут работать только в теоретической части, но он налажал и в практике. Пожалуйста, помогите разобраться, почему выходит ошибка. Не видит аргумент update в классе Shipб хотя update() является функцией в этом классе…

основной код игры:


from ship import Ship
import game_functions as gf

def run_game():
# Инициализирует игру и создает объект экрана.
pygame.init()
ai_settings = Settings()
screen = pygame.display.set_mode(
(ai_settings.screen_width, ai_settings.screen_height))
pygame.display.set_caption(“Alien Invasion”)
# Создание корабля.
ship = Ship(screen)
# Start the main loop for the game.

# Запуск основного цикла игры.
# Назначение цвета фона.
bg_color = (0, 0, 255)
# Запуск основного цикла игры.
while True:
gf.check_events(ship)
ship.update()
gf.update_screen(ai_settings, screen, ship)
# Отслеживание событий клавиатуры и мыши.
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
# При каждом проходе цикла перерисовывается экран.
screen.fill(ai_settings.bg_color)
ship.blitme()
# Отображение последнего прорисованного экрана.
pygame.display.flip()
run_game()

ошибка:

Traceback (most recent call last):
File “alien_invasion.py”, line 36, in <module>
run_game()
File “alien_invasion.py”, line 25, in run_game
ship.update()
AttributeError: ‘Ship’ object has no attribute ‘update’

P.S. без ship.update() в цикле while True в def run_game() корабль двигался вправо с каждым нажатием как и положено

класс с ошибкой:

import pygame
class Ship():
def __init__(self, screen):
“”“Инициализирует корабль и задает его начальную позицию.”“”
self.screen = screen
# Загрузка изображения корабля и получение прямоугольника.
self.image = pygame.image.load('images/ship.bmp')
self.rect = self.image.get_rect()
self.screen_rect = screen.get_rect()
# Каждый новый корабль появляется у нижнего края экрана.
self.rect.centerx = self.screen_rect.centerx
self.rect.bottom = self.screen_rect.bottom
# Флаг перемещения
self.moving_right = False

def update(self):
“”“Обновляет позицию корабля с учетом флага.”“”
if self.moving_right:
self.rect.centerx += 1

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


GaDaub
на всякий случай ещё одна часть этой игры:

import sys
import pygame
def check_events(ship):
“”“Обрабатывает нажатия клавиш и события мыши.”“”
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_RIGHT:
ship.moving_right = True
elif event.type == pygame.KEYUP:
if event.key == pygame.K_RIGHT:
ship.moving_right = False
# Переместить корабль вправо.
ship.rect.centerx += 1
def update_screen(ai_settings, screen, ship):
“”“Обновляет изображения на экране и отображает новый экран.”“”
# При каждом проходе цикла перерисовывается экран.
screen.fill(ai_settings.bg_color)
ship.blitme()
# Отображение последнего прорисованного экрана.
pygame.display.flip()
py.user.next
Оформи код тегами code, чтобы отступы не пропадали.
PEHDOM
выкладывайте весь код, заключайте его в теги
[code python][/code]
по этим куцым огрызкам трудно сказать..
GaDaub
Я надеялась, что коды, которые выдал автор в книге не будут работать только в теоретической части, но он налажал и в практике.
Вот это наврядли, если вы загуглите :“ AttributeError: ‘Ship’ object has no attribute ” вы узнаете что у объкета Ship также нету артибута ‘screen_rect’ или ‘bullet_width’ или еще чего, не стал глубоко копать. Очень сомневаюсь что это “ автор в книге …. налажал и в практике.”. А вот в то что невнимательные школьники невнимательно переписывали код, я поверю охотнее.
GaDaub
PEHDOM
выкладывайте весь код, заключайте его в теги
спасибо за наставления, продолжу искать где я допустила ошибку, заодно подумаю пару недель стоит ли продолжать)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB