Menu
CoddyTech

タイル画像

CoddyのPygameジャーニー「ゲームの世界」セクションの一部。レッスン 6/35。

茶色の長方形は壁の位置を示します。画像を使うと、レベルが場所らしく見えます。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で、マップタイルと同じ大きさなので、拡大縮小せずにグリッドに収まります。コイン画像には透明な余白があるため、タイルの角に描画すると、コインが中央に配置されます。

描画するものは、画像と位置を組み合わせたペアのリスト1つにまとめます。tiles.append((block_img, rect))でペアを追加し、ゲームループですべてを描画します:

for image, rect in tiles:
    screen.blit(image, rect)

このループでは、各ペアをimageとrectに展開します。

challenge icon

チャレンジ

簡単
  1. set_modeの後に、assets/images/block.pngをblock_imgに、assets/images/coin.pngをcoin_imgに読み込み、それぞれにconvert_alpha()を適用します。
  2. ゲームループの前に、tilesという名前のリストを作成します。各#に対してペア(block_img, pygame.Rect(col * TILE, row * TILE, TILE, TILE))を、各Cに対して同じRectを使った(coin_img, ...)を追加します。
  3. ゲームループ内では、茶色と黄色の四角形を描画する代わりに、tiles内のすべてのペアをblitします。

自分で試してみよう

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()
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

ゲームの世界のすべてのレッスン

自分で練習してみよう: Pygameプレイグラウンド