ゲームプログラムのスキルを身につけるにはどうすれば良いか
最近は、Unityなどのゲームエンジンが登場したことで、プログラムの知識がなくてもゲームが作れる環境が整っています。
ただそれでも、ゲームを動かしている根っこの部分はプログラムです。GUIで操作しているツールの裏では、何らかのプログラムが動いています。
そのため、ゲームエンジンを使うにしても、プログラムの素養が必要となります。
ここでは、私がゲームプログラムを身につけるためにしてきたことを紹介することで、ゲームプログラム初心者が、適切なスキルを身につけるのに役立つ情報を提供したいと思います。
■1. スクリプト言語を学ぶ
プログラム言語には大きく分けて、静的型付けの言語と、動的型付けの言語があります。静的型付けとは、変数を使用する場合、どのようなデータ型で使用するかをあらかじめ宣言することが必要です。
// C言語の場合
int number; // 数値型で宣言
number = "hello"; // 数値型に文字列を代入するとコンパイルエラーになる
静的型付けは、このようにデータの持ち方に制限があり、それゆえに事前にエラーを防ぐことができます。
これに対して動的型付けの言語は、このような制約がなく、自由にデータを代入することができます。
# Pythonの場合
number = 12345 # 数値を代入
number = "hello" # 文字列を代入してもエラーにならない
これは1つの例ですが、このように基本的にスクリプト言語は制約が少ないため、ある程度、無茶な書き方をしてもそれなりに動いてしまいます。
プログラムを覚えるときは、動かしながら楽しんで覚えるのが良いので、初心者のうちはスクリプト言語の方が柔軟に学習できて、オススメです。
スクリプト言語を採用しているゲーム開発環境としては以下のものがオススメです。
* HSP
* Love2D (Lua)
* PICO-8 (Lua)
* Pygame (Python)
* Pyxel (Python)
私の場合は、HSPやPygameでゲームプログラムを覚えた後、C++でDirectXを使った本格的なプログラムを学びました。
それぞれの開発環境のリンクは以下にまとめています。
■2. ゲームプログラムのお約束を知る
ゲームはジャンルによって、ある程度お約束となる型があります。
例えば、シューティングゲームであれば、敵オブジェクトを配列やリストで管理して、同じ処理をループで回す……、といった感じです。
またテトリスやぷよぷよのような古典的なパズルゲームでは、各グリッド(マス目)の情報を2次元の配列に格納して、経路探索的な方法で消去ブロックの判定を行います。
この「ゲームのフィールドを2次元配列で格納する」という概念を理解すると、RPGのマップやSRPGの経路探索などにも応用ができます。
サイドビューのアクションゲームを作る場合には、地形との当たり判定で「押し返し」の処理が必要となり、やり方を知らないと若干難しい処理となります。方法としては「移動する速度をX軸とY軸の2つに分解して、それぞれで判定を行う」という方法を知っていると簡単に実装できます。
これらの方法は、知っているか知らないかの差でしかなくて、プログラムスキルの力量とあまり関係ありません。こういった情報を知るには、ゲーム作成のための色々なチュートリアル本やWeb上の情報を集めて勉強するのが良いかと思います。
■3. いろんなジャンルのゲームを作る
特定のジャンルばかり作っていると、知識が偏りがちで狭い発想にとらわれてしまいます。
アクション、シューティング、RPG、パズル、アドベンチャー、レースゲーム、ネットワークゲーム、などなど色々なジャンルに挑戦してみると、新しい発見があり、自分が作りたいゲームに関する知識が広まるかもしれません。
■まとめ
ゲームプログラムのスキルをアップする方法のまとめです。
1. スクリプト言語から始めてみる
2. 作りたいジャンルのお約束のプログラム方法を知る
3. 色んなジャンルのゲームを作ってみる
◾️参考になる書籍
今回の記事の趣旨とは異なりますが、ゲームジャンル以外にも、数学・物理の知識があるとより柔軟にプログラムを組むことができます。上記の本は改定前の古いものですが、こちらでも内容はあまり変わっておらず、中古で買うと安いので改定前の本もオススメです。
■関連する記事
ゲーム開発に慣れてきたら、1週間に1本ゲームを作る Game A Week にチャレンジするのはいかがでしょうか。とても大変ですが、継続できればゲーム開発者としての経験値を大きく上げることができます。
ゲーム開発をする前に知っておいた良いことをまとめた動画の感想です。ゲーム開発に慣れている人にとっては当たり前のことですが、油断しているとこの問題に陥りがちなので、初心者にとっても熟練者にとっても意味のある情報ではないかと思います。
ジャンル別のゲームの作り方の概要として、2Dアクションゲームと、2Dシューティングゲームを作る上での基本的な知識をまとめました。特にサイドビューの2Dアクションゲームは、様々なギミックがあり、それらを作るだけでもとてもゲーム作りの勉強になると思います。
■外部の記事
邦題「ハッカーになろう」。
だいぶ古い記事ですが、私がPythonを本格的に学ぶきっかけになった文章です。プログラムを学ぶための心構えとして一度読んで損はないと思います。
この記事では、プログラムを何も知らないのであれば、まずは Python を学ぶことを推奨しています。
もしコンピュータ言語をなにも知らないなら、まず Python から始めることをおすすめします。設計がきれいだし、ドキュメントもしっかりしているし、初心者にもそこそことっつきやすくできています。でも入門言語として最適でも、おもちゃではありません。強力で柔軟で、大きなプロジェクトにもじゅうぶん対応しています。
その後、C/C++, Perl, LISP, Java を理解すると、プログラマーとしてできること、プログラムするための思想の幅が広がる、としています。
特に、LISPのような関数型言語の考え方は、プログラム力をアップするためにとても有益なはずです。
個人的には、今であれば、Javaの代わりにC#、LISPの代わりにHaskellやScalaの方が良いかもしれません。(ハッカーになる、という趣旨からは変わるかもですが)
■Pyxelの記事まとめ
Pythonでのゲーム開発環境の1つである "Pyxel" についてこちらに記事をまとめています。もしPythonからゲームプログラム を学びたい場合はこちらが参考になるかもしれません。