プログラミング的思考の養成
ゲームプログラマー志望の大学一年生を弟子にとってみたけど、うまくいかなかった話|三宅俊輔 ( TECO )
最近こんな記事が一部で話題になっているのを見た。 私は現在ゲームプログラマ1として労働をしているので、これを読んで自分の場合はどうだったのか振り返りたくなった。
最初は『RPGツクール』だった。名前通りRPGが簡単に作れるというアプリで、 マウスで直感的にRPGの世界(マップ、物体、NPCなど)を作り、実際に遊ぶこともできる。 少々ポチポチするだけでドラクエのようなRPGが動き始めるので、プログラミングなんて1ミリも分からない小学生の私でもすぐにそれらしい成果が見えてとても嬉しいアプリだった。
RPGツクールでは設置した物体にイベントコマンドを追加できる。 これは物体に触れたときに何かを起こす機能で、 文章を出す、アイテムを増減、場所移動、など多くの命令がある。
触ったら〇〇が起きる、それだけなら小学生にもすんなり理解できた。 が、ある時点で壁にぶつかった。 たとえば……、あるキャラクターに触れて会話をした後、そのキャラクターは消える。 はどうやって実現するか? 当時の私はキャラクターを消す方法がわからず、会話が終わったらマップの遥か遠くに瞬間移動させるという強引な方法をとった。
しかし、この方法は一般的ではない。RPGツクールにはスイッチという機能があり、これを使うのが一般的らしいとその時学んだ。 スイッチというのはON/OFFの2つの状態を表せるもので、「会話が終わった」スイッチを作っておき、会話が終わったらONにする。 そして物体(キャラクター)には「スイッチAがONの場合、姿を透明にする」という分岐があるため、会話が終わったら消える挙動が実現できる。
こうやって振り返ると当然すぎるようにも見えるが、今思えばこれがプログラミング的思考の第一歩(条件分岐の理解)だった。 さて、それで最低限RPGっぽさのあるものが作れるようになり、楽しく「ぼくのかんがえたさいきょうのRPG」を作っていった。 参考にとネットで公開されたツクール製のRPGをいくつかプレイしてみると(えっ こんな仕組みどうやってツクールで実現したの!?)となることが何度もあった。
そのひとつが(ゲーム内の)銀行だった。 プレイヤーの所持金を預けるとその分所持金は減るが銀行の預金として残り、いつでも引き出すことができる。 これをどうやってRPGツクールで実現するのか最初は見当がつかなかった。ON/OFFの状態を表すスイッチだけではどうにもできない気がした。
ここで「変数」という概念を知る。最初は変数と聞いて(変な……数!?)と戸惑ったものだが「変化する数」「なんでも入れられる箱」と解説をしているサイトがあり そこを読んでじわじわと理解した。「預金」という変数を作っておき、所持金を減らした分だけ「預金」変数に足してあげればいい。 そして引き出すときは変数を減らして、所持金を増やすという逆の処理をすればいい。
スイッチと変数がわかれば、基本的なRPGの骨組みは作れるようになる。 このときはまだいわゆるプログラミングなんてのは別次元の技術だと思っていたが、まぁ数年後に順当に(?)私はプログラミングの世界に足を踏み入れることになる。 今思えば、条件分岐や変数といった概念を先にRPGツクールで理解してから臨めたことが良かったのかもしれない。
と、ここでいい話として終わらせたかったのだが、その後(最初引用した記事にも出てくる)C言語を学んだが全然わからず、面白さも感じられず挫折した。 さらに後にWebアプリの世界に入りいや、やっぱりプログラミングわかってきたぞ!期を迎えるのだがそれはまた長くなりそうなので別の機会に。
ゲームプログラマーになりたいからといって最初から”プログラミング”をやらなくてもよくて、
RPGツクールでも、Scratchでも、今ならマインクラフトでも良さそう。
とにかく大切なのは #include<stdio.h>
の意味よりも、楽しいフィードバックがある環境で
条件分岐や変数といった概念を脳内に導入することだろう。たとえコードを書かなくても!
脚注
-
ゲームプログラマーといってもソーシャルゲームのサーバー側なので一般的に想像されるゲームプログラマーとは違うかもしれないが、まぁゲームではあるのでゲームプログラマーということで。 ↩