↓もし、良かったらSNSでの紹介よろしくお願いします。

Pythonでシューティングゲームを作る1(tkinterチュートリアル)

bootstrap

目次

  1. はじめに
  2. tkinterで図形を描画
  3. tkinterでマウスイベント(使い方)
  4. tkinterでマウスイベント(一覧)

tkinterとは?

tkinterはGUI作成を支援するPythonの標準ライブラリーです。

簡単なゲームを作る

fighter-jet-63090_640

tkinterの使い方を覚えるために、シューティングゲームを作っていきます。ちなみにシューティングゲームといっても2D(縦スクロール)です。グラフィックもレトロゲームレベルです。一回でまとめようとすると長くなるので、3~5回くらいに分けて書こうと思います。

マウスにあわせて動く四角

まず簡単に次のようにマウスの動きに合わせて動くところまで作ります。プレイヤーの土台となる要素です。

game1

コード

import tkinter
def motion(mouse):
    canvas.delete("player")     canvas.create_rectangle(mouse.x- 20, mouse.y - 20, mouse.x + 20, mouse.y + 20, fill="white", tag="player")     window = tkinter.Tk()     #画面のサイズを固定     window.resizable(width=False, height=False)     #キャンバスを400×600で作成     canvas = tkinter.Canvas(window, width = 400, height = 600)     #黒で塗りつぶす     canvas.create_rectangle(0, 0, 400, 600, fill="black")     #キャンバスをウィンドに表示     canvas.pack()     #マウスイベントを受け付ける     window.bind("<Motion>", motion)     #ウィンドウの応答     window.mainloop() 

図形を描画する

#キャンバスを400×600で作成
canvas = tkinter.Canvas(window, width = 400, height = 600)
#黒で塗りつぶす
canvas.create_rectangle(0, 0, 400, 600, fill="black")
#キャンバスをウィンドに表示
canvas.pack()

何かを描画したいものがあるときはtkinter.Canvasを使います。

create_rectangleで四角が描画できます。背景を黒く塗りつぶしたいので、キャンバスのサイズと同じサイズの四角を描画します。fillに色を入力することで、その色の四角が描画されます。

マウスイベント

#マウスイベントを受け付ける
window.bind("<Motion>", motion)

window.bindは第1引数がイベント、第2引数がコールバック関数(イベントが起こったとき呼び出される関数)になってます。bindによってイベントとコールバック関数が紐付きます。<Motion>はマウスが動くイベントを表しています。マウスが動くとmotionが呼び出されます。また、他のイベントについては後半にまとめてます。

コールバック関数

def motion(mouse):
    canvas.delete("player")     canvas.create_rectangle(mouse.x- 20, mouse.y - 20, mouse.x + 20, mouse.y + 20, fill="white", tag="player")

コールバック関数はマウスをオブジェクトとして受け取ります。このコールバック関数の中身はまず、”player”とタグ付けされた図を消します。そして”player”とタグ付けされた四角を描画します。”player”を消さないと次のようなことになります。

game2

マウスイベントまとめ

  • <Motion> :マウスが動いたとき
  • <1> :左クリックしたとき(<Button-1>でもOK)
  • <2> :真ん中クリックしたとき(<Button-2>でもOK)
  • <3> :右クリックしたとき(<Button-3>でもOK)
  • <Double-1> :左をダブルクリックしたとき(<Double-Button-1>でもOK)
  • <Double-2> :真ん中をダブルクリックしたとき(<Double-Button-2>でもOK)
  • <Double-3> :右をトリプルクリックしたとき(<Double-Button-3>でもOK)
  • <Triple-1> :左をトリプルクリックしたとき(<Triple-Button-1>でもOK)
  • <Triple-2> :真ん中をトリプルクリックしたとき(<Triple-Button-2>でもOK)
  • <Triple-3> :右をダブルクリックしたとき(<Triple-Button-3>でもOK)
  • <ButtonRelease-1> :左クリックして離したとき
  • <ButtonRelease-2> :真ん中クリックして離したとき
  • <ButtonRelease-3> :右クリックして離したとき
  • <B1-Motion> :左クリックした状態で動いたとき
  • <B2-Motion> :真ん中クリックした状態で動いたとき
  • <B3-Motion> :右クリックした状態で動いたとき
  • <MouseWheel> :マウスホイールが動いたとき
  • <Enter>:マウスがウィンドに入ったとき(回転数はmouse.deltaで取得)
  • <Leave>:マウスがウィンドから離れたとき

次の記事を公開しました。

Pythonでシューティングゲームを作る2(Tkinterの並列処理)