Не могу инициолизировать класс в Pygame
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
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Ваш пример не является воспроизводимым и не может продемонстрировать проблему, о которой вы пишите.
Я попробовал что-то добавить, чтобы запустить ваш код. Проверьте.
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)
