图块图像
本课属于 Coddy Pygame 学习旅程的“游戏世界”单元。第 6 课,共 36 课。
棕色矩形表示墙壁的位置。图像让关卡看起来像一个真实的场景。在 set_mode 之后加载每张图块图像一次:
block_img = pygame.image.load("assets/images/block.png").convert_alpha()
coin_img = pygame.image.load("assets/images/coin.png").convert_alpha()每张图块图像都是 36 乘 36,和地图图块的尺寸相同,因此无需缩放就能与网格对齐。金币图像周围有空白边框,因此把它绘制在图块的角落,金币就会位于中间。
用一个由二元组组成的列表记录要绘制的内容:使用哪张图像,以及绘制位置。tiles.append((block_img, rect))会添加一个二元组;游戏循环会绘制列表中的所有图像:
for image, rect in tiles:
screen.blit(image, rect)循环会将每个二元组解包到 image 和 rect 中。
挑战
简单用图片绘制关卡,而不是用矩形。
- 在
set_mode之后,将assets/images/block.png加载到block_img,将assets/images/coin.png加载到coin_img,并使用convert_alpha()。 - 构建一个列表
tiles:对于每个#,添加(block_img, pygame.Rect(col * TILE, row * TILE, TILE, TILE));对于每个C,添加具有相同 Rect 的(coin_img, ...)。 - 绘制
tiles中的每一对图片和矩形,以替代矩形。
按“开始”:方块和金币会替代纯色图块。然后按“检查”。
亲手试试
import pygame
TILE = 36
WALL = (120, 90, 60)
COIN = (255, 196, 0)
LEVEL = [
"###.............",
"###.............",
"..........C.....",
".........####...",
"..C.............",
".####......C....",
"..........###...",
"#....C.........#",
"###..##...###.##",
"######..########",
]
pygame.init()
screen = pygame.display.set_mode((576, 360))
pygame.display.set_caption("Tiles")
clock = pygame.time.Clock()
walls = []
coins = []
for row, line in enumerate(LEVEL):
for col, char in enumerate(line):
if char == "#":
walls.append(pygame.Rect(col * TILE, row * TILE, TILE, TILE))
elif char == "C":
coins.append(pygame.Rect(col * TILE + 10, row * TILE + 10, 16, 16))
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.fill((140, 200, 240))
for wall in walls:
pygame.draw.rect(screen, WALL, wall)
for coin in coins:
pygame.draw.rect(screen, COIN, coin)
pygame.display.flip()
clock.tick(60)
pygame.quit()
游戏世界中的所有课
自己练习: Pygame 在线编辑器