IT関連/プログラミング

【Python】tkinterで図形を動かして接触判定を実装してみる

Python tkinterライブラリを使って、図形の接触判定を行う

どうも多浪Fランぼっち底辺大学生です。

今回はPythonのtkinterライブラリを使って、図形を動かして接触判定を行うプログラムを紹介していきます。

Pythonで図形を動かして接触判定をしてみたいんだが、どうしたらいい?

このような疑問を解消したい人に向けた記事となっています。

この記事の内容
  • 図形を描画したい
  • 図形を動かしてみたい
  • 接触判定を行って図形の色を変化させたい

Pythonの基礎を学習した人なら、ちょっと暗記するだけで自分でも作れるようになる内容なので、サラッと読んでみて下さい。

↓↓↓参考書籍はコチラ↓↓↓

 

tkinterで図形を描画したり動かしたりする内容を学びたいなら、普通におすすめです。

また、pygameライブラリを使った内容も学べるので、書籍名通りPythonでゲームを作ってみたい人にピッタリな書籍なので購入してみて下さい。

図形を動かして接触判定を実装したソースコード

早速、【図形を動かして接触判定】を行うソースコードを示したいと思います。

こんな感じです(-ω-)/

コード数は短いですし、Pythonの基礎を勉強した人ならサラッと覚えられるのではないかと思います。

 

動作内容としては以下です。

  • 黄色の円はマウス操作で動かせる
  • 緑色の円は固定されている
  • 黄色の円は緑色の円に近づくごとに色が変化する
    黄色オレンジ色赤色

実際にコードを記述して確認してみて下さい(‘ω’)ノ

ソースコードについて解説

【図形を動かして接触判定】を行うソースコードを確認したところで、少し解説を行ってみたいと思います。

とは言え、冒頭で紹介した「Pythonで作るゲーム開発 入門講座 実践編」を手に取って読んでもらうのが一番いいんでしょうが・・・

とにかく、解説をしてみたいと思います

ウィンドウの作成と図形の描画

tkinter(ティーキンター)ライブラリを使ってウィンドウの作成と図形の描画を行うことは基本中の基本であり、サラッと暗記できてしまう程度の内容です。

こんな感じで↓↓↓

 

たったこれだけの記述でウィンドウを作成し図形(円形)が描画できます。

Python tkinterで図形を描画
簡単だな

さらに、分解して順に説明してみます。

この記述を実行すると以下のように、600×500のウィンドウ(タイトル付)のみが描画されます。

  • width(横幅)=600ピクセル
  • height(縦幅)=500ピクセル
Python tkinter ウィンドウの作成

 

そして、上記のコードに円形を描画する記述を追加します。追加(円形を描画)するコードは以下です。

固定用の円形を用いて説明すると、中心座標と半径は次のように設定されます。

  • 中心座標 = (x1, y1)
  • 半径       = r1

円形を描画するための中心座標と半径を、”cv.create_oval()”の引数とすることで、図形が描画されます。

因みに、描画する際のイメージとしては以下です。

Python tkinter図形の描画

以上で、ウィンドウを作成し図形(円形)を描画することができました。

図形をマウス操作で動かすして色を変化させる

ウィンドウの作成と図形の描画ができたら、図形をマウス操作で動かす処理を実装します。

このように記述することで、変数cv(ウィンドウや図形)に対してマウス操作が行えるようになり、かつマウス操作される度にmove関数が呼び出されます。

詳しい解説は「Pythonでつくる ゲーム開発 入門講座 実践編」か「OFFICE54さんの記事」を読んでみてください。

 

話を戻して、マウス操作によって変化する2つの円の距離を基に、色を変化させる処理について説明します。

先ほどマウス操作が行われる度に”move”関数が呼び出されると言いました。

move関数では引数”e”で得られた(円形がどこに移動したかなど)情報を基に、マウスで移動した時点での座標を取得します。

※引数eの説明は省略

そして、移動する図形の座標を更新。

  • x2 = e.x
  • y2 = e.y

↑こうすることで、ウィンドウ上の座標を更新できるんですね。

 

そして、”judge”関数の戻り値を基に色を変更します。

 

あとは、接触判定を行うjudge関数を実装するのみです。

接触判定を行うjudge関数

接触判定とは、2つの円が触れているかどうかを判定するものです。

このことは、中学か高校の数学で学んだことを活かせば、簡単に判定することができます。

円の距離

図に示した通り、[dis <= r1+r2]であれば接している・重なっていると言えます。

一方、[dis > r1+r2]であれば接していないことになります。

dis <= r1+r2  : 接している・重なっている

dis > r1+r2  :接していない

 

このように考えて、judge関数を記述します。

  1. 2つの円が触れている・重なっている : 戻り値を0
  2. 2つの円の距離が19ピクセル以内      : 戻り値を1
  3. それ以外             :戻り値を2

とすることで、judge関数を構成しました。

 

以上で図形を用いた接触判定が行えます。

まとめ

以上で【Pythonのtkinterライブラリを使って、図形を動かして接触判定を行うプログラム】の紹介と解説を終わります。

簡単な内容だったので、もっと色々なことを試してみたいと思う人は以下の書籍で勉強してみて下さい。

 

また、Pythonに特化した学習サービスPyQなども利用してみる事をおすすめします。

╲月額3,040円から╱
Pyの詳細を見る

それでは。

人気ブログランキング