Menu
CoddyTech

星を削除

CoddyのPygameジャーニー「ゲームウィンドウで学ぶPython」セクションの一部。レッスン 27/32。

リストも縮められます。stars.pop()は最後の項目、つまり最も新しい項目を削除します。stars.pop(0)は最初の項目を削除します。stars.remove(item)はitemと等しい最初の項目を削除します。

空のリストから取り出そうとすると、IndexError: pop from empty listというエラーになり、プログラムが停止します。まず長さを確認しましょう。

if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
    if len(stars) > 0:
        stars.pop()

ifが2つあることに注目してください。外側のifはイベントの中からスペースキーの押下を選び、内側のifは削除する星があることを確認します。

ifでは、空のリストはFalse、項目が入ったリストはTrueとして扱われるため、if stars:はif len(stars) > 0:と同じ意味です。

challenge icon

チャレンジ

中級

スペースキーを押すと、星を1つ戻せるようにします。

  1. イベントループ内で、K_SPACEに対するKEYDOWNイベントが発生したら、stars.pop()で最も新しい星を削除します。
  2. リストが空でない場合にのみ取り出すようにします。星がないときにスペースキーを押しても何も起こりません。

自分で試してみよう

import pygame

pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Night Sky")
clock = pygame.time.Clock()

# ゲームループの前に、ここで準備をします。
stars = []
font = pygame.font.Font(None, 36)

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        if event.type == pygame.MOUSEBUTTONDOWN and len(stars) < 10:
            stars.append(event.pos)

    # 各フレームで、ここで状態を更新します。

    screen.fill((20, 24, 48))
    # 画面を塗りつぶした後、ここで描画します。
    for star in stars:
        pygame.draw.circle(screen, (255, 255, 255), star, 5)
    text = font.render(f"Stars: {len(stars)}", True, (230, 230, 240))
    screen.blit(text, (20, 20))

    pygame.display.flip()
    clock.tick(60)

pygame.quit()

ゲームウィンドウで学ぶPythonのすべてのレッスン

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