大人の方でも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らしい書き方と言えます。高水準の言語らしい、人間の思考に近い書き方ができるのが良いところですね。
今からプログラムを学習する高校生には、高水準な書き方のほうが理解しやすいのかも。