珈琲焙煎者の観察

地下部屋の珈琲焙煎者

インベーダーゲームをつくる。

pythonでゲームをつくっていくのに、pygame1というゲームに特化したモジュールをOSにインストールする。 これは、PCのオーディオデバイスにアクセスしたり、キーボードの入力を検知したり、画面の描画の処理をしたりする部分をモジュール化したライブラリで負担して、コーディングする方としては、ライブラリの用意した命令でプログラムすれば、ゲームの動作に必要なたくさんの処理を列挙して記述する必要が無いということ。

ここで、pythonでのゲームつくりの本である Making Games with Python and Pygame Paperback – 2012 by Al Sweigart から第2章– PYGAMEの基本を引用しよう。

Pythonにプログラムに追加機能を提供するrandom、math、timeなどのモジュールが付属するように、Pygameフレームワークには、グラフィックスの描画、サウンドの再生、マウス入力の処理などの機能を備えたいくつかのモジュールが含まれます。

Software developer. UI designer. Tech book author. Al Sweigart2のウェブサイト https://inventwithpython.com/pygame/chapter2.html

ここではPygameフレームワーク3とされている。 まずフレームワークで、ゲームのプログラムを見てみようか。 ここで言うゲームのプログラムは、先にあげたインベーダーゲームのプログラム4を含む共通の構造を有するもので、つまり似たようなお決まりがあるものを指す。

ゲームのプログラムの構造

いったんインベーダーゲームから離れて、Pygameモジュールを活用したフレームワークについて、ゲームのプログラムの構造の理解、また今のところはインベーダーゲームのプログラムについて全くわからないけれども、構造から理解すると、どこにどういう処理が書かれているのかまでは推理できるようになるというわけだ。

manuke.hateblo.jp

では、ゲームプログラムの最小の要件をそなえたプログラムを読もう。 いや、ウィンドウプログラムの要件というべきだ。 つまり、モニター上にウィンドウが表れて、ウインドウが閉じることが出来るプログラム。ウィンドウを閉じるとプログラムは終了する。これって、大事なことだ、ほんとに。 無事に閉じて終了できないプログラムなんて悪夢でしょう。

window001.py

import pygame, sys
from pygame.locals import *

pygame.init()
DISPLAYSURF = pygame.display.set_mode((400,300))
pygame.display.set_caption('Hello world')
while True:
  for event in pygame.event.get():
    if event.type == QUIT:
      pygame.quit()
      sys.exit()
    pygame.display.update()

さて、ここから、pythonコードを実行していくので、pythonコードを書けるエディターと、pythonを実行するコンパイラが必要になってくる。 いろんな組み合わせがあるようだけれども、デバッガ5というプラグラムコードを実行しながら、プログラムがどうやって実行されているのかチェックできるプログラムが必要になった場合はspyderというプログラムをオススメしておきます。6

もちろんいろんな考えや経験があるので、他のものを使ってもいい。 sublime text3でも、atomでもVSCodiumでもIDLEでも、好きなのをどうぞ。他にもある7。 いろいろな分け方があるわけだけども、オープンソースのものと、そうでないものということで分けると、

オープンソース
  • spyder(エディターとデバッカ、またspyderを含むパッケージにpythonコンパイラも含まれているので総合開発環境といえる。)
  • IDLE(エディターとデバッカ、総合開発環境。オープンソース??)
  • atomテキストエディター。それぞれのパッケージをインスールすることでpythonシンタックスハイライトや、デバッカー機能も付け足すことができる。これとは別にpythonのインストールが必要。)
  • VSCodiumテキストエディター。それぞれのパッケージをインスールすることでpythonシンタックスハイライトや、デバッガ機能も付け足すことができる。これとは別にpythonのインストールが必要。)
  • Vimテキストエディター。それぞれのパッケージをインスールすることでpythhonのデバッガ機能も付け足すことができる。これとは別にpythonのインストールが必要。キーバインドが特殊ではあるけれどキータイプするには便利な機能がある。)

オープンソースではない
  • sublime text3テキストエディター。それぞれのパッケージをインスールすることでpythhonのデバッガ機能も付け足すことができる。これとは別にpythonのインストールが必要。)
  • pycharm(エディターとデバッガ、総合開発環境。)

つまり、テキストエディターとpythonコンパイラという組み合わせで、好みのテキストエディターを使うのと、総合開発環境に用意されたエディターを使うかということだけれど、spyder は、後者で、メリットとしてはデバッガが扱いやすいという印象がある。 spyder を選ぶ場合は、pythonのインストールもspyderを含むパッケージでインストールすることが推奨されています。 やや、ややこしいが、AnacondaWinPython などのパッケージで spyder を含む構成でインストールすることができる。

また、上記の全てのpythonの実行できる環境と、また別にPygameもインストールする必要がある。PygameGNU Lesser General Public Licenseというstrong copyleft8哲学のもとでのライセンスで配布されています。何のことかわからなくてもいいですが、調べてみると興味深いかもしれません。 どれを選ぶにしても、それぞれ試してみるのには時間がかかると思います。じっくり、ゆっくり吟味してください。

