create every day - 福野泰介の一日一創

プログラミング言語は何から学ぶべきか? ロボットプログラミングゲームをIchigoJamでプログラミング! C言語の教科書「Springs of C」より

2016/01/17 23:55:00
#IchigoJam #KidsIT #nagano 

プログラミング言語、習得の近道は、楽しむこと。
重要なのは、どの言語を学ぶかではなく、言語の学び方を学ぶこと。

創りたいものが創れるようになるまでには一定時間の学習の時間は欠かせません。 それが本人にとって長過ぎると挫折してしまうので、アクションゲームが易しい面からスタートするように小さな達成を喜べるステップづくりが大切です。 どんどん変わる世の中、創りたいもののために、楽しく自分で学べる力、自分でステップをつくる力をつけてあげましょう。

多くの子供が創りたいと思っているであろうスマホアプリのゲームは、JavaScript、Java、Swiftなどのプログラミング言語でつくります。 これらはスマホアプリなどを作るために作られた旬な言語で、我々スマホアプリのプログラマーが普段、使っている言語です。 ただ、機能数が膨大でとっつきにくい、次々新しくなるため陳腐化が早い、ある程度高価なパソコンが必須、と、いきなりラスボスと戦うようなものです。

福井高専含む、多くの高専で学習する主流となっているC言語は、IchigoJamを含む、マイコンやPCのOSづくりや、コンピューターとデバイスをつなぐソフトをつくるのに向いた言語です。 メモリやマシン語など、コンピューターの設計自体と合わせて学習するにはいい言語で、1972年生まれと長い歴史があり、ほとんど変化がないことから、教科書が豊富で教えやすい点がきっと人気の秘密です。

ただ、あこがれのスマホアプリを創るには向いていない、コンピューターの基礎でつまづくと理解不能になる(ポインタなど)、間違えると暴走するためトライ&エラーがしづらい、と小中学生には勧めづらい言語です。 ゲームに例えると、モンスターの性質や倒し方などの座学がずっと続いて、実際の戦いにいつまで経っても出かけない感じの辛さがあります。(戦って負けて分かる楽しさ)


長野高専電子情報工学科の伊藤祥一先生が書いた、高専生向けのC言語の教科書「Springs of C - 楽しく身につくプログラミング」は、 C言語の基礎を抑えつつ、OpenGLを用いたゲームづくりを目的におき、途中でもキャラクターベースで楽しく学べるゲームをはさむ工夫がステキでした!

そこで、ロボットの動きをプログラミングしてゴールを目指す「ロボットプログラミングゲーム」をIchigoJamで動くように移植しました。 画面にでてくるスタート(S)からゴール(G)まで、お金($)をとりつつ進むロボットを、前進せよを意味する(F)と右に90度回れを意味する(R)の文字を使ってプログラミングするゲームです。

100 S=6 110 CLS 120 FOR I=1 TO S 130 LOCATE I,1:?"#" 140 LOCATE I,S:?"#" 150 LOCATE 1,I:?"#" 160 LOCATE S,I:?"#" 170 NEXT 180 LOCATE 1,2:?"S" 190 LOCATE S,S-1:?"G" 200 FOR I=1 TO 4 210 LOCATE RND(S-2)+2,RND(S-2)+2 220 IF I<=1 ?"$" ELSE ?"#" 230 NEXT 240 LOCATE 0,S+2:INPUT "PROG:",Q 250 I=5:D=1:P=1+2*32:LET[0],-32,1,32,-1 260 POKE #900+P,ASC("@") 270 K=PEEK(#900+(S+2)*32+I) 280 IF K=ASC("F") Q=P+[D] 290 IF K=ASC("R") D=(D+1)%4 300 IF K=0 END 310 R=PEEK(#900+Q) 320 WAIT 10:POKE #900+P,ASC(".") 330 IF R=ASC("G") LOCATE 0,S+4:?"GOAL!":END 340 IF R<>ASC("#") P=Q 350 I=I+1:GOTO 260

【初期設定】
100 ステージの大きさ設定(S)
110-170 ステージの外枠を描く
180-190 スタートとゴールを描く
200-230 ランダムにお金と壁を描く
240 ロボットプログラムを入力させる
250 ロボットを動かす準備(I:プログラム読み込み位置、D:ロボットの向き、P:ロボットの位置、配列0-3:向きと動きの対応)
【メインループ】
260 ロボット(@)を描く(画面と対応するメモリ16進数で#900を使って直接キャラクター書き込み)
270 入力されたプログラムを1文字取得する
280 Fなら前身(Q:次の位置)
290 Rなら回転(余りを算出する%を使って0-3内でぐるぐる回る)
300 プログラム終了でゲームオーバー
310 次の位置にあるキャラクターを取得(R)
320 1/6秒だけ待って、ロボット位置を「.」で上書きする
330 次の位置がゴールなら「GOAL!」と表示してハッピーエンド
340 次の位置が壁ではないならロボット位置を変更する
350 プログラム読み取り位置を1つずらして、260行へ

IchigoJamで使っているBASIC言語はこうしたプログラミング言語をつくることができるくらい強力な言語。 実行速度が遅く、長いプログラムをつくるのには向いていませんが、それ故に、コンピューターの動きを把握しやすく、小さくトライ&エラーするには最適です。

IchigoJam BASICで習得できる条件分岐、繰り返し、変数、プログラムの分解・再利用などは、現代プログラミングの基礎でもあるため、C/C++/JavaScript/Java/Swiftなど、数多くのプログラミング言語へもスムーズにステップアップできます。(連載、はじめてのプログラミング

伊藤先生や、私も含め、BASICでプログラミングを学んだ人はこの業界、日本を限らず相当多く居ます。Facebook創始者でCEOのマーク・ザッカーバーグ氏も、12歳の時父親からBASICを学んだことがプログラミングを始めるきっかけとのこと。
Mark Zuckerberg - Computer Programmer, Philanthropist - Biography.com


長野高専、伊藤先生からお借りした貴重な80年代のパソコンの本達。当時の子供達にプログラミングの楽しさを知ってもらおうとする数々の工夫がスゴイ! こうした本のおかげで習得できたプログラミングという技は、IoT・クラウド・スマホ・メガネと次々と広がるプログラミング可能なエキサイティングな世界への入り口。 現代の子供にうまく伝えたいところです。

今週末(1/23土)は、鯖江めがね会館で、防災で活かすプログラミングイベント!
防災オープンアプリハッカソン
伊藤さんの本、見てみたい方もぜひどうぞ!

Tweet
クリエイティブ・コモンズ・ライセンス
この作品は「Creative Commons — CC BY 4.0」の下に提供されています。
CC BY 福野泰介 - Taisuke Fukuno / @taisukef / high-res profile image