太子プログラミングクラブ2-3~サイコロプログラムを写経する~

2025年2月14日は、太子プログラミングクラブ「初級コース第2期」の3回目を実施しました。

今回から新しいテーマに取り組みます。今回のテーマは、サイコロプログラムです。

タイピング練習

はじめはタイピング練習から。タイピング練習で使うツールは、いつものです。

  • 無料タイピング 
    https://manabi.benesse.ne.jp/gakushu/typing/
  • 寿司打
    https://sushida.net

もうわたしが前で説明しなくても、各自でタイピング練習に黙々と取り組んでいます。

このような状況のときは、わたしがクラブ全体を見回りながら、伸び悩んでいるメンバーに具体的なアドバイスを伝えます。練習を続けていくうちに、基本原則から離れて悪いクセが出現するメンバーがいます。それは仕方のないことで、わたしはその悪いクセを修正するのです。

クセは自分では気づかないものです。かたわらで見ているわたしだからこそ、わかるのです。

画像を使ってサイコロプログラムをつくる

今回からサイコロをテーマに取り組みます。サイコロを表示するプログラムの実装はいくつかあって、太子プログラミングクラブで取り組むプログラムは「画像ファイルを表示するプログラム」と「画像を作って表示するプログラム」の2つです。

まず、サイコロの画像を表示するプログラムは『プログラムのつくりかた Python入門編Lv.0』(実教出版)P127に記載されています。実行したようすは、下のとおりです。

六分の一の確率で、1~6までのサイコロの画像を表示します。プログラムコードも単純で短いのです。まず、この課題に取り組みます。

ただ、画像をファイルをダウンロードして、自分のパソコンの適切な場所に保存しなければなりません。このフェーズは、わたしが画面で説明しながらメンバーみんなで一緒に進めます。

プログラムの学習は、書籍や動画で勉強することは難しくありません。しかしながら、パソコン自体の使い方を一緒にていねいに説明している書籍や動画は多くありません。クラブで学習するということの優位点は、このようなところにあります

さて、ファイルをダウンロードして、適切な場所に保存したら写経です。

写経はメンバーみんな得意なようで、予想以上に早く終わってしまいました。

たいして回数を重ねていないのに、驚異です。

もちろん、ミスタイプや読み違いによる誤入力はあります。しかし、誤入力の数もぐっと少なくなってきたように感じます。

画像を作って表示するサイコロプログラム

上のプログラムが完成したら、今度は外部の画像ファイルを読み込んで表示するのではなくて、サイコロの画をプログラムで描きます。こちらは私が制作したプログラムなので、下に示します。

import tkinter
import random

#プログラムで使う設定値を定義する(はじまり)//////////////////////////////////////////////////
#画面幅高さ
WIDTH = 300
HEIGHT = 300

#画面中央の座標
CENTER_X = WIDTH/2
CENTER_Y = HEIGHT/2

#目のセンター座標を指定する
CENTER_POINT = [[CENTER_X - WIDTH/6, CENTER_Y - HEIGHT/6], #1の場所の○のセンター座標
               [CENTER_X + WIDTH/6, CENTER_Y - HEIGHT/6], #2の場所の○のセンター座標
               [CENTER_X - WIDTH/6, CENTER_Y],            #3の場所の○のセンター座標
               [CENTER_X, CENTER_Y],                      #4の場所の○のセンター座標
               [CENTER_X + WIDTH/6, CENTER_Y],            #5の場所の○のセンター座標
               [CENTER_X - WIDTH/6, CENTER_Y + HEIGHT/6], #6の場所の○のセンター座標
               [CENTER_X + WIDTH/6, CENTER_Y + HEIGHT/6]] #7の場所の○のセンター座標

#1~6の数字に対応した目を配列で指定する
POINT_NUM =[[3], [0,6], [0, 3, 6], [0, 1, 5, 6], [0, 1, 3, 5, 6], [0, 1, 2, 4, 5, 6]]

#プログラムで使う設定値を定義(おわり)//////////////////////////////////////////////////////

#プログラムで使う関数を定義(はじまり)///////////////////////////////////////////////////////
#サイコロを表示する関数
def num_circle(num):

    if num==1:
        color='red'
    else:
        color='black'
        
    canvas.delete('all')
    canvas.create_rectangle(CENTER_X-100, CENTER_Y-100, \
                        CENTER_X+100, CENTER_Y+100, fill='white')

    for pin in POINT_NUM[num-1]:
        canvas.create_oval(CENTER_POINT[pin][0]-20, CENTER_POINT[pin][1]-20,
                           CENTER_POINT[pin][0]+20, CENTER_POINT[pin][1]+20,
                           fill=color, outline=color)

# ボタンが押された時の処理をする関数
def dice():
    # ランダムな整数を生成して、表示する
    num_circle(random.randint(1,6))
#プログラムで使う関数を定義(おわり)/////////////////////////////////////////////////////////

#プログラム本文(はじまり)//////////////////////////////////////////////////////////////////
if __name__ == '__main__':
    app = tkinter.Tk()
    canvas = tkinter.Canvas(app, width=WIDTH, height=HEIGHT)
    canvas.pack()

    # ボタンの設定
    Btn = tkinter.Button(text='サイコロをふる', font=('', '12'), command=dice)
    Btn.pack()

    app.mainloop()
#プログラム本文(おわり)/////////////////////////////////////////////////////////////////////
   

こちらに進むのはメンバーの半分に満たないだろうと考えていたものの、ほぼ全員がこちらのコードに取り組むという状況でした。素晴らしい上達ぶりと思います。

中身を理解するのは、まず置いておきます。今はまだ写すだけです。

とはいっても、コメントの説明はしておかないといけません。「#(シャープ)」で始まる行は、コメントといって、コンピューターは飛ばして実行します。つまり、何を書いていてもOKです。反対を言えば、#から始まる行はなくても良いのです。

コメント行は、わたしが説明するために書いているものなので、面倒ならわざわざ入力する必要はないのです。適切なコメント行は、プログラムを読むのに重要ですが、今はこれも必要ありません。さらに上達したときに、コメント行の重要性を説くこととします。

さて、サイコロプログラムの詳細の説明は次回です。

次回の予定

次回は、サイコロプログラムを最後まで作って、内容の説明です。