さて、さっきでてきた、pythonのプログラムコード’window001.py’を実行するとこんな感じになりました。

f:id:honda-satoru:20191218223957p:plain
window001.py 実行画面

実行までできたけど、こうならないという場合は、エラーがないかよくみてください。 まず、あまりまだきちんとふれていませんが、このプログラムはpythonの他にpygameというモジュールを使っています。 ですから、pygameというモジュールをインストールする必要があります。

PyGameについて簡単に説明

pygameは時間、ビデオ(静止画像とビデオの両方)、音楽、フォント、さまざまな画像形式、カーソル、マウス、キーボード、ジョイスティックなどを処理できます。 PyGameSDL9に基づいています。SDLクロスプラットフォームであり、非常にシンプルなCライブラリ。ただし、PyGameは単なる単純なラッパーではなく、PyGame独自の機能も追加するため、ゲームの作成はさらに簡単になります。 Pygameのインストールについては、「How to Install Pygame」というキーワードでインターネットで調べてみてください。 全くわからないという場合は、youtubeで5分くらいの動画で調べてみてください。英語での解説でわからないという場合でも、5分くらいでかなり丁寧にステップバイステップで説明されているものがありますから、ことばがよく解らない場合でも、画面をよーく見て、一通り見終わったら、解らないところを見直してキーワードを抜き出して、またインターネットで検索してみてください。

実に遠回りに思えるかもしれないですが、まったく解らないことを、探索する場合に、まず一通り見るというのは重要なことです。知らないことを解るということは、ありえませんから、一度見て解らなくてもそれは、当然です。初めて一通り見たとき、ここが解らないということを知ることができます。

また、できれば、1つだけ見るのではなくて、いくつかのケースをピックアップして、複数を見てみてください。それぞれに全くおなじではなく、差があると思います。 その差も、いくつか見ておいて、なんか違うなと心にとどめておけば、また随分後になって、役に立つことがあります。今はわからないことでも、自分がそのレベルに達したときに、初めて、あれはこの状況で活かされてることだったんじゃないかな?と気がつくときがあります。

インターネット上には様々なレベルの情報があって、目的のレベルの情報を拾い上げることが重要だと思います。 それには、ある程度時間をかけて、一見無駄な情報も取り込んで考えてみるという積み重ねが必要です。最初は遠回りですが、そこを通らないと、延々と何時までも遠回りが続くと考えることもできます。 そのような道筋を数回通ると、徐々に必要な情報にたどり着きやすくなってくるはずです。

とはいえ、Pygameのインストールは難しくはなさそうです。情報はたくさんあるので吟味してインストールしてみてください。

さて、先ほどのpythonのプログラムのの動作を確認します。

f:id:honda-satoru:20191219013120p:plain
window001.py プログラム終了
プログラムコードの最初の2行を見てみます。

import pygame, sys
from pygame.locals import *

これはどういう意味か。 pygameはモジュールでした。sysは初めて登場します。 これは、importステートメントと呼ばれる構文です。モジュールをプログラムに読み込んで、モジュール内にある関数などをプログラムから使えるようにするわけです。

import モジュール名,モジュール名,... と使用します。 sysは、モジュールですがPygameのように別途インストールする必要はないモジュールですがプログラムコードで扱うのでimportステートメントで読み込みます。

2行目は、同じくimportステートメントですが、通常、モジュール内の関数を呼び出す場合は、モジュールのインポート後に module名.function名()を使用する必要があります。 from modulename import * を使用すると、モジュール名をスキップして単にfunction名()というように使用できます。 つまりここでは、from pygame.locals import * ですから、pygameというモジュールの中の関数などをプログラムコードで使いたいときに、通常はpygame.function名()と表記するところを、function名()でpygame内の関数を呼び出せるということです。


  1. Pygameのウェブサイト https://www.pygame.org/

  2. https://alsweigart.com/

  3. ソフトウェアフレームワーク - Wikipedia

  4. spaceinvaders_copy.py · GitHub

  5. デバッガ - Wikipedia

  6. テキストエディターにpython向けのデバッガのパッケージを追加でインストールして、プログラムを実行するとき、どうしてエラーになるのかデバッグします。デバッガは、プログラムが落ちても、デバッガがそれを監視しているというものなのだと思います。総合開発環境のspyderをどういうものか見てみると、デバッガのなかでエディターが動いているような感じでした。これは、プログラムの流れを見ながら勉強していくには都合がいいように思えます。プログラムコード自体を比較して見たいときには、テキストエディターを使い、プログラムの実行を処理の順を追って可視化したいときには、spyderなどのプログラムを使うというように分けて使いたいと思います。テキストエディターにもプラグインのような形で対応するデバッガが配布されているので、好みのテキストエディターに使いやすいデバッガがあれば、そちらを使ってみてください。

  7. Top Python IDEs for 2019 (article) - DataCamp

  8. コピーレフトって何? - GNUプロジェクト - フリーソフトウェアファウンデーション

  9. SDLウェブサイト https://www.libsdl.org/