Не могу инициолизировать класс в Pygame

Рейтинг: 0Ответов: 1Опубликовано: 09.04.2023

game.py:

import pygame
from params import *
from board import *

# инициализация Pygame
pygame.init()
# размер окна
WINDOW_SIZE = (820, 600)
# создание окна
screen = pygame.display.set_mode(WINDOW_SIZE)
# установка заголовка окна
pygame.display.set_caption("Шахматы, типо")


class Game(object):
    patt = Board()
    # функция рисования круга
    def draw_circle(pos):
        pygame.draw.circle(screen, RED, pos, 30)

    # начальное положение круга
    pos = (0, 0)

    # игровой цикл
    running = True
    while running:
        # обработка событий
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False
            elif event.type == pygame.MOUSEBUTTONDOWN:
                # получение координат клика мыши
                mouse_pos = pygame.mouse.get_pos()
                # проверка, что клик был в пределах поля
                if mouse_pos[0] < 800 and mouse_pos[1] < 600:
                    # получение координат клетки, в которую кликнули
                    x = mouse_pos[0] // CELL_SIZE
                    y = mouse_pos[1] // CELL_SIZE
                    pos = (x * CELL_SIZE + CELL_SIZE // 2, y * CELL_SIZE + CELL_SIZE // 2)
        
        # отрисовка поля и круга
        screen.fill(BLACK)
        pattern.draw_board()
        draw_circle(pos)
        
        # обновление экрана
        pygame.display.flip()

    # завершение Pygame
    pygame.quit()

board.py:

import pygame
from params import *
from game import *


class Board(object):
    # функция рисования поля
    def draw_board():
        for x in range(0, 800, CELL_SIZE):
            for y in range(0, 600, CELL_SIZE):
                rect = pygame.Rect(x, y, CELL_SIZE, CELL_SIZE)
                if (x // CELL_SIZE + y // CELL_SIZE) % 2 == 0:
                    pygame.draw.rect(screen, WHITE, rect)
                else:
                    pygame.draw.rect(screen, GRAY, rect)

Выдёт ошибку:

NameError: name 'Board' is not defined

Ответы

▲ 0Принят

Ваш пример не является воспроизводимым и не может продемонстрировать проблему, о которой вы пишите.

Я попробовал что-то добавить, чтобы запустить ваш код. Проверьте.

main.py

import pygame
# ??? from params import *                                           # ???

from board import Board


pygame.init()
WINDOW_SIZE = (600, 600)  # (820, 600)
screen = pygame.display.set_mode(WINDOW_SIZE)
pygame.display.set_caption("Шахматы")

RED = '#f00'                                                        # ???
CELL_SIZE = 60                                                      # ???

class Game(object):
#    patt = Board()
    pattern = Board()                                           # +++ pattern
    
    # функция рисования круга
    def draw_circle(pos):
#        pygame.draw.circle(screen, RED, pos, 30)               
        pygame.draw.circle(screen, (255, 0, 0), pos, 30)        # +++

    # начальное положение круга
#    pos = (0, 0)
    pos = (30, 30)                                              # +++

    # игровой цикл
    running = True
    while running:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False
            elif event.type == pygame.MOUSEBUTTONDOWN:
                # получение координат клика мыши
                mouse_pos = pygame.mouse.get_pos()
                # проверка, что клик был в пределах поля
                if mouse_pos[0] < 800 and mouse_pos[1] < 600:
                    # получение координат клетки, в которую кликнули
                    x = mouse_pos[0] // CELL_SIZE
                    y = mouse_pos[1] // CELL_SIZE
                    pos = (x * CELL_SIZE + CELL_SIZE // 2, y * CELL_SIZE + CELL_SIZE // 2)
        
        # отрисовка поля и круга
        screen.fill('#3FC1C9')                                  # ??? BLACK
# -----------------------> vvvvvv <----------------------------------------       
        pattern.draw_board(screen)
        
        draw_circle(pos)
        pygame.display.flip()

    pygame.quit()

board.py

import pygame
# ??? from params import *                                           # ???
# ??? from game import *                                             # ???


CELL_SIZE = 60                                                       # +++
WHITE = '#FFFAF0'                                                    # +++
GRAY = '#808080'                                                     # +++


class Board(object):

# ---------------> vvvvvvvvvvvv <-----------------------------------------
    def draw_board(self, screen):
        for x in range(0, 800, CELL_SIZE):
            for y in range(0, 600, CELL_SIZE):
                rect = pygame.Rect(x, y, CELL_SIZE, CELL_SIZE)
                if (x // CELL_SIZE + y // CELL_SIZE) % 2 == 0:
                    pygame.draw.rect(screen, WHITE, rect)
                else:
                    pygame.draw.rect(screen, GRAY, rect)

введите сюда описание изображения