大人の方でもOKです~まなびたい、それがいちばん大事~

6月19日の水曜日のクラブ活動は、体験希望の大人の方がいらっしゃいました。いつものメンバーは、教科書からすこし離れて、実際にゲームを作ってもらいました。

メニュー

  • 18時00分~18時20分 タイピング練習
  • 18時20分~18時40分 マウス練習
  • 18時40分~19時50分 かんたんなゲームを作ってみよう(スネークゲーム)
  • 19時50分~20時00分 あとかたづけ

タイピングとマウスの練習

大人の方でもタッチタイピングができなければ、体験メニューとしてタイピングの練習をしていただきます。プログラムを学習する場合でも、タッチタイピングができるとプログラムに集中できるからです。

大人であっても、わたしの確立した練習方法にそえば、かならず上達します。60代の女性で、40字/分だったのが3ヶ月には120字/分まで上達した例があります。

そのとき練習に使っていたツールとおなじツールを使って、タイピングの練習をしています。下の、「無料タイピング」を使って練習をしています。

「無料タイピング」を使えば、クラブのときだけでなく、自宅でも練習できます。一日15分でいいので正しく練習を続ければ、3ヶ月後には見違えるほどに上達します

かんたんなゲームを作ってみる~スネークゲーム~

水曜日のクラブ活動は、教科書にそって進めていきます。しかし、プログラミングの教科書の最初のほうは面白くありません。

そこで、かんたんなゲームを作ってみました。下のコードはわずか60行ほどでスネークゲームがができあがります。(コードは、https://knt60345blog.com/python-game1より、コメントを省いて引用しています)

from random import randrange
from turtle import *

from freegames import square, vector

#初期設定
food = vector(0, 0)
snake = [vector(10, 0)]
aim = vector(0, -10)

#方向転換
def change(x, y):
    aim.x = x
    aim.y = y

#範囲チェック
def inside(head):
    return -200 < head.x < 190 and -200 < head.y < 190

#移動
def move():
    head = snake[-1].copy()
    head.move(aim)
    
    if not inside(head) or head in snake:
        square(head.x, head.y, 9, 'red')
        update()
        return
    
    snake.append(head)
    
    if head == food:
        print('Snake:', len(snake))
        
        food.x = randrange(-15, 15) * 10
        food.y = randrange(-15, 15) * 10
    else:
        snake.pop(0)
    
    clear()
    
    for body in snake:
        square(body.x, body.y, 9, 'black')
        
    square(food.x, food.y, 9, 'green')
    
    update()
    
    ontimer(move, 100)

#画面をセット
setup(420, 420, 370, 0)

hideturtle()
tracer(False)
listen()
onkey(lambda: change(10, 0), 'Right')
onkey(lambda: change(-10, 0), 'Left')
onkey(lambda: change(0, 10), 'Up')
onkey(lambda: change(0, -10), 'Down')

move()

done()

まだ1時間半で入力するは厳しいかな、とおもっていましたが、メンバーが見事に裏切ってくれました

すべてのコードを正確に入力し終えると、下の動画のようなスネークゲームで遊べます。

さすがにカスタマイズまでは時間が足りませんでした。次回は、カスタマイズして遊んでみようと思います。

たとえば、下のようなカスタマイズが簡単にできそうです。

  • スネークの色を「黒」→「黄」に変更する
  • エサの色を「緑」→「青」に変更する
  • スネークのスピードを速くしたり、遅くしたりする
  • もっと画面を大きくする
  • リスタートの操作を追加する

欲しい機能は、自分で作るのです!

「リスト内包表記」が情報科目模試に出た

自分で課題を持ってきているメンバーは、大学入学共通テストの「情報」科目模試に取り組んでいます。

その問題集の中で、リスト内包表記が出ました

リスト内包表記とは、乱暴にいうとfor文をかんたんに書ける表記方法です。次に示すfor文は

a = []
for i in range(10):
    a.append(i)

リスト内包表記を使うと次のように表記できます。

a = [ i for i in range(10)]

リスト内包表記を使うと、リストの中に値を入れる操作を1行で書き表せます。

Pythonを学ぶと当然のようにリスト内包表記が出てきます。わたしのように、学生時代にC言語・VisualBasic・アセンブラで学んだ人は、なんのこっちゃわからないと思います。わたしもはじめは避けて通っていました。

光都ICTクラブの講師も、大学でC言語を先に学んでいたようで、Pythonのリスト内包表記に面食らっていました。

ところが、一度覚えると便利なので使い倒しています。Pythonらしい書き方と言えます。高水準の言語らしい、人間の思考に近い書き方ができるのが良いところですね。

今からプログラムを学習する高校生には、高水準な書き方のほうが理解しやすいのかも。