昔の BASIC 言語みたいにお絵かきをしたい

投稿者: | 2019/11/20

Don't you want to draw simple graphics like using old times BASIC language?

最近、高校時代のパソコン仲間と話をしていたとき、かつては BASIC 言語でいとも簡単にグラフィックを描いていた彼が、最近のパソコンでそういうことをしたくても難しい、ということを言い出しました。彼は現在は文系畑の仕事をしているので仕方がないかも知れませんが、それでも彼は、かつてアセンブラでコンピュータゲームを移植したりしていた猛者です。いっぽう私も、プログラマの端くれでありながら、GUI 系のコーディングは大の苦手と来ています。

彼はおそらく、お子さんに昔のパソコンの経験を見せてあげたいのではないでしょうか。昔の 8ビットパソコンの BASIC であれば、LINE 文や CIRCLE 文で、綺麗なグラフィックスを描くことも容易でした。そんな体験をお子さんに見せてあげたいという方は、他にも多いのではないでしょうか。

言語は Python ?

最近はなんでもミニゲーム、ミニパソコンがブームで、手のひらに乗るような懐かしのパソコンが手に入ったりしますが、これは、われわれ大人が昔を懐かしむには良いのでしょうが、お子さんの現実的な興味に応えるには、ちょっと違うような気がします。中学生や高校生になっても役に立つ経験を踏むには、やはり現代の本格的なプログラミング言語を触ってもらうべきでしょう。

そのような言語の候補としては、JavaScript や Go 言語なども挙げられるでしょうが、今回は無難に Python を取り上げてみます。一つの理由として、流行りの Raspberry Pi で初めから容易に利用できるようになっていることに加え、子供に人気の(私にも人気の…)ゲーム Minecraft を Python で制御する、といったような面白いプロジェクトにも繋がってくる、ということがあります。

ライブラリは turtle に決定

次に、Python で容易に使えそうなグラフィックライブラリを探してみました。お子さんが触るとなると、いずれはゲームを書けたりするとモチベーションが上がりそうです。

そんなライブラリを探してみると、次のようなものが見つかりました。(もっとあるかも知れません)

  • Pygame
  • Pygame Zero
  • Arcade
  • PyEasyGraphics
  • turtle(Python 標準ライブラリ)

前者の 3つは、本格的なゲームを書くことが出来るくらい充実した、実用的なライブラリのようですが、次のような問題点もあります。

  • 基本的に、イベントドリブンな考え方に基づいている
  • 効率を重視しているので、非本質的(子供に説明しづらい)な関数が多い
  • 対話的にグラフィックを描くというより、まとまったプログラムを作成することを意図している

つまり、お父さん(お母さん)が、かつての BASIC 言語のような気持ちで、お子さんに「コンピュータお絵かき」を教えるには敷居が高すぎるのです。イベントドリブンてなんやねん?  と、昔のパソコンから遠ざかっていたお父さん(お母さん)が、先に音を上げてしまうことでしょう。

最終的にたどり着いたのが、Python で標準的に利用できる turtle ライブラリでした。これは、大昔にも有名になったタートル(亀さん)グラフィックを実現するためのもので、LINE 文や CIRCLE 文とは少し毛色が違うものの、お父さん(お母さん)でも子供に説明しやすいのではないでしょうか。

IDE(統合環境)はどうしよう

シェル上で素の Python を動かしても良いのですが、お子さんの使いやすさを考えると IDE(統合開発環境)が欲しいところです。さまざまな Python IDE が知られていますが、私が試したところでは、IDLE が一番 turtle 向きのように思いました。命令を一つずつタイプして対話的にタートルを動かすこともできますし、簡単なエディタでプログラムを書いてセーブすることもできます。

Raspberry Pi にフルセット版の Raspbian をインストールすると IDLE は標準で付いてくるらしいので、起動してみましょう。メニューのプログラミング → Python 3 (IDLE) です。

あ、皆さんはもっと大きな画面を使ってください。 🙂

すると、次のような IDLE の画面が開きます。ちなみに、時刻が 5:31 になっていますが、これは UTC(グリニッジ標準時)であって、私が早朝に仕事をしている訳ではありません。

