教科書に書いていないことを学べるのがクラブ~モジュールの使い方~

9月4日の水曜日のクラブ活動は、メンバーの6割の出席でした。

メニュー

  • 18時00分~18時30分 タイピング練習
  • 18時40分~19時50分 ゲームプログラミング(それぞれの進捗で)
  • 19時50分~20時00分 あとかたづけ

タイピング練習

水曜日のクラブ活動では、寿司打をあまり取り組んでいませんでした。今回は寿司打に挑戦します。

寿司打 https://sushida.net/

寿司打の何が良いかというと、ゲーム性の高いところです。ついつい夢中になってスコアを伸ばそうとします。

もちろん短所もあって、文章を入力するわけではないところが短所です。寿司打ばかりやっていると、日本語の文章入力の上達が遅くなります。

ということで、いろいろツールは織り交ぜて練習すると、飽きることの防止にもなってよいのです。

モジュールの使い方

教材の93ページに、モジュールの使い方について記載されています。

Pythonのモジュール分割はかんたんで、取り込まれるモジュールを別のファイルに保存して、取り込むファイルの頭にimportで取り込むだけです。

教材には、モジュール化する利点として以下を挙げています。

  • メインとなるプログラムが短くなり、読みやすくなる
  • 他の人が作ったファイルを利用することもできる

おそらく、自分で書いてすぐに実感するのは前者の方です。しかし、もっと重要なのは後者です。

この仕組みがあるおかげで、複数人でひとつのアプリケーションを共同開発できるのです。だれかが作った先行資産を有効活用できるのです。そして、「他の人」とは「過去の自分」も含みます。モジュール化は、過去の資産(作ったプログラム)を、将来有効に使うための仕組みなのです。

マウスクリック検知

教材の145ページには、マウスクリックを検知して画面のシンボルが動くプログラムが示してあります。このプログラムで、質問がありました。対象箇所は以下です。

import pygame as pg, sys
     .....
mdown = pg.mouse.get_pressed()
     .....
if mdown[0]:
     .....

途中は関係ないので省略しています。

質問は、「(上記プログラムリストでは5行目の)mdownの[0]はなんですか?」というものです。

たしかに、3行目で変数になにか入れているだけなので、[0]は意味がよくわかりません。わたしもマイコンプログラムを始めたころによく悩んだ覚えがあります。

答えを書くまえに、少し考えてみましょう。5行目のmdown[0]は、ifの条件式エリアにあるので、値は「True」or「False」の2値です。では、mdownは何かというと、3行目に書いてあるとおりpg.mouse.get_pressed()です。先頭のpgは、1行目でimportしたpygameの省略形です。

さて、pg.mouse.get_pressed()を読み解いていきましょう。mouseとあるので、おそらくマウスの動作に関するものです。そして、getとあるので、なにか値を取得してきます。さらに、pressedとあります。pressedは「押した(押された)」ということです。以上から、mdownは「マウスのボタンが押されていればTrueを、押されていなければFalseが入る変数」だと推測できます。

ここで一旦立ち止まって、さらに考えます。マウスにはいくつボタンがありますか? 最低でも2つあるはずです。現在では、多くの場合ホイールボタンがついているので、3つ以上のボタンがあります。つまり、mdownには「左ボタンの押下状態、右ボタンの押下状態、…」があると予想できるのではないでしょうか。

答えをいうと、mdownにはコンピューターに接続されたマウスのボタン押下状態がリストで与えられ、mdown[0]は与えられたリストの第1要素のことです。

Web検索するには、「pygame mouse get_pressed」あたりをキーワードにすればすぐにヒットします。さらに調べてみると、mouse.get_pressed()で取得するのは、マウスの「ボタン1、ボタン2️、ボタン3」の状態ということです。ちなみにボタン1は左ボタン、ボタン2が右ボタンです。ボタン3は、3つボタンマウスの中ボタンのことです。まあ、ボタン3については深追いしません。

このように、すぐに検索するのではなく、想像力をもって考えていくと、力がつきます。Pythonは比較的自然言語に近い表現が多いので、想像をしやすいのです。