初心に返って王道「川下りゲーム」徹底解説!!for IchigoJam【「寺子屋Hana」開所記念】
Hana道場の横展開としてSAPジャパンが支援し寺子屋Hanaが福島県会津若松に設立しました!!2020.9.26
本日、寺子屋Hanaがオープンしました。
— CoderDojoAizu (@CoderDojoAizu) September 26, 2020
9名が参加です。
CoderDojo Aizuも運営を応援しています。
今日はIchigoJam講座とレーザーカッター・3Dプリンタのデモを行いました。
地域の子供たちのICT教育の場として機能させていきたいと思います。
メンターのみなさま、今日もありがとうございました。 pic.twitter.com/KYwLRXhQlP
Hana道場公式ブログに詳細あり
また9月26日は私、師範の誕生日でもあり、私がIchigoJamでプログラミングを始めてちょうど3年が経ちました!
とてもアニバーサリーな日なので、初心に返って王道プログラム「川下りゲーム」を徹底解説していこうと思います。
新たに子どもたちにIchigoJamプログラミングを教えたい人の一助になれば幸いです。
【目次】
1. 川下りゲームについて
川下りゲームはIchigoJamでプログラミングを始める人が最初に作る入門的プログラムです。とても短いプログラムの中に、アプリ(ゲーム)作りで大切な要素が詰まっており、1行づつ打ち込んで実行しながらゲームが出来上がっていく過程を体験できます。
(鯖江市の小学校の総合学習の授業でも川下りゲームをつくります)
2. プログラム概要
【プログラム】
20 LC X,5:?"0"
30 LC RND(32),23:?"*"
35 WAIT 3
36 X=X-BTN(28)+BTN(29)
39 IF SCR(X,5) END
40 GOTO 20
3. 実行結果と解説(1行づつ)
<初期設定>10行目
<自分のキャラ表示>20行目
<敵のキャラ表示>30行目
<繰り返し>40行目
35〜39行目を飛ばして、40行目の繰り返しを入力し実行します。
↑の改行デモの前半では、手動で*を打ってエンターを押しています。
<スピード調整>35行目
WAITを入れることで、*を表示する間隔が長くなります。
コンピューターの速度は人間には速すぎるので、WAITで待ってもらいましょうねと言っています。
<キャラの移動操作>36行目
キーボードのキーにはそれぞれ番号が決まっています。
←キーは28番、→キーは29番です。
BTN(28) は←キーを押すと1に、押してないと0を返します。
←キーを押したときの36行目
36 X=X-1+0
変数Xを-1して記憶し直します。自分のキャラが左に1マス移動します。
→キーを押したときの36行目
36 X=X-0+1
変数Xを+1して記憶し直します。自分のキャラが右に1マス移動します。
<当たり判定>39行目
4. バグについて
バグの理由
実は、この状態だとバグがあります。
何人かの子どもたちはバグを見つけてニヤニヤしていることでしょう。
左右の端にいくと敵に当たらない<無敵バグ>が起こります。
なぜ<無敵バグ>が起こるのか、解説します。
結論:自分のキャラが画面外にいってしまっているから。
画面左端は0ですが、さらに←キーを押すとXがマイナスの値になります。
画面上には0の位置にいるように表示されますが、実際の座標はマイナスになっており、0〜31に表示される*には永遠に当たらなくなります。
(右端も同じように31にいるように表示されていても実際は32以上になっています)
バグを解消しよう!
プログラムの穴(バグ)をついて、不正しているプレイヤーを「チーター」と言います。子どもたちは大体チーターという言葉を知っていて、なぜか喜びます。
チーター対策としてバグを直すのもプログラマーの仕事だよと言いながら、バグ修正のプログラムを教えます。
短いバージョンと長いバージョンの2つご紹介します。どちらも同じ動きになります。
短いプログラム
長いプログラム
38 IF X>31 X=0
38 IF X>31 X=0 もし Xが31より大きくなったら Xに0を記憶させる
5. まとめ
1つでもプログラムの原理を理解すると、他にも応用が効くようになっていきます。
あとは自分でも改造、実験(仮説と実装の繰り返し)をしながら、遊びつつ学んでいきましょう!
仮説を即実装できるのがIchigoJamの良いところ!何度間違えてもコンピューターは怒りません。
川下りゲームのおすすめの改造方法は別の記事で紹介しようと思います。
<やってみよう>
- 自分のキャラを変える
- 敵のキャラを変える
- スピードをゆっくりにする
- CLTとTICK()を使ってタイムを表示
CC BY shoichi1031da / @shoichi1031da