この連載は、同人誌『PythonとPygameで作る レトロ風RPG 全コード』を一部抜粋して編集したものです。
同人誌本編には、ゲーム本体のソースコードや、各種のサンプルコード、Windowsで実行できるEXEファイルが付属しています。PDFで290ページの本になります。ぜひ、こちらもご購入ください。
(2024-03-28:ver1.0.4 に更新、2024-03-10:ver1.0.3 に更新)
キー入力の例を示します。
キー入力には、「キーを押した瞬間」を検出する方法と、「キーが現在押されているか」を検出する方法の2種類があります。前者は、メニューの選択や決定の操作に向いています。後者は、キャラクターの移動などに向いています。
「example_pygame/key.py」を示します。
import pygame
def main(): pygame.init() # Pygameを初期化 screen = pygame.display.set_mode((800, 600)) # 画面作成 image = pygame.image.load("image/icon.png") # 画像読み込み x, y = 0, 0 # XY座標 running = True # 実行継続フラグ
while running: pygame.display.update() # 画面を更新 screen.fill(pygame.Color(0, 0, 0)) # 画面を塗りつぶす
for event in pygame.event.get(): # イベント if event.type == pygame.QUIT: running = False # 終了 if event.type == pygame.KEYDOWN: # キー押下 if event.key == pygame.K_r: x = 0; y = 0 # Rでリセット
keys = pygame.key.get_pressed() # キー保持 if keys[pygame.K_LEFT]: x -= 0.5 # 左 if keys[pygame.K_RIGHT]: x += 0.5 # 左 if keys[pygame.K_UP]: y -= 0.5 # 上 if keys[pygame.K_DOWN]: y += 0.5 # 下
screen.blit(image, (x, y)) # 描画 pygame.display.flip() # 画面フリップ pygame.quit()
if __name__ == "__main__": main()
まずは『Pygame』の初期化処理です。画像を読み込み、XY位置を用意します。このあとXY位置をキー操作で動かして、画像の描画位置を変更します。
import pygame
def main(): pygame.init() # Pygameを初期化 screen = pygame.display.set_mode((800, 600)) # 画面作成 image = pygame.image.load("image/icon.png") # 画像読み込み x, y = 0, 0 # XY座標 running = True # 実行継続フラグ
メイン ループの中で、キー入力の判定をおこないます。ここでは、キーを押した瞬間の検出を示します。
while running: pygame.display.update() # 画面を更新 screen.fill(pygame.Color(0, 0, 0)) # 画面を塗りつぶす
for event in pygame.event.get(): # イベント if event.type == pygame.QUIT: running = False # 終了 if event.type == pygame.KEYDOWN: # キー押下 if event.key == pygame.K_r: x = 0; y = 0 # Rでリセット
event.type
がpygame.KEYDOWN
のときに、event.key
にpygame.K_r
が入っているか確認します。この条件を満たすとき、キーボードの「R」キーが押されています。このとき、XY座標を0
に戻します。
続いて、キーが現在押されているかの検出を示します。
keys = pygame.key.get_pressed() # キー保持 if keys[pygame.K_LEFT]: x -= 0.5 # 左 if keys[pygame.K_RIGHT]: x += 0.5 # 左 if keys[pygame.K_UP]: y -= 0.5 # 上 if keys[pygame.K_DOWN]: y += 0.5 # 下
screen.blit(image, (x, y)) # 描画 pygame.display.flip() # 画面フリップ pygame.quit()
pygame.key.get_pressed()
関数の戻り値を利用します。上下左右が押されているあいだ、XY座標を0.5
ずつ、その方向に移動します。
これらの処理を、より詳しく見ていきましょう。
pygame.event.get()
を使います。そしてfor
文でevent
を得ます。
for event in pygame.event.get(): # イベント if event.type == pygame.QUIT: running = False # 終了 if event.type == pygame.KEYDOWN: # キー押下 if event.key == pygame.K_r: x = 0; y = 0 # Rでリセット
event
にはさまざまな情報が含まれています。そして、event.type
がpygame.KEYDOWN
のときにキーが押されています。
キーが押されているときにevent.key
の値を調べると、どのキーが押されているか分かります。キーの種類はpygame.K_~
の形式です。ここではpygame.K_r
を使い、「R」キーを押したかを調べています。
ドキュメントの「key」のページに、キーの種類の表があります。
pygame.key.get_pressed()
を使います。
keys = pygame.key.get_pressed() # キー保持 if keys[pygame.K_LEFT]: x -= 0.5 # 左 if keys[pygame.K_RIGHT]: x += 0.5 # 左 if keys[pygame.K_UP]: y -= 0.5 # 上 if keys[pygame.K_DOWN]: y += 0.5 # 下
pygame.key.get_pressed()
の戻り値は、真偽値のリストです。pygame.K_~
で要素を調べると、そのキーが押されているかが分かります。キーの種類は、先ほどと同じです。
この連載は、同人誌『PythonとPygameで作る レトロ風RPG 全コード』を一部抜粋して編集したものです。
同人誌本編には、ゲーム本体のソースコードや、各種のサンプルコード、Windowsで実行できるEXEファイルが付属しています。PDFで290ページの本になります。ぜひ、こちらもご購入ください。
(2024-03-28:ver1.0.4 に更新、2024-03-10:ver1.0.3 に更新)