それでは、turtle ライブラリを動かしてみましょう。

home() の後でリターンキーを押すと、もう一つ画面が開きます。

繰り返しになりますが、皆様はもっと大きな画面設定で使ってください。

いくつかコマンド(命令)を打ち込んでみましょう。

黄色の風船が描けました!

少し補足しておきます。home() というのは、タートル(亀さん)の位置を画面真ん中に移動させるコマンドです。これを実行するとウィンドウが開きます。

pensize() はペンのサイズ設定ですね。left(90) は、タートルに左 90度の方向を向くように命令(いや「お願い」を)しています。

foward(50) は、タートルに 50歩前に進ませます。right() は分かりますね。color() は、線を描く色と塗りつぶしの色を指定しています。

begin_fill() と end_fill() は対になっていて、その間のお絵かきで塗りつぶしをするようになります。

circle() は、丸を描くコマンドです。

なお最後に bye() とするとタートルはいなくなります。

その後、再度 home() とするとタートルが現れる…はずなのですが、エラーになってしまいました。理由はよく分かっていません。もう一度改めて home() と入力すると、今度は正しくタートルが現れます。

コマンドをまとめて Python プログラムを書くには

ここまでで、「BASIC を使ったお絵かき」風のことはできますが、プログラムとしてセーブするにはどうしたら良いのでしょう。実は、今まで入力したコマンドは、IDLE を終了するとそのままなくなってしまいます。(ま、画面のテキストをコピーすることはできますので、コピーしてテキストファイルに貼り付けることはできますね。)

プログラムファイルを作るには、つまり BASIC で言うと行番号を付けるには、IDLE のメニューで File → New File とします。画面が開いたら、プログラムを入力しましょう。ここでは、turtle の公式サイトにあるデモコードを打ち込みます。

入力し終わったら、メニューの File → Save As... でセーブします。このとき、turtle.py という名前でセーブすると、あとで Python が混乱することがあるので(from turtle や import turtle で、この turtle.py を読み込もうとしてしまう)、別の名前が良いでしょう。

さて、セーブしたら実行です。メニューの Run → Run Module を選びます。メニューを見ると、F5 キー(往年の BASIC で言うとファンクションキーの RUN ですね。ルン、ではありませんヨ)という表記があるので、キーボードの F5 を押せば RUN できそうです。

さて、こんな太陽(おてんとさま)が描ければ正解です。うまくいかなかったら、プログラムを良く見直しましょう。なんか、昔のパソコン雑誌のような解説になってきましたね!

なお書き忘れましたが、Python turtle ライブラリの公式ページには、各コマンド(関数)の詳しい一覧があります。また、書店を探すと Python の入門書もあるでしょう。ぜひ、御参照ください。

まとめ

これくらいの Python プログラムであれば、今週の週末にでも試せそうですね。Python の動かし方の分かる方であれば、まずはパソコン上で試してみるのも良いでしょう。うまく行ったら、ネットで Raspberry Pi を購入して、ぜひお子さんに見せて差し上げてください。

最近は学校でプログラミング教育もあるようですが、現実問題として MIT Scratch のようなビジュアルプログラミングは楽しいものですし、お子さんはすぐに応用を利かして御両親を驚かせるでしょうが、子供は案外「ませて」いて、すぐ、大人(プロ)が使っている道具に興味を示すようになります。Python はプロも使っている本学的なプログラミング言語です。(と、お子さんに説明してください。)

そしてさらに、turtle で飽き足らなくなってきたら、是非とも冒頭の Pygame や Arcade ライブラリに挑戦してみてください。本格的なゲームを作るのも夢ではないでしょう。

今日はここまで。お問い合わせはお気軽に!

御返答は 24時間以内(営業時間中)とさせて頂いております。もし返答が届かない場合、何らかの事情でメールが不達となっている可能性がございます。大変お手数ですが、別のメールアドレス等で督促頂けますと幸いです。なお、Facebook ページ(https://www.facebook.com/flogics/)でも御連絡頂けます。