Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 11.11.2018
Сообщений: 1

Game_functions.py, line 113: AttributeError: 'Settings' object has no attribute 'sprites'

11.11.2018, 16:43. Показов 3763. Ответов 0

Студворк — интернет-сервис помощи студентам
Alien_invasion

import pygame
import game_functions as gf
import winsound
from settings import Settings
from ship import Ship
from pygame.sprite import Group

background_image = pygame.image.load("images/spase.jpg")
background_image_menu = pygame.image.load("images/Menu.jpg")


def run_game():
# Инициализирует pygame, settings и объект экрана.
winsound.PlaySound("music.mp3", winsound.SND_ASYNC)
pygame.init()
ai_settings = Settings()
screen = pygame.display.set_mode((0, 0), pygame.FULLSCREEN)
pygame.display.set_caption("Alien Invasion")
ship = Ship(ai_settings, screen)
bullets = Group()
aliens = Group()
gf.create_fleet(ai_settings, screen, aliens, ship)
# Запуск основного цикла игры.
while True:
gf.check_events(ai_settings, screen, ship, bullets)
ship.update()
gf.update_bullets(bullets)
gf.update_aliens(ai_settings, aliens)
gf.update_screen(screen, ship, aliens, bullets)


run_game()


game_functions


import sys
import pygame
from bullet import Bullet
from alien import Alien


def check_keydown_events(event, ai_settings, screen, ship, bullets):
if event.key == pygame.K_d:
# Переместить корабль вправо
ship.moving_right = True
elif event.key == pygame.K_a:
ship.moving_left = True
elif event.key == pygame.K_w:
ship.moving_up = True
elif event.key == pygame.K_s:
ship.moving_down = True
elif event.key == pygame.K_RETURN:
fire_bullet(ai_settings, screen, ship, bullets)
elif event.key == pygame.K_q:
sys.exit()


def check_keyup_events(event, ship):
if event.key == pygame.K_d:
ship.moving_right = False
elif event.key == pygame.K_a:
ship.moving_left = False
elif event.key == pygame.K_w:
ship.moving_up = False
elif event.key == pygame.K_s:
ship.moving_down = False


def check_events(ai_settings, screen, ship, bullets):
""" Обрабатывает нажатия клавиш и события мыши."""
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
elif event.type == pygame.KEYDOWN:
check_keydown_events(event, ai_settings, screen, ship, bullets)
elif event.type == pygame.KEYUP:
check_keyup_events(event, ship)


def update_screen(screen, ship, aliens, bullets):
""" Обновляет изображения на экране и отображает новый экран."""
# При каждом проходе цикла перерисовывается экран
screen.blit(pygame.image.load("images/spase.jpg"), [0, 0])
for bullet in bullets:
bullet.draw_bullet()
ship.blitme()
aliens.draw(screen)
# Отображение последнего прорисованного экрана.
pygame.display.flip()


def update_bullets(bullets):
""" Обновление позиции пуль и создание старых"""
bullets.update()
for bullet in bullets.copy():
if bullet.rect.bottom <= 0:
bullets.remove(bullet)


def fire_bullet(ai_settings, screen, ship, bullets):
if len(bullets) < ai_settings.bullets_allowed:
new_bullet = Bullet(ai_settings, screen, ship)
bullets.add(new_bullet)


def create_fleet(ai_settings, screen, aliens, ship):
# Создание пришельца и вычисление количества пришельцев в ряду.
# Интервал между соседними пришельцами равен одной ширине прицельца.
alien = Alien(ai_settings, screen)
number_aliens_x = get_number_aliens_x(ai_settings, alien.rect.width)
number_rows = get_number_rows(ai_settings, ship.rect.height, alien.rect.height)
# Создание первого ряда
for row_number in range(number_rows + 1):
for alien_number in range(number_aliens_x + 1):
create_alien(ai_settings, screen, aliens, alien_number, row_number)


def get_number_aliens_x(ai_settings, alien_width):
available_space_x = ai_settings.screen_width - 2 * alien_width
number_aliens_x = int(available_space_x / (2 * alien_width))
return number_aliens_x


def create_alien(ai_settings, screen, aliens, alien_number, row_number):
alien = Alien(ai_settings, screen)
alien_width = alien.rect.width
alien.x = alien_width + 2 * alien_width * alien_number
alien.rect.x = alien.x
alien.rect.y = alien.rect.height + 2 * alien.rect.height * row_number
aliens.add(alien)


def get_number_rows(ai_settings, ship_height, alien_height):
available_space_y = (ai_settings.screen_height - (3 * alien_height) - ship_height)
number_rows = int(available_space_y / (2 * alien_height))
return number_rows


def update_aliens(aliens, ai_settings):
"""Обновляет позиции всех пришельцев во флоте."""
check_fleet_edges(ai_settings, aliens)
aliens.update()


def check_fleet_edges(ai_settings, aliens):
"""Реагирует на достижение прицельцем края экрана."""
for alien in aliens.sprites():
if alien.check_edges():
change_fleet_direction(ai_settings, aliens)
break


def change_fleet_direction(ai_settings, aliens):
"""Опускает весь флот и меняет его направление."""
for alien in aliens.sprites():
alien.rect.y += ai_settings.fleet_drop_speed
ai_settings.fleet_direction *= -1


settings

