Моя проблема в том, что я не могу правильно blit
несколько квадратов в правильном положении.
Я написал некоторый код для отображения шахматной доски. Квадраты - это не спрайты, а объекты pygame.Surface.
В данный момент мой проект содержит два файла .py:
Координатор - это функция, которая возвращает список, содержащий два списка кортежей, один для четного столбца и один для нечетных. Кортежи - это фактические координаты, которые я передаю методу blit.
На данном этапе я имею дело только с белыми квадратами.
Файл display.py является фактическим отображением и намомент содержит также классы квадрата и класс шахматной доски.
Вот мой координатор.py:
# Returns a list containing two lists of tuples, one for even columns (white squares), and
# one for odd columns (white squares).
# Needs to be implemented to achieve the same for black squares.
def coordinator():
odd_columns = white_odd_columns()
even_columns = white_even_columns()
columns = [odd_columns, even_columns]
# print(columns)
return columns
# print('odd_columns: ' + str(odd_columns))
# print('even_columns: ' + str(even_columns))
# Returns a list with coordinates
# for white squares in odd columns
def white_odd_columns():
odd_coordinates = []
for x in range(0, 800, 200):
y = 0
for first_column in range(0, 5):
odd_coordinates.append((x, y))
y += 200
# print('This should be the complete list of odd coordinates' + str(odd_coordinates))
return odd_coordinates
# Returns a list with coordinates
# for white squares in even columns
def white_even_columns():
even_coordinates = []
for x in range(100, 800, 200):
y = 100
for first_column in range(0, 4):
even_coordinates.append((x, y))
y += 200
# print('This should be the complete list of even coordinates' + str(even_coordinates))
return even_coordinates
# white_even_columns()
# white_odd_columns()
coordinator()
А вот мой дисплей.py:
import pygame
import sys
from coordinator import coordinator
# Sets up the display
pygame.init()
window_size = (800, 800)
game_window = pygame.display.set_mode(size=window_size)
pygame.display.set_caption('My Game')
# Event loop (outer)
while 1:
white_columns = coordinator()
# print(white_columns)
odd_white_columns = white_columns[0]
# print(odd_white_columns)
even_white_columns = white_columns[1]
# print(even_white_columns)
l = len(even_white_columns)
# print(l)
n = 0
for n in range(l + 1):
x = odd_white_columns[n]
print(x)
# Event loop (inner)
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
class WhiteSquare:
height = int(window_size[0] / 8)
width = int(window_size[1] / 8)
a = height
b = width
white_square = pygame.Surface((a, b))
white_square.fill((255, 255, 255), )
ws = WhiteSquare()
class BlackSquare:
height = int(window_size[0] / 8)
width = int(window_size[1] / 8)
a = height
b = width
black_square = pygame.Surface((a, b))
black_square.fill((0, 0, 255), )
bs = BlackSquare()
class ChessBoard:
game_window.blit(ws.white_square, x) # test
game_window.blit(bs.black_square, (0, 100)) # test
cb = ChessBoard()
pygame.display.update()
Пожалуйста, не принимайте во внимание следующее:
game_window.blit(bs.black_square, (0, 100))
Это просто для того, чтобы убедиться, что я могу на самом деле blit
квадратов, когда я передаю некоторые координаты.
меня беспокоит, этов строке 61:
game_window.blit(ws.white_square, x)
Фактически я пытаюсь получить доступ к каждому кортежу, возвращенному координатором, с помощью следующего кода, начинающегося со строки 21:
l = len(even_white_columns)
# print(l)
n = 0
for n in range(l + 1):
x = odd_white_columns[n]
print(x)
Я печатаю кортежи только для того, чтобы убедиться, что они правильные и что они все они. Ну, с ними все в порядке.
Чего я не понимаю, так это того, почему при запуске кода отображается только белый квадрат (200, 600).
Я чувствуюМне нравится это как-то делать с хранением кортежей или обновлением дисплея, но в данный момент это выходит за рамки моей лиги.
Может кто-нибудь объяснить мне, что я делаю неправильно? Я мог бы также делать что-то не так, фактически повторяя этот путь и пытаясь передать координаты.
Или, может быть, мне пришлось использовать блиты вместо блитов, чтобы я мог передать последовательность блитов,Если это так, я не могу понять, как использовать этот метод, так как в примерах по переполнению стека он показан просто как функция.
Спасибо за любую помощь.