Tuesday, March 3, 2020 / Chromebook, Crostini, PyGame, Programming

Chromebook で PyGame 環境をつくって遊ぶ

Python IDLE

今、「たのしくまなぶ Python ゲームプログラミング」を読みながら PyGame を試しているのですが、 ちょうどよいタイミングで Chrome OS が 80 にアップデートされて Crostini で Debian 10 Buster が使えるようになったため、 PyGame 環境の構築が簡単になりました。

この本には 環境構築については WindowsとMac用の説明しかないので、Chromebook(OS 80) + Crostini での環境構築方法をメモしておきます。

Crostini からターミナル起動

設定画面から有効にするだけで起動できます、詳細は割愛。

Linuxバージョンの確認

Debian 10 Buster になっていることを確認:

$ cat /etc/debian_version 
10.1

必要なツールをインストール

$ sudo apt update

で更新して、IDLE と PyGame Zero をインストールします:

$ sudo apt install idle3
$ sudo apt install python3-pgzero

インストール後、コマンドが入ったかを確認:

$ which python3
$ which idle
$ which pgzrun

これらのコマンドは以下の場合にそれぞれ使用します:

  • python3 は Pythonコードを実行するとき
  • idle(開発環境) は IDLEを起動するとき
  • pyzrun は PyGame を使った Python コードを実行するとき

ファイルマネージャから ドラッグ・アンド・ドロップ実行

この本では、書いたコードを pgzrun で実行するときに、ファイルマネージャから該当ファイル(python コードを保存したファイル)をターミナルに ドラッグ・アンド・ドロップ実行せよと書いてあるのです。 しかし、Chromebook標準のターミナルとファイル(ファイルマネージャ)の組み合わせではこれが(今のところ)できないようです。 ドラッグ・アンド・ドロップする代わりに普通にファイルパスを入力すれば済む話なんですが・・・

そこで、これをできるようにするために gnome-terminal と nautilus をインストールします。 (nautilus は Gnome のファイルマネージャです。)

$ sudo apt install gnome-terminal nautilus

これらがインストールできたらそれぞれ起動して、nautilus から ファイルを gnome terminal にドラッグ・アンド・ドロップすると・・・ 今度はうまくドロップしたファイルのパスが gnome terminal にペーストされるのですが、 pgzrun コマンドとの組み合わせではうまく作動しません。 ペーストされた文字列を見ると file:///home/foo/shoot-the-fruit/shoot.py のようになっている。 pgzrun が期待する文字列をは /home/foo/shoot-the-fruit/shoot.py のようです。 つまり 先頭の file:// 7文字分を削除しなければならない。

そこで、自前の pgzrun コマンドをつくり、そこで不要な文字列を削除した上でそれを本物の /usr/bin/pgzrun コマンドに渡して実行するようにしました。

~/bin/pgzrun

#!/bin/bash
pythonfilepath=$1
/usr/bin/pgzrun ${pythonfilepath:7}

あとは、pgzrun コマンドを実行したときに、この自前で用意した ~/bin/pgzrun が優先的に実行されるように:

export PATH=$HOME/bin:$PATH

のような設定を ~/.bashrc に書いておけばOKです。 もちろん、chmod u+x ~/bin/pgzrun などして実行権を付与しておくこともお忘れなく。

ファイルマネージャからのドラッグ・アンド・ドロップで実行したい、そのためのだけにこれだけの準備をするのはちょっと面倒ですが。

まとめ

これからプログラミングをやってみようという中学生が最初の第一歩として使う教材として 「たのしくまなぶ Python ゲームプログラミング」はちょうどよいのではないでしょうか。

はじめは、プログラム言語は Python より Javascript のほうがいろいろな意味でよいだろう、と思っていたのですが、 この本に出会って考えが変わりました。 IDLEとPyGameさえインストールした環境があれば、あとは以下のような数行のコードを書くだけで ウインドウと画像が表示できるのは、すごい。

apple = Actor('apple')

def draw():
    screen.clear()
    apple.draw()

Javascript の場合、Javascript だけでなく HTML や CSS の理解も必要になるので、初心者にとってはハードルが高いような気がします。

先日 Chromebook のテレビCMがあってびっくりしましたが、このような用途にも Chromebook は最適なので、もっと日本で流行るといいですね。