Cześć, ćwiczę sobie Pythona i napotkałem po raz pierwszy na ścianę i nie mam pojęcia co jest nie tak. Problem polega na błędzie File "C:\Users\PycharmProjects\13.1 stars\game_functions.py", line 14, in create_many_ships available_space_x = settings.screen_width - 2 * ship_width AttributeError: 'pygame.Surface' object has no attribute 'screen_width'''
i generalnie chyba rozumiem ten błąd, ale według mnie ten atrybut powinien zostać przekazany. Wklejam 3 części zależnego od siebie krótkiego kodu. Proszę uświadomcie mnie gdzie jest błąd. Zapamiętam to do końca życia bo przeanalizowałem po swojemu całość 4 razy i nie rozumiem.. Wiem, że proszę o dużo bo analizowanie mojego shitcode'u to żadna frajda, ale serio nie rozumiem gdzie jest błąd i trochę to frustrujące.
Główny plik w którym "gra" jest uruchamiana.
import pygame
import sys
from settings import Settings
import game_functions as gf
from pygame.sprite import Group
def start_game():
pygame.init()
settings = Settings()
screen = pygame.display.set_mode((settings.screen_width, settings.screen_height))
pygame.display.set_caption("meh")
ships = Group()
gf.create_many_ships(screen, screen, ships)
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
gf.update_screen(settings, screen, ships)
start_game()
Teraz czas na klasę statki które chce wyświetlić na całym ekranie celem ćwiczenia pythona.
import pygame
from pygame.sprite import Sprite
class Ship(Sprite):
"""Klasa tworząca statek"""
def __init__(self,settings, screen):
"""inicjalizacja i wczytanie statku"""
super(Ship,self)
self.screen = screen
self.settings = settings
self.image = pygame.image.load('ships/ship.bmp')
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):
"""wyświetallnie statku"""
self.screen.blit(self.image, self.rect)
I funkcje gry w tym funkcja która generuje błąd.
import pygame
from ships import Ship
def update_screen(settings, screen, ships):
ships.draw(screen)
screen.fill(settings.bg_color)
pygame.display.flip()
def create_many_ships(settings, screen, ships):
ship = Ship(settings, screen)
ship_width = ship.rect.width
available_space_x = settings.screen_width - 2 * ship_width
number_ships_x = int(available_space_x / (2 * ship_width))
ships.draw(screen)
for ship_number in range(number_ships_x):
ship = Ship(settings, screen)
ship.x = ship_width + 2 * ship_width * ship_number
ship.rect.x = ship.x
ships.add(ship)
i ostatnia klasa settings w której są podstawowe informacje przechowywane :
class Settings():
def __init__(self):
self.screen_width = 1200
self.screen_height = 800
self.bg_color = 230, 230, 230