import pygame
background_image = pygame.image.load("images/spase.jpg")


class Settings:
""" Класс для хранения всех настроек игры Alien Invasion"""

def __init__(self):
"""Инициализирует настройки игры."""
self.screen_width = 1600
self.screen_height = 900
self.background_image = (230, 230, 230)
# Настройки корабля
self.ship_speed_factor = 4.5
# Параметры пули
self.bullet_speed_factor = 3
self.bullet_width = 5
self.bullet_height = 15
self.bullet_color = 4, 178, 185
self.bullets_allowed = 5
# Настройка прицельцев
self.alien_speed_factor = 1
self.fleet_drop_speed = 10
# fleet_direction = 1 обозначает движение вправо; а -1 влево.
self.fleet_direction = 1


alien

import pygame
from pygame.sprite import Sprite


class Alien(Sprite):
def __init__(self, ai_settings, screen):
super(Alien, self).__init__()
self.ai_settings = ai_settings
self.screen = screen
self.image = pygame.image.load("images/Alien1.png")
self.rect = self.image.get_rect()
self.rect.x = self.rect.width
self.rect.y = self.rect.height
self.x = float(self.rect.x)

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

def check_edges(self):
"""Возвращает True, если пришелец находится у края экрана."""
screen_rect = self.screen.get_rect()
if self.rect.right >= screen_rect.right:
return True
elif self.rect.left <= 0:
return True

def update(self):
"""Перемещение пришельца вправо и влево."""
self.x += (self.ai_settings.alien_speed_factor * self.ai_settings.fleet_direction)
self.rect.x = self.x


ship

import pygame


class Ship:
def __init__(self, ai_settings, screen):
self.ai_settings = ai_settings
self.screen = screen

# Загрузка изображения корабля и задет его начвальную позицую.
self.image = pygame.image.load("images/ship.png")
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.center = float(self.rect.centerx)
self.centerx = float(self.rect.centerx)
self.centery = float(self.rect.centery)
# Флаг перемещения
self.moving_right = False
self.moving_left = False
self.moving_up = False
self.moving_down = False

def update(self):
""" Обновляет позицию корабля с учетом флагов."""
if self.moving_right and self.rect.right < self.screen_rect.right:
self.centerx += self.ai_settings.ship_speed_factor
if self.moving_left and self.rect.left > 0:
self.centerx -= self.ai_settings.ship_speed_factor
if self.moving_up and self.rect.top > 0:
self.centery -= self.ai_settings.ship_speed_factor
if self.moving_down and self.rect.bottom < self.ai_settings.screen_height:
self.centery += self.ai_settings.ship_speed_factor
self.rect.centerx = self.centerx
self.rect.centery = self.centery

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


bullet

import pygame
from pygame.sprite import Sprite


class Bullet(Sprite):
def __init__(self, ai_settings, screen, ship):
""" Создает обьект пуля в текущей позиции корабля"""
super(Bullet, self).__init__()
self.screen = screen
# Создание пули в позиции (0, 0) и назначение правильной позиции.
self.rect = pygame.Rect(0, 0, ai_settings.bullet_width,
ai_settings.bullet_height)
self.rect.centerx = ship.rect.centerx
self.rect.top = ship.rect.top

# Позиция пули хранится в вещественном формате
self.y = float(self.rect.y)
self.color = ai_settings.bullet_color
self.speed_factor = ai_settings.bullet_speed_factor

def update(self):
self.y -= self.speed_factor
self.rect.y = self.y

def draw_bullet(self):
# Вывод пули на экран
pygame.draw.rect(self.screen, self.color, self.rect)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.11.2018, 16:43
Ответы с готовыми решениями:

AttributeError: '<invalid type>' object has no attribute 'setup' on line 111 in main.py
Здравствуйте, доброго времени суток! Выдает вот такую ошибкуAttributeError: '&lt;invalid type&gt;' object has no attribute 'setup' on line 111...

AttributeError: 'unicode' object has no attribute 'get'
Учу django 1.1 Выдаёт ошибку AttributeError ... 'unicode' object has no attribute 'get' views.py #-*- coding: utf-8...

AttributeError: 'NoneType' object has no attribute 'get'
Доброго всем вечера , писал я значит форму для регистрации и входа на Phyton и тут вылезла ошибка помогите пожалуйста. ...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.11.2018, 16:43
Помогаю со студенческими работами здесь

Ошибка AttributeError (object has no attribute)
Уважаемые форумчане, подскажите, пожалуйста, в чём суть такой ошибки. Уже второй день бьюсь. Вроде пишу всё правильно. models.py ...

AttributeError: 'int' object has no attribute 'get'
Не могу понять, как исправить ошибку. from tkinter import * def work_with_vvod(): vvod = int() b = (vvod // 100) * 5 + vvod ...

AttributeError: 'function' object has no attribute
class player: def resources(self): credits = 22200 print(player.resources.credits) Вывод: Traceback (most recent...

AttributeError: 'NoneType' object has no attribute 'get'
Код представляет собой второе окно, в которое можно перейти через основное при помощи tkinter. Грубо говоря он служит для добавления...

AttributeError: 'NoneType' object has no attribute 'id'
@bot.command(pass_context = True) async def createvoicechannels(ctx): role = discord.utils.get(ctx.channel.guild.roles, name =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru