NameError: name 'self' is not defined как исправить?

import pygame 
import sys
import random
import time

class Game():
pygame.init()
screen_width=800
screen_height=800

self.red = pygame.Color(255, 0, 0)
self.green = pygame.Color(0,255,0)
self.black = pygame.Color(0, 0, 0)
self.white = pygame.Color(255, 255, 255)
self.brown = pygame.Color(165, 42, 42)
     # будет задавать количество кадров в секунду
self.fps_controller = pygame.time.Clock()    

Ответы (1 шт):

Автор решения: gil9red

Дописать в классе:

  • Конструктор (__init__)
  • Запустить цикл обработки событий, например в отдельном методе (run)
  • Запуск класса:
    game = Game()  # Создание объекта класса
    game.run()     # Запуск метода run
    

Пример:

import pygame

class Game:
    def __init__(self):
        pygame.init()

        self.screen_width = 800
        self.screen_height = 800
        self.game_active = False
        self.FPS = 60

        self.screen = pygame.display.set_mode((self.screen_width, self.screen_height))

        self.red = pygame.Color(255, 0, 0)
        self.green = pygame.Color(0,255,0)
        self.black = pygame.Color(0, 0, 0)
        self.white = pygame.Color(255, 255, 255)
        self.brown = pygame.Color(165, 42, 42)

        # будет задавать количество кадров в секунду
        self.fps_controller = pygame.time.Clock()

    def run(self):
        self.game_active = True

        while self.game_active:
            # Получение всех событий
            for event in pygame.event.get():
                # Проверка события "Выход"
                if event.type == pygame.QUIT:
                    self.game_active = False
                    break

            self.screen.fill(self.red)

            pygame.display.update()
            pygame.display.set_caption("move_circle [{} fps]".format(int(self.fps_controller.get_fps())))

            self.fps_controller.tick(self.FPS)

game = Game()
game.run()
→ Ссылка