tkinterを使って円が跳ね返るプログラムを作ろう
前回は単純に円が横に移動するだけのプログラムでした。
今回は円が壁に当たった時に跳ね返るプログラムを作ってみましょう。
coords()メソッドの書式
前回はキャンバス内のオブジェクトを move()メソッドで移動させましたが、今回はcoords()メソッドを使って移動させます。
coords()メソッドの書式は、以下の通りです。
各座標は、次に描画するオブジェクトの位置になります。
ウィジェット名.coords(オブジェクトID, X座標1, Y座標1, X座標2, Y座標2, …)
メモ
座標の数はオブジェクトのタイプによって異なります。
Pythonスクリプト
coords()メソッドを使って円が壁に当たって跳ね返るプログラムは、以下のようになります。
座標が画面の外に出そうになったら、円の移動する向きを反転させています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
### インポート import tkinter ### 定数 WIDTH = 640 # 画面横サイズ HEIGHT = 400 # 画面縦サイズ SIZE = 20 # 円サイズ M_DOT = 4 # 移動ドット W_TIME = 30 # 待ち時間 ### 変数 x_pos = 0 # X座標 y_pos = 0 # Y座標 x_flg = 0 # 横限界フラグ y_flg = 0 # 縦限界フラグ ### キャンバス作成 canvas = tkinter.Canvas(width=WIDTH, height=HEIGHT) ### キャンバス表示 canvas.pack() ### オブジェクトID取得 id = canvas.create_oval(x_pos, y_pos, x_pos+SIZE, y_pos+SIZE, outline="red", fill="red") ### 処理実行関数 def run(): ### グローバル変数宣言 global x_pos global y_pos global x_flg global y_flg ### 横座標設定 if x_pos < 1: x_flg = 0 elif x_pos > WIDTH - SIZE: x_flg = 1 if x_flg == 0: x_pos += M_DOT else: x_pos -= M_DOT ### 縦座標設定 if y_pos < 1: y_flg = 0 elif y_pos > HEIGHT - SIZE: y_flg = 1 if y_flg == 0: y_pos += M_DOT else: y_pos -= M_DOT ### 円表示 canvas.coords(id, x_pos, y_pos, x_pos+SIZE, y_pos+SIZE) ### 待機 canvas.after(W_TIME, run) ### 処理実行 run() ### イベントループ canvas.mainloop() |
プログラムを実行すると、円が壁に当たると跳ね返ります。