吉岡直人です。この連載ではプログラマの視点でソーシャルゲームの「秘密」を語りたいと思っています。

提供=123RF
提供=123RF

 私は専門学校でゲームプログラミングを教えたりもしてるのですが、その最初の授業で必ず学生に伝えることがあります。ゲームプログラマとして稼ぎたかったら「数学」を学べと。これを言うとほとんどの生徒は苦笑いします。分かっちゃいるけど、苦手なんだという表情です。とはいえ、数学を道具として使えるかどうかで、特にゲームのプログラミングでは、随分と効率が変わります。

 別に数学ができなくてもプログラムは組めます。実際、数学の知識が乏しくても、見事にゲームを作り上げるプログラマもいます。しかし、それは徹底的にプログラミングの練習をしている、もしくはプログラミングの才能があるからです。その境地に達する訓練を積むのもアリですが、プログラミングよりもはるかに長い歴史があり、多くの先人たちが工夫を重ねて洗練させてきたテクニック集としての「数学」を使って楽をしないのは損だと私は思います。

 例えば、画面上の一点を中心にして回転する敵キャラを作りたいとします。画面の更新は60fps(フレーム/秒)。 fpsは1秒間に何コマのアニメーション更新を行うかの単位で、この数値が大きいほど動きは滑らかになります。一方でプログラミングやデータ作成は大変になります。

 さて、ここで「回転といえば三角関数」とすぐに思い付ければ簡単です。三角関数は、角度を x, y で表される座標に変換できる関数ですから、角度の数値を少しずつ変化させれば、敵キャラを配置すべき座標がすぐ計算できます。

 もちろん三角関数を知らなくても同じ動きのプログラミングは可能です。例えば1秒間で1周するような動きにしたいなら、60コマ分の敵キャラの座標をあらかじめ決めておいて、これに沿って画像を描画する位置を指定すれば動かせます。

 しかし、これはいかにも大変そうです。例えば、1秒間で1周を、3秒で1周に変更したい場合など、全てのコマにおける敵キャラの位置を設定し直さなければなりません。三角関数を使う方法なら、角度を変化させる速度を変えるだけで、あとはコンピュータが自動で計算してくれます。