マインスイーパーを作ろう~間違えず早くコーディングする技術~

2024年4月19日(金)は、6割ほどの出席率でした。Turtle.pyでお絵描きは、前回までで一旦終わりです。今回から、マインスイーパーを作ります!

  • 18時00分~18時20分 タイピング練習
  • 18時20分~18時35分 マウス練習
  • 18時35分~19時50分 マインスイーパーをコーディング
  • 19時50分~20時00分 あとかたづけ

タイピング練習

タイピングの練習は、前回から変えた「寿司打」です。

https://sushida.net

ゲームに熱中するあまり、ホームポジションを忘れてしまうメンバーがいるのは本末転倒だなあと思いつつ。無料タイピングと織り交ぜながらやっていきます。

もうひとつ気づいたのが、矢印キーを使えない・使わないメンバーがいることです。コーディングするのに、矢印キーも必須なので、矢印キーの練習追加を考えます。

マウス練習~マインスイーパー~

マウス練習は、マインスイーパーを使います。だいぶ早くクリアできるようになってきました。

ただ、マインスイーパーだとドラックアンドドロップの練習ができません。これも織り交ぜてみるつもりです。

マインスイーパーを作ろう

マウスの練習で使っているマインスイーパーを、Pythonで作っている方がいらっしゃいました。このコードを参考に、マインスイーパーを作るのが今回からのテーマです。ゲームを作りながら、プログラミングの作法をまなんでいきます。

間違えずにコーディングするテクニック〜コピペをうまく使おう〜

今回は、コーディングのテクニックを伝えるために、わたしが入力する画面を見せながら、少しずつ進みました。タイピングの練習をしているとはいえ、手入力する限りは間違いをふせげません。これまでのメンバーの行き詰まったときの様子を見ていると、誤入力のエラーがかなり多いのが気になっていました。

そこで、わたしのコーディングの様子をていねいに説明することで、間違えずにコーディングするテクニックを覚えてもらおうという試みです。

まず、コピーアンドペースト(コピペ)を使う方法です。この場合のコピペは、「どこかにある正しいコードをコピーしてくること」ではなくて、「自分で書いたコードをコピーしてくること」を指します。例として、下のコードで説明します。

#ウィンドウの作成
screen_width = col_num * tile_size
screen_height = row_num * tile_size

このコードの2行目と3行目を見ると、よく似ていることがわかります。そこで、2行目を入力したら3行目をすべて手入力するのではなく、2行目をコピペして「widthをheightに」「colをrow」に書き換えます。

コピペもマウスを使うのではなく、カーソルとショートカットキーを使えば、あっという間に終わります。そもそも入力する数も減るので、入力間違いも減ります。

似たようなコードを書かなければならない場面は、しばしば出てきます。そのようなときは、コピペが有効です。

間違えずにコーディングするテクニック〜補完機能を使おう〜

プログラミングに使われるコードエディターには、補完機能があります。光都ICTクラブで使っているThonnyにも補完機能があります

補完機能とは、変数やモジュール名、メソッド名などの頭数文字を入力するだけで、入力候補を表示し選択することで残りを自動入力してくれる機能です。Thonnyでは、ツール→オプション→エディタで「エディタ内でタブキーによるコード補完をする」にチェックをつけて有効にします。

すると、Tabキーを押して下の図のように入力候補が表示されるようになります。

ポイントは、小文字を入力するだけで、大文字混じりの入力候補も表示される点です。大文字小文字が混じっている変数などは、つい大文字にし忘れることがあります。補完機能を使えば、このようなついやってしまうミスをふせげます。

Tabキーを押すだけでミスが大きく減るので、積極的に活用したい機能です。

間違えずにコーディングするテクニック〜定数の表現〜

コーディングを進めていて、下に示すコードを入力しているときに良い質問が出ました。

BLACK = (0, 0, 0)

「BLACKは大文字でないとだめなんですか?」というものです。「Black」でも「black」でもいいじゃないか、ということですね。

これ、文法的には「Black」や「black」と書いても問題ありません。エラーも出ず、動作します。

しかし、「BLACK」とすべて大文字書くのが慣習で、わたしもすべて大文字で書くことをおすすめします。なぜならば、定数を示すときはすべて大文字で書くのがならわしだからです。すべて大文字で書くことで、定数であることがあきらかになり、コードが読みやすくなります。

定数とは、プログラムをとおして値が変わらない名前をさします。上のコードは、プログラム中で使う「黒色」をRGB「(0, 0, 0)」で示しています。この値はプログラムを通して変わらない(変える必要がない)ので、定数として設定します。

厳密に言うと、Pythonには言語の仕様として定数の概念がありません。変数としてあつかわれます(上の例は、タプルなので変更不可)。そこで、見た目を統一して整理することで、プログラムの読みやすさを向上させ、間違いをふせぐのです。

以上のようなテクニックを実践できると、コーディングが早くなり、かつ間違いが減ります。「楽をして品質が上がる」という良いことづくめのテクニックです。

クラブ活動中に、「手を抜いて、さらに品質が上がる」という話をすると、「学校で手を抜くな、一生懸命やれといわれた」とメンバーが言ってきました。たしかに、学校では手抜きが良くない結果をまねくこともあるでしょう。しかし、プログラミングに関して、「結果がおなじか、現状より良くなるなら、手抜きは正義」です。ぜひ積極的に手を抜いてください。