将图像放在 pygame 网格上

placing images on a pygame grid

红色和蓝色的边将各自用一个图像替换它们的图块(不是一个图像将它们全部重叠,而是将一个图像粘贴到每个图块上)。我不太确定该怎么做,如有任何帮助,我们将不胜感激!

import pygame

TILESIZE = 22
margin = 1
BOARD_POS = (10, 10)


def create_board_surf():
    board_surf = pygame.Surface((TILESIZE * 50 + margin * 51, TILESIZE * 26 + margin * 27))
    board_surf.set_colorkey((0, 0, 0))
    board_surf.set_alpha(210)
    for row in range(26):
        for column in range(0, 25):
            color = (170, 70, 70)
            rect = pygame.draw.rect(screen, color, [(margin + TILESIZE) * column + margin, (margin + TILESIZE) * row + margin, TILESIZE, TILESIZE])
            pygame.draw.rect(board_surf, pygame.Color(color), rect)
        for column in range(25, 50):
            color = (70, 95, 195)
            rect = pygame.draw.rect(screen, color, [(margin + TILESIZE) * column + margin, (margin + TILESIZE) * row + margin, TILESIZE, TILESIZE])
            pygame.draw.rect(board_surf, pygame.Color(color), rect)
    return board_surf


def create_board():
    board = []
    for row in range(26):
        board.append([])
        for column in range(50):
            board[row].append(None)
    return board


def main():
    global screen
    pygame.init()
    screen = pygame.display.set_mode((1200, 650))
    clock = pygame.time.Clock()

    while True:
        events = pygame.event.get()
        for e in events:
            if e.type == pygame.QUIT:
                return

        create_board()
        board_surf = create_board_surf()
        screen.fill(pygame.Color((200, 200, 200)))
        screen.blit(board_surf, BOARD_POS)
        pygame.display.flip()
        clock.tick(60)


main()

在为每个图块绘制矩形的 def create_board_surf(): 下,将 pygame.draw.rect 替换为 board_surf.blit(IMAGE_SURFACE, ((margin + TILESIZE) * column + margin, (margin + TILESIZE) * row + margin)) 以将图像放置在图块矩形所在的位置。

您可以通过 img = pygame.image.load("IMAGENAME.png") 制作 IMAGE_SURFACE 这些图像必须缩放到图块大小,以便它们适合: img = pygame.transform.scale(img, (TILESIZE, TILESIZE))

如果一些图块应该有不同的图像,您可以使用列和行的位置来确定要使用的图像,同样的方式一些图块是红色的,而另一些是蓝色的基于它们的列。