turtle.onkey()
turtle.onkey()
とは
turtle.onkey()
は、Pythonのturtle
グラフィックスライブラリにおいて、特定のキーが離されたときに(キーリリースイベント)、あらかじめ指定した関数を実行するためのメソッドです。これにより、ユーザーがキーボードを操作することで、画面上のカメ(turtle)を動かしたり、絵を描いたり、インタラクティブなプログラムを作成したりすることができます。
使い方
turtle.onkey()
は通常、以下のように使用します。
import turtle
# スクリーンオブジェクトを作成
screen = turtle.Screen()
# カメオブジェクトを作成
my_turtle = turtle.Turtle()
# キーが押されたときに実行する関数を定義
def move_forward():
my_turtle.forward(50)
def turn_left():
my_turtle.left(90)
def turn_right():
my_turtle.right(90)
# キーと関数を関連付ける (バインドする)
# 1つ目の引数: 実行したい関数名 (括弧なし)
# 2つ目の引数: 関連付けるキーの文字列 (例: "Up", "Left", "Right", "a", "space" など)
screen.onkey(move_forward, "Up") # 上矢印キーが離されたら move_forward() を実行
screen.onkey(turn_left, "Left") # 左矢印キーが離されたら turn_left() を実行
screen.onkey(turn_right, "Right") # 右矢印キーが離されたら turn_right() を実行
screen.onkey(my_turtle.clear, "c") # 'c' キーが離されたらカメの描画をクリア
# キーボードイベントをリッスン(待ち受ける)状態にする
screen.listen()
# 描画を続けるためにメインループを開始 (プログラムが終了しないようにする)
turtle.done()
引数
turtle.onkey(fun, key)
は2つの引数を取ります。
-
fun
:- キーが離されたときに実行される関数を指定します。
- 重要な注意点として、この関数には引数を持たせてはいけません。 もし引数が必要な場合は、
lambda
関数を使うなどの工夫が必要です(後述の「発展的な使い方」を参照)。 - 関数名だけを渡し、
()
は付けません。例えば、move_forward()
ではなくmove_forward
と書きます。
-
key
:- 関連付けるキーの文字列を指定します。
- 通常の文字キーは
'a'
や'z'
のように小文字で指定します。 - 特殊なキーには特定の文字列を使います。
- 矢印キー:
"Up"
,"Down"
,"Left"
,"Right"
(頭文字は大文字) - スペースキー:
"space"
- エンターキー:
"Return"
または"Enter"
- エスケープキー:
"Escape"
- ファンクションキー:
"F1"
,"F2"
など
- 矢印キー:
- 具体的なキー名のリストは、Tkinter(turtleモジュールの基盤となっているGUIライブラリ)のドキュメントを参照すると良いでしょう。
screen.listen()
の重要性
turtle.onkey()
を設定するだけでは、キーボードイベントは認識されません。screen.listen()
を呼び出すことで、turtleの画面がキーボードイベントを待ち受けるようになります。これにより、ユーザーのキー入力がプログラムに伝えられ、onkey
で設定した関数が実行されるようになります。
turtle.done()
の役割
turtle.done()
は、turtleグラフィックウィンドウが閉じられるまでプログラムを継続させるための関数です。これがないと、キーボードイベントを処理する前にプログラムが終了してしまう可能性があります。
turtle.onkey()
と turtle.onkeypress()
の違い
turtle
モジュールには、似たような機能を持つ turtle.onkeypress()
という関数もあります。
turtle.onkeypress(fun, key)
: キーが押されたときにfun
を実行します(キープレスイベント)。turtle.onkey(fun, key)
: キーが離されたときにfun
を実行します(キーリリースイベント)。
通常、ゲームなどでカメを連続的に動かしたい場合は、キーが押されている間ずっと反応する onkeypress()
の方が使いやすいことが多いです。一方、キーが離された瞬間をトリガーにしたい場合は onkey()
が適しています。
onkey()
(および onkeypress()
) には引数を持たない関数を渡す必要がありますが、引数を渡したい場合は lambda
関数を使うことができます。
import turtle
screen = turtle.Screen()
my_turtle = turtle.Turtle()
def draw_shape(sides):
for _ in range(sides):
my_turtle.forward(50)
my_turtle.left(360 / sides)
# 's' キーが押されたら四角形を描く(引数が必要な場合)
screen.onkey(lambda: draw_shape(4), "s")
# 't' キーが押されたら三角形を描く
screen.onkey(lambda: draw_shape(3), "t")
screen.listen()
turtle.done()
このように lambda
を使うことで、onkey
に渡す関数は引数を持たない形式になりつつ、内部で引数付きの関数を呼び出すことができます。
turtle.onkey()
は、キー入力に応じてプログラムを制御するための非常に便利なツールですが、初心者がつまづきやすいポイントがいくつかあります。
関数名の後ろに () を付けてしまう
エラーの症状
プログラムを実行した瞬間に、キーを押していないのに、onkey
で指定した関数が一度だけ実行されてしまう。その後キーを押しても何も起こらない。
原因
onkey()
(または onkeypress()
) は、キーが押されたときに「呼び出す関数そのもの」を引数として受け取る必要があります。しかし、関数名の後ろに ()
を付けてしまうと、それは「その関数を今すぐ実行し、その結果を onkey()
に渡す」という意味になってしまいます。ほとんどの関数は特に値を返さないため、onkey()
には None
が渡されることになり、キーイベントに何もバインドされなくなります。
間違った例
import turtle
screen = turtle.Screen()
my_turtle = turtle.Turtle()
def move_forward():
my_turtle.forward(50)
# ここが間違い! move_forward() のように括弧を付けてしまっている
screen.onkey(move_forward(), "Up")
screen.listen()
turtle.done()
正しい対処法
関数名の後ろから ()
を取り除き、関数オブジェクト自体を渡します。
import turtle
screen = turtle.Screen()
my_turtle = turtle.Turtle()
def move_forward():
my_turtle.forward(50)
# 正しい記述: 関数オブジェクトを渡す
screen.onkey(move_forward, "Up")
screen.listen()
turtle.done()
もし、関数に引数を渡したい場合は、引数を持たないlambda
関数でラップする方法を使います。
# 発展的な正しい例(引数を渡したい場合)
screen.onkey(lambda: my_turtle.forward(50), "Up")
screen.listen() を呼び忘れている
エラーの症状
プログラムを実行しても、キーボードをいくら押してもカメが反応しない。エラーメッセージも表示されない。
原因
turtle
グラフィックスは、デフォルトではキーボードイベントを待ち受けていません。screen.listen()
を呼び出すことで、画面がキーボード入力を「聞き取る」状態になります。
間違った例
import turtle
screen = turtle.Screen()
my_turtle = turtle.Turtle()
def move_forward():
my_turtle.forward(50)
screen.onkey(move_forward, "Up")
# ここに screen.listen() がない!
# turtle.done() # これだけだとキーイベントを拾わない
turtle.done()
正しい対処法
onkey()
の設定後、必ず screen.listen()
を呼び出します。
import turtle
screen = turtle.Screen()
my_turtle = turtle.Turtle()
def move_forward():
my_turtle.forward(50)
screen.onkey(move_forward, "Up")
screen.listen() # これが重要!
turtle.done()
turtle.done() (または mainloop()) を呼び忘れている/間違って使っている
エラーの症状
プログラムが一瞬だけウィンドウを表示してすぐに閉じてしまう。または、キー入力後すぐにプログラムが終了してしまう。
原因
turtle
グラフィックスプログラムは、イベント駆動型です。つまり、ユーザーの入力(キープレス、マウスクリックなど)を待ち、それに応じて動作します。turtle.done()
(または turtle.Screen().mainloop()
)は、プログラムを無限ループに入れて、これらのイベントを待ち続けるようにするために必要です。これがないと、スクリプトはイベントを設定した直後に終了してしまいます。
間違った例
import turtle
screen = turtle.Screen()
my_turtle = turtle.Turtle()
def move_forward():
my_turtle.forward(50)
screen.onkey(move_forward, "Up")
screen.listen()
# ここに turtle.done() がないため、イベントを処理する前にプログラムが終了する
# または、他の処理がメインループをブロックしている場合もある
正しい対処法
プログラムの最後に turtle.done()
(または screen.mainloop()
)を置きます。
import turtle
screen = turtle.Screen()
my_turtle = turtle.Turtle()
def move_forward():
my_turtle.forward(50)
screen.onkey(move_forward, "Up")
screen.listen()
turtle.done() # これでウィンドウが閉じられるまでプログラムが実行され続ける
注意
turtle.done()
と screen.mainloop()
は同じ機能を提供します。通常はどちらか一つを使います。
不適切なキー名を使用している
エラーの症状
キーを押しても何も起こらない。特にエラーメッセージは表示されない。
原因
onkey()
に渡すキー名の文字列が正しくない場合です。例えば、矢印キーを "up"
(小文字) と指定したり、スペースキーを " "
(半角スペース) と指定したりすると認識されません。
間違った例
screen.onkey(move_forward, "up") # 'Up' の U が小文字
screen.onkey(turn_left, " ") # 'space' と指定すべき
正しい対処法
公式ドキュメントや一般的な慣例に従って、正しいキー名を使用します。
- 通常の文字キー:
'a'
,'b'
など(通常は小文字でOKですが、大文字に反応させたい場合は'A'
のように指定することもあります) - エスケープキー:
"Escape"
- エンターキー:
"Return"
または"Enter"
- スペースキー:
"space"
- 矢印キー:
"Up"
,"Down"
,"Left"
,"Right"
(頭文字は大文字)
onkeyでバインドした関数内で長時間かかる処理を実行している
エラーの症状
キーを押すとプログラムが一時的に固まる、または反応が遅くなる。
原因
turtle
グラフィックスはシングルスレッドで動作します。onkey()
で呼び出される関数内で時間のかかる処理(例:複雑な計算、大量の描画、長いtime.sleep()
など)を実行すると、イベントループがブロックされ、他のキー入力や画面の更新が処理されなくなります。
間違った例
import turtle
import time
screen = turtle.Screen()
my_turtle = turtle.Turtle()
def very_slow_action():
my_turtle.circle(100)
time.sleep(5) # ここで5秒間プログラムが停止する
screen.onkey(very_slow_action, "s")
screen.listen()
turtle.done()
正しい対処法
イベントハンドラ関数内では、できるだけ短い時間で終わる処理を行います。時間のかかる処理が必要な場合は、別の方法(例:turtle.ontimer()
を使って一定時間後に処理を分割実行する、または別スレッドを使う)を検討します。
キーボードフォーカスがウィンドウにない
エラーの症状
プログラムは実行されているが、キーボードを押しても反応がない。
原因
turtle
グラフィックウィンドウがキーボード入力を受け付けるためには、そのウィンドウがアクティブな状態(フォーカスが当たっている状態)である必要があります。プログラムを実行した後、他のウィンドウをクリックしたり、IDEに戻ったりすると、turtleウィンドウのフォーカスが失われることがあります。
正しい対処法
プログラムを実行した後、必ずturtleグラフィックウィンドウをクリックして、フォーカスを当ててからキーを押します。
例1: 矢印キーでカメを動かす基本的なプログラム
これは、turtle.onkey()
の最も基本的な使い方です。矢印キーを押す(正確には、押して離す)ことでカメを動かします。
import turtle
# 1. スクリーンとカメのセットアップ
screen = turtle.Screen()
my_turtle = turtle.Turtle()
my_turtle.shape("turtle") # カメの形にする
my_turtle.speed(0) # 描画速度を最速にする
# 2. キーが離されたときに実行する関数を定義
def move_forward():
my_turtle.forward(20)
def turn_left():
my_turtle.left(30) # 30度左に回転
def turn_right():
my_turtle.right(30) # 30度右に回転
def clear_screen():
my_turtle.clear() # 描画をすべて消去
my_turtle.penup() # ペンを上げて
my_turtle.home() # 初期位置に戻る
my_turtle.pendown() # ペンを下ろす
# 3. キーと関数を関連付ける (バインドする)
# onkey(実行する関数名, 'キー名')
screen.onkey(move_forward, "Up") # 上矢印キーで前進
screen.onkey(turn_left, "Left") # 左矢印キーで左回転
screen.onkey(turn_right, "Right") # 右矢印キーで右回転
screen.onkey(clear_screen, "c") # 'c' キーで画面クリアと初期位置に戻る
# 4. キーボードイベントを待ち受ける状態にする
screen.listen()
# 5. turtleグラフィックウィンドウが開いたままになるようにする
turtle.done()
解説
turtle.done()
は、ウィンドウが閉じられるまでプログラムの実行を維持します。screen.listen()
は、キーボードイベントをプログラムが「聞き取る」ために必須です。screen.onkey(関数名, "キー名")
で、どのキーが離されたときにどの関数を実行するかを設定します。キー名は大文字・小文字を区別し、矢印キーは"Up"
,"Left"
,"Right"
のように記述します。move_forward
など、キー入力時に実行したい処理を関数として定義します。screen = turtle.Screen()
とmy_turtle = turtle.Turtle()
で、描画領域(スクリーン)と描画オブジェクト(カメ)を作成します。
例2: onkey
と onkeypress
の使い分け(キーを押している間連続で動かす)
onkey()
はキーが「離された」ときに発動しますが、キーを「押しっぱなし」にしている間も動作させたい場合は、onkeypress()
を使います。
import turtle
screen = turtle.Screen()
my_turtle = turtle.Turtle()
my_turtle.shape("turtle")
my_turtle.speed(0)
# キーが押されたときに実行する関数 (onkeypress用)
def continuous_forward():
my_turtle.forward(5) # 少しずつ前進
def continuous_backward():
my_turtle.backward(5) # 少しずつ後退
def continuous_left():
my_turtle.left(10)
def continuous_right():
my_turtle.right(10)
# 'space'キーが離されたときに実行する関数 (onkey用)
def stop_drawing():
my_turtle.penup() # ペンを上げる
def start_drawing():
my_turtle.pendown() # ペンを下ろす
# onkeypress: キーが押されている間、繰り返し関数を実行
screen.onkeypress(continuous_forward, "Up")
screen.onkeypress(continuous_backward, "Down")
screen.onkeypress(continuous_left, "Left")
screen.onkeypress(continuous_right, "Right")
# onkey: キーが離されたときに一度だけ関数を実行
screen.onkey(stop_drawing, "space") # スペースキーが離されたらペンを上げる
screen.onkey(start_drawing, "Return") # Enterキーが離されたらペンを下ろす
screen.listen()
turtle.done()
解説
space
キーが離されたときに描画を止める (penup()
)、Return
キーが離されたときに描画を再開する (pendown()
) という使い分けをしています(onkey
の挙動)。- この例では、矢印キーを押し続けることでカメが連続的に移動・回転します(
onkeypress
の挙動)。
例3: 引数を持つ関数を onkey
で使う (lambda
を利用)
onkey()
に渡す関数は引数を持たない必要がありますが、lambda
式を使うことで、引数を持つ関数を呼び出すことができます。
import turtle
screen = turtle.Screen()
my_turtle = turtle.Turtle()
my_turtle.shape("arrow") # 矢印の形にする
my_turtle.speed(0)
# 引数を持つ関数
def change_color(color):
my_turtle.color(color)
print(f"カメの色が {color} に変わりました。")
def move_distance(distance):
my_turtle.forward(distance)
print(f"{distance} だけ前進しました。")
# lambdaを使って引数を持つ関数をonkeyにバインド
screen.onkey(lambda: change_color("red"), "r") # 'r'キーで赤に
screen.onkey(lambda: change_color("blue"), "b") # 'b'キーで青に
screen.onkey(lambda: change_color("green"), "g") # 'g'キーで緑に
screen.onkey(lambda: move_distance(100), "plus") # '+'キーで100前進
screen.onkey(lambda: move_distance(-50), "minus") # '-'キーで-50前進 (後退)
# 'Escape'キーで終了
def exit_program():
turtle.bye() # turtleグラフィックを終了させる
screen.onkey(exit_program, "Escape")
screen.listen()
turtle.done()
解説
turtle.bye()
は、turtle
グラフィックウィンドウを閉じてプログラムを完全に終了させるために使います。screen.onkey(lambda: change_color("red"), "r")
のように、lambda
を使うことで、onkey
には引数なしの関数が渡され、その内部でchange_color("red")
が実行されます。change_color(color)
やmove_distance(distance)
のように、引数を持つ関数を定義しています。
例4: 簡単な描画ツールの作成
これらの機能を組み合わせると、簡単な描画ツールが作れます。
import turtle
screen = turtle.Screen()
my_turtle = turtle.Turtle()
my_turtle.shape("circle") # 描画ツールっぽい形にする
my_turtle.speed(0)
my_turtle.pensize(2) # ペンの太さ
# 移動関数 (onkeypressで連続移動)
def forward_cont():
my_turtle.forward(10)
def backward_cont():
my_turtle.backward(10)
def left_cont():
my_turtle.left(15)
def right_cont():
my_turtle.right(15)
# ペンの上げ下げ (onkeyで切り替え)
def pen_up():
my_turtle.penup()
print("ペンを上げました")
def pen_down():
my_turtle.pendown()
print("ペンを下ろしました")
# その他の操作 (onkey)
def change_pen_color(color):
my_turtle.pencolor(color)
print(f"ペンの色を {color} に変更しました")
def clear_and_reset():
my_turtle.clear()
my_turtle.penup()
my_turtle.home()
my_turtle.pendown()
my_turtle.pencolor("black") # 色をリセット
my_turtle.pensize(2) # 太さをリセット
print("画面をクリアし、リセットしました")
def increase_pensize():
current_size = my_turtle.pensize()
my_turtle.pensize(current_size + 1)
print(f"ペンの太さ: {my_turtle.pensize()}")
def decrease_pensize():
current_size = my_turtle.pensize()
if current_size > 1: # 最小値は1とする
my_turtle.pensize(current_size - 1)
print(f"ペンの太さ: {my_turtle.pensize()}")
# キーバインド
screen.onkeypress(forward_cont, "Up")
screen.onkeypress(backward_cont, "Down")
screen.onkeypress(left_cont, "Left")
screen.onkeypress(right_cont, "Right")
screen.onkey(pen_up, "u") # 'u'キーでペン上げ
screen.onkey(pen_down, "d") # 'd'キーでペン下げ
screen.onkey(lambda: change_pen_color("red"), "r")
screen.onkey(lambda: change_pen_color("blue"), "b")
screen.onkey(lambda: change_pen_color("green"), "g")
screen.onkey(lambda: change_pen_color("black"), "k") # black
screen.onkey(increase_pensize, "plus") # '+'キーで太く
screen.onkey(decrease_pensize, "minus") # '-'キーで細く
screen.onkey(clear_and_reset, "c") # 'c'キーでクリア
# 'Escape'キーで終了
screen.onkey(turtle.bye, "Escape")
screen.listen()
turtle.done()
- 'Escape' キー
プログラムを終了する - 'c' キー
画面をクリアし、カメを初期位置に戻す - '-' キー
ペンの太さを細くする - '+' キー
ペンの太さを太くする - 'r', 'b', 'g', 'k' キー
ペンの色を赤、青、緑、黒に変更 - 'd' キー
ペンを下ろす(線が描かれる) - 'u' キー
ペンを上げる(線が描かれなくなる) - 矢印キー
移動と回転(押しっぱなしで連続動作)
主に以下の2つのアプローチが考えられます。
turtle
モジュール内で提供される別のイベントハンドラturtle
が依存しているTkinterライブラリの直接利用- より高度なイベント処理フレームワーク/ライブラリの利用(ゲーム開発など)
turtleモジュール内で提供される別のイベントハンドラ
turtle
はイベント駆動型プログラミングをサポートしており、onkey()
以外にも様々なイベントを処理するメソッドが提供されています。
-
screen.ontimer(fun, delay)
:- 説明
これはキーボードイベントとは直接関係ありませんが、特定のキーが押された後の「時間の経過」に基づいてアクションを繰り返す場合などに応用できます。delay
ミリ秒後にfun
を実行し、fun
の内部で再びscreen.ontimer()
を呼び出すことで、繰り返し処理を実現できます。キー入力をトリガーとして、アニメーションやゲームループを開始・停止する際に使われることがあります。 - 用途
アニメーション、ゲームループ、特定のキーが押された後に自動で何かを実行する。 - 例
この例では、スペースキーを押すとカメが自動で動き出し、もう一度押すと停止します。import turtle screen = turtle.Screen() my_turtle = turtle.Turtle() my_turtle.speed(0) is_moving = False def toggle_move(): global is_moving is_moving = not is_moving if is_moving: move_loop() # 移動を開始 def move_loop(): if is_moving: my_turtle.forward(2) screen.ontimer(move_loop, 20) # 20ミリ秒後に再度呼び出す screen.onkey(toggle_move, "space") # スペースキーで移動の開始/停止を切り替える screen.listen() turtle.done()
ontimer
が非同期的な動きを可能にしています。
- 説明
-
screen.onkeypress(fun, key)
:- 説明
これはonkey()
と非常に似ていますが、キーが押された瞬間にfun
を実行します。onkey()
がキーが「離された」ときに発動するのに対し、onkeypress()
はキーが「押された」ときに発動します。キーを押しっぱなしにすることで、連続的にアクションを実行したい場合に便利です。 - 用途
ゲームでのキャラクターの連続移動、描画ツールの連続線引きなど。 - 例
import turtle screen = turtle.Screen() my_turtle = turtle.Turtle() my_turtle.speed(0) def move_forward(): my_turtle.forward(5) # 'Up'キーが押されている間、連続して前進 screen.onkeypress(move_forward, "Up") screen.listen() turtle.done()
- 説明
Tkinterライブラリの直接利用
turtle
モジュールは、Pythonの標準GUIライブラリであるTkinterの上に構築されています。したがって、Tkinterの機能に直接アクセスしてキーボードイベントを処理することも可能です。これはより低レベルなアプローチであり、turtle
の抽象化されたメソッドでは実現できない、より細かい制御が必要な場合に利用されます。
screen.getcanvas().bind(sequence, func)
:- 説明
screen.getcanvas()
でTkinterのCanvas
ウィジェットオブジェクトを取得し、そのbind()
メソッドを使ってイベントをバインドします。Tkinterのイベントシーケンス(例:<Key-Up>
,<KeyPress-a>
,<KeyRelease-b>
など)を指定することで、より柔軟なイベントハンドリングが可能です。 - 用途
turtle
のonkey
/onkeypress
では直接サポートされていない特定のキーイベント(例:修飾キーとの組み合わせ、特定のキーダウン/アップのみを厳密に区別したい場合など)を捕捉したい場合。 - 例
import turtle screen = turtle.Screen() my_turtle = turtle.Turtle() my_turtle.speed(0) # TkinterのCanvasオブジェクトを取得 canvas = screen.getcanvas() def tk_move_forward(event): # Tkinterのイベントハンドラは通常、eventオブジェクトを受け取る my_turtle.forward(10) print(f"キーが押されました: {event.keysym}") # どのキーが押されたか確認 def tk_key_release(event): print(f"キーが離されました: {event.keysym}") # Tkinterのbindメソッドを使用 # <KeyPress-Up>: 上矢印キーが押されたとき canvas.bind("<KeyPress-Up>", tk_move_forward) # <KeyRelease-Down>: 下矢印キーが離されたとき canvas.bind("<KeyRelease-Down>", tk_key_release) # 'a'キーが押されたとき canvas.bind("<KeyPress-a>", lambda event: my_turtle.circle(50)) screen.listen() # Tkinterのbindを使う場合でも、listenは必要です turtle.done()
- 注意点
onkey()
やonkeypress()
と異なり、bind()
でバインドされた関数はイベントオブジェクトを引数として受け取ります。lambda
を使う場合は、lambda event: ...
のように引数を受け取る必要があります。
- 説明
より高度なイベント処理フレームワーク/ライブラリの利用
もしturtle
の機能だけでは不十分で、より複雑なゲームやGUIアプリケーションを開発したい場合は、turtle
とは全く異なる専門のライブラリを使用することを検討すべきです。
-
PyQt / Kivy / wxPython など (本格的なGUIフレームワーク):
- 説明
これらはデスクトップアプリケーション開発のためのフル機能のGUIフレームワークです。キーボードイベントを含むあらゆるユーザー入力を、ウィジェットごとのシグナル/スロット、イベントハンドラなどの仕組みで処理します。 - 用途
高機能なデスクトップアプリケーション開発。
- 説明
-
Pygame:
- 説明
Pythonでゲーム開発を行うための非常に強力なライブラリです。キーボードイベント、マウスイベント、ジョイスティック、グラフィックス、サウンドなどを包括的に扱えます。イベントループ内でpygame.event.get()
やpygame.key.get_pressed()
などを用いて、イベントをポーリング(常に監視)します。 - 用途
2Dゲーム開発全般。 - 例 (概念)
# import pygame # pygame.init() # screen = pygame.display.set_mode((800, 600)) # # running = True # while running: # for event in pygame.event.get(): # if event.type == pygame.QUIT: # running = False # if event.type == pygame.KEYDOWN: # if event.key == pygame.K_UP: # # キャラクターを上に動かす # pass # if event.key == pygame.K_SPACE: # # 発砲する # pass # if event.type == pygame.KEYUP: # if event.key == pygame.K_UP: # # 上への移動を停止する # pass # # ゲームの状態更新 # # 描画 # pygame.quit()
- 説明