Hello World!の敷居

佐野

佐野 2013年6月5日

HTMLは趣味で始め、職業訓練を受講してから、それをモノになるようにし、
次の訓練ではJavaを学びましたが、
今では比較的簡単とも思えるJavaScriptとはいえ、
GoogleAppsでのシステム構築や、
jQueryを利用した、ウェブサイト上での高度な表現が
可能になったと実感はできています。

しかし、そこに至るまでには、
日本人にとっては、わけのわからない文章、
つまりはプログラムを理解する必要もあるわけです。

では、プログラムに踏み込むキッカケは、なんなのか。
まずゲームを作ってみたいと思う事である人も多いかと思います。
しかし、その頃やそれ以前には、
色とりどりの広大な世界を縦横無尽に駆け回るキャラクターや、
その世界を構築する理が、こんなよくわからない文字の羅列であり、
そこに作られる色や形も、数字の集まりだということが、
当時のその世界に没頭していた子供たちに、想像がつくでしょうか。

プログラムを始めてみて、最初に勉強するのは、
「Hello World!」を表示させることであり、
それに次いで、変数や配列やif文といった要素を
知る事ができると思われますが、
個人的には、まだその時点では世界やキャラクターが、
どのようにして作られているのかなど、
想像もつかないのではないかと思います。
さらに言えば、キャラクターが動いているのも、
キャラクターの動作のパターンが1枚にまとめられた画像の表示場所を
すばやく変更していたりなど・・・
考え出したら、キリがありませんね。

ゲームを構成する要素はプログラムという文章であり、
「Hello World!」という文字をコマンドプロンプト上に表示させ、
プログラム上で使用する数字の概念を知る、
ただ、それらと世界やキャラクターを画面上に表示させ、
その世界を動かす要素の構築と、どうつながるのかという疑問が
まず大きいのではないかと思います。

それに実感を得られなければ、「Hello World!」の直後に、
「Bye Bye World!」してしまうのではないか。
かくいう私も、そんな時期がありました。

プログラムでつまずく点のひとつとして、
変数やif文によって、プログラム内での数字を制御する方法はわかっても、
それを、どのようにしてゲームもしくはアプリケーションの要素を制御する
という過程につなげるのかが、理解できないのもあるのではと思います。

たとえばゲーム上のキャラクターは、X座標とY座標という、
2つの数字でその位置を確定されているという事に気が付くのは、
意外と困難な事だと思います。

PC版の「RPGツクール2000」には、変数という概念が登場し、
さらに「ピクチャ」という画像を表示する機能もあり、
位置を直接指定し、単純に表示させるだけというのも可能であり、
2つの変数を使う事で、そのピクチャを自由自在に移動させる事も可能なのですが、
GUIや親切な文章表現(例えばif文であれば「条件分岐」という名であるなど)
の豊富なツクール上で、それはプログラム上でも同一な概念であるかどうかを
疑う人も少なくないのではと思います。
なので当時は私も、PC版「RPGツクール」は、
プログラムに近い要素もあると言われても、
それを実感するまでに時間がかかりました。

でも今思えば、ゲーム上のお金やステータスなどの数値の上限が、
なぜ255や65535という、(人にとっては)中途半端な数字なのか、
なぜキャラクターはマス目単位でしか移動できないのか、
なぜ見た目上、攻撃が当たっているはずなのにダメージがないのか、
なぜ弾を画面上3発までしか撃てないのかなどなど、
その妙な不自由さに気が付くこともまた、
プログラムへ踏み込むための、わずかながらの第一歩なのかもと思うときがあります。

簡単に言えば、「Hello World!」から「Bye Bye World!」してしまう要素は、
単なる文字の羅列から、どのように目に見えるゲームやソフトウェアにつなげるのかが
実感できないからというのも、あるのではないかとも考えられます。

画像表示ひとつ取っても、「こういう記述をすれば画像を表示できますよ」と言われても、
「だから何だ」と思ってしまいます。
肝心なのは画像を表示する事がプログラムの要素として大きく取り上げるのではなく、
その画像を、どう使うかが問題なんですよね。
いちばん知りたいのは、その画像をどうすれば
ゲームならキャラクターになるのか、背景になるのか、
アプリケーションなら、それにどのような用途を持たせる事ができ、
それをどうすれば実現できるかなのですよね。
関数やメソッドだけなら、調べればさほど難なく出てきますが、
それをどう使えばいいのかまでは、サンプルを観ても簡単には理解できません。
はたまたこの方法では効率が悪く推奨されていないのか、
最も知りたい情報は、そのあたりなのではないかと思うのです。

実際に自分が最近感じてきたのは、
プログラムとしての文法と、完成品の構想は全くの別物であり、
それを、いかにしてつなげ、プログラムはそれを制御するものとして
成り立たせていくものだという事です。
これに関しては違うという答えも出るかもしれませんが、
あくまでも個人的にたどり着いた、答えのひとつです。