• このエントリーをはてなブックマークに追加

今なら、継続入会で月額会員費が1ヶ月分無料!

【shi3z】小学生5年生の男の子にマン・ツー・マンでゲームプログラミングを教えてみた
閉じる
閉じる

新しい記事を投稿しました。シェアして読者に伝えましょう

×

【shi3z】小学生5年生の男の子にマン・ツー・マンでゲームプログラミングを教えてみた

2014-06-10 10:07
  • 1

 リクルートが主催するメディアCodeIQの企画で、「小学生のプログラマーにゲームプログラミングを教えてやって欲しい」と言われて、日曜日に品川のMicrosoftまで行って教えて来た。これが大変楽しい体験だったのでブログに書く許可を頂いて、今日ここに記す

f0127ce7ed65f003a89df4f034a57b77b5768ecd

 やってきたのは、シュン君。11歳の小学五年生。


 とてもいい子で、今日一日かけて彼一人を僕、Microsoftの物江さん、などなど、総勢五人の大人がよってたかって教えることになる。


 「いままでにどんなプログラムを書いたか見せてくれないか?」と聞くと、彼は「雨を避ける男」というゲームをC#で開発したのだと、WindowsPhone8を見せてくれた。


 「雨を避ける男」は、上から雨粒が振って来て、それをケータイのジャイロを使って左右に傾けて避ける、というとても単純なゲームだ。


 これが創れるということは、基本はできてる、ということだろう。


 「ふむふむ・・・で?今日は彼一人に教えればいいんですか?」


 「そうです」とCodeIQの馬場さん。

 ならば、というわけで僕は早速、「ゲームデザインのやり方」を講義することにした。
 これはマサチューセッツ工科大学の講演で使ったスライドを日本語に訳したもので、要はゲームデザインは、「全体の動き」「スコア条件」「ゲームオーバー条件」の三つを決めなければならない、という基本から、「ゲームのスコアは上達すればするほど、同じ時間内で高い点数をとれるように設計するべきである」というミニゲーム設計法の入り口までを説明するものだった。


 この説明として、僕は「マッピーの原理」と心の中で密かに呼んでいるスコアリング法を示した。マッピーは、ネズミの警察官「マッピー」が、泥棒猫ニャームコ率いるミューキーズの屋敷に行き、盗難品を回収するというゲーム。

 このゲーム、屋敷の全ての盗難品を回収するとゲームクリアになるんだけど、仕掛けがあって、盗難品は常に二つずつ存在する。たとえば、テレビ、冷蔵庫、絵画、という盗難品があったとすると、それぞれが二つずつあるわけだ。

 これを、テレビ、冷蔵庫、絵画、テレビ、冷蔵庫、絵画と取ると、通常の点数しか得られないが、仮に、テレビ、テレビと続けて同じ盗難品を取ると、スコアが倍増する仕組みになっている。つまり、マッピーでは時間内にいかに効率的に、同じ盗難品を連続して取って行くかというゲーム性によって駆け引きが産まれるようになっているのだ。


 この仕組みを発展させ、落ちものパズルのテトリスに適用したものが、後の「ぷよぷよ」における連鎖だと僕は考えている。


 「そうか! ただ避け続けるだけだと退屈になってしまうのは、誰が遊んでも同じスコアになってしまうからだ!」


 シュン君は僕の説明を瞬時に理解したようだった。
 つまりゲームにおける駆け引き、「リスクを犯して利得を得るか、利得を捨てて生存性をとるか」というジレンマをゲームに取り入れよう、と考えたようだ。「雨を避ける男」にはそれがないと。


 それから30分くらい、シュン君一人にしてホワイトボードにゲームの企画を「スケッチ」するように言った。


 そして30分後、「だいたいできた!」とシュン君が見せて来たのがこれだ。

fb7eabafedde2b321f4eebe697d74e268461010f


 宇宙船が、壁を避けながら進むタイム制の強制スクロールゲーム。
 ただし、星をとるとタイムが増加する。

 ステージはランダムで自動生成される。

 星を取るか、先に進むかのジレンマがあるというわけだ。なるほど。良く出来てる。


 「宇宙船をどうやって動かすの!?」


 シュン君は目を輝かせて聞いて来た。
 僕はまず、touchendイベントの処理について説明し、宇宙船がクリックした場所にワープするプログラムを示した。シュン君は瞬時にそれを入力し、そして言った。


 「確かに動いたけど、これじゃあゲームにならないよ」


 その通りだ。
 そこで次に、僕はベクトルを説明する必要に迫られた。


de6223f4f857729f180ae365b766e06f8650b059


 「ある地点Tへ向かう宇宙船Sの移動量を、ひとまず S += (T-S)*0.1で計算してみよう」


 「それってどういうこと?」


 「つまり、 Sx += (Tx-Sx)*0.1で、Sy+=(Ty-Sy)*0.1だよ」


 「なんだ、じゃあベクトルっていうのは、xとyをまとめただけのものかあ」


 ベクトルを理解するというのはまさしくこういうことだ。
 彼はすぐにプログラムを書いた。


 「あれれ?動いてるうちに速さが変わっちゃうよ」


 「その通り。なぜなら、それはベクトル(T-S)の1/10だけ宇宙船を目標点(クリックした位置)に近づけようとした動きになっているからだ」


 「そうか。だから近づけば近づく程、ベクトルの長さが短くなって、移動する距離も短くなるのか」


 「その通り。移動するスピードを一定にしたい場合は、三平方の定理を使うんだ。三角関数は知ってるかな?」


 「うーん、sinとcosしか知らないや」


 「それは何に使う?」


 「ジグザクした動きを創るのに使うけど、よくわかんない」


 「ゲームを創る時、三角関数ほど役立つものはないけど、同じくらい重要なのが、三平方の定理、別名ピタゴラスの定理なんだ」

73bad7b77dd073cc1cf877043e9def954751b646

 「底辺と高さをそれぞれa,b、斜めの線の長さをcとしたとき、c^2=a^2+b^2になるというのがピタゴラスの定理で、これを使ってベクトルの長さを求めようとするとどうなるかな?」

 「えーと、aはTx-Sxで、bはTy-Syかな」


 「その通り。つまりC^2 = (Tx-Sx)^2+(Ty-Sy)^2。ということは、その平方根がCの長さだ。JavaScriptで平方根を求めるには、Math.sqrtを使う。やってごらん」


 「わかった!」


 それからシュン君はすぐにプログラムを書いた。
 あっという間にベクトルと平方根をものにしたのだ。

763613076e533a30cbae7a157268b844a388ee16

 三角関数の使い方について説明しようかと思ったが、彼が夢中でプログラミングをしているので僕はよしておくことにした。

 それから一時間くらいすると、ゲームはほぼ完成形に近づいた。
 彼は次々とアイデアを考えだし、実装していった。

2b19d357447389297861ee694df247a76564ad28
 シュン君がプログラミングに目覚めたのは、小学校四年生のときだという。
 母親のPCに入っていたPowerPointをいじりはじめ、そのうち、「できるPowerPoint」などを見てコンピュータでなにかを表現する喜びに目覚めたそうだ。


 それからScratchの教室や色んな教室に通ったが、本格的なプログラミングがやりたい、と早々にVisualStudioを購入し(このへんが僕のようなオジサンと違って環境に恵まれたところだ)、プログラミングに夢中になっているのだとか。


 面白いなと思ったのは、彼が自分の意志でプログラミングをし、それ自体を楽しんでいる喜びが、見ている方にビシビシと伝わって来たことだ。

 けっして「お習い事」で親に強制的に連れて来られているわけでもなく、自ら進んで学びに来ている。
 そのような心構えなら、時には高校生や大学生をも悩ます代数幾何学ですら、彼らにとってはオモチャのひとつになる。僕にとってもそうだった。


 大学に入って、楽しみにしていた代数幾何の授業を受けた時、あまりの退屈さにショックを受けた。あんなに面白く、楽しかった行列演算が、大学の授業の中では急激に色褪せ、退屈で、取るに足らないようなものに思えた。実用性がわからないからだ。

514bfd729fff9e31e1730f80dda4a359b9865749

 ときどき、「あれがわからない、うまくいかない」というシュン君を助けはした。イベントの都合上、時間節約のために今回は僕が答えを教えたが、彼ならば時間さえかければ実力で答えにたどり着くであろうというものばかりだった。なにしろ彼には「創りたい」という強い意志があるからだ。


 ほどなくしてゲームは完成した。

 予想しなかったほど、面白いゲームになったと思う。
 9leapの9Days Challengeにあったら受賞が狙えるレベルまで持って行けるかもしれない。

49a65ee9c3e97771075809b5d16691a8a50f7930

 どんなゲームに仕上がったのかは、CodeIQの記事を待たれたし。

 今回思ったのは、個別学習・個別教育の持つ力だ。
 声楽家だった僕の母親は、東京から実家に引っ込んで来た時にピアノの個人レッスンで生計を立てていた。かなり稼ぎのいい仕事だったらしい。


 僕はここ数年、ずっと一対多の指導、つまり授業・セミナー形式の指導をしてきたけれども、もしかすると、ピアノのように個人レッスンをしたほうが、その人にとってずっと的確で価値のある教えかたができるのかもしれないと感じた。


 シュン君でなければこの短時間でここまでのゲームを創ることはできなかった。けれどもシュン君のような子供はほかにも沢山居るのかもしれない。ただ、回りにそれをきちんと教えてくれる大人がいないというだけで。


 その意味で、なかなか考えさせられる週末だった。
次回配信予定
  • 2016/09/01
    【機械学習】Chainer vs C++ AVX最終決戦
チャンネル会員ならもっと楽しめる!
  • 会員限定の新着記事が読み放題!※1
  • 動画や生放送などの追加コンテンツが見放題!※2
    • ※1、入会月以降の記事が対象になります。
    • ※2、チャンネルによって、見放題になるコンテンツは異なります。
ブログイメージ
電脳ヒッチハイクガイド
更新頻度: 毎週月曜日
最終更新日:
チャンネル月額: ¥1,080 (税込)

チャンネルに入会して購読

コメントを書く
コメントをするには、
ログインして下さい。