1.はじめに
どうも、νronです。この記事ではゲーム作りにおけるプログラミングの流れについてふんわりと語ろうと思います。(語るだけです。技術的な話は期待しないでください(^_^;)あと環境などによっても変わるので参考程度に...)
現段階では読んでもわからない部分が多いかもしれませんが、何となくゲーム作りの流れを感じてもらえたらうれしいです。
2.ゲーム作りは最初が難関
ランダムに興味を持ってくれた人にはゲーム作りに興味を持っている人が多いのではないかと思うのですが、おそらくその中にはプログラミングができるか不安に感じている人も多いと思います。しかし、そこに関してはあまり心配する必要はありません。おそらく今年もプログラミング勉強会があるはずなので、それに参加してもらうと言語の基本については比較的簡単に理解できると思います。
さて、問題はここからです。言語を完全に理解したからといって、すぐさまゲームを作ることができるわけではありません。どれだけ言語理解が完璧でも、いざゲームを作るとなるとどこから手を付ければ良いのかがわからないのです。
では、ある程度構想がまとまっていよいよプログラミングに取り掛かるとなった時、まず最初にどこから始めればいいか、ちょっと考えてみてください。
画面に素材を表示させる所から?
キー入力での操作を対応させる所から?
ゲームシステムを構築するところから?
いやいや、最初はコードを実行したら指定した解像度のウィンドウが表示され続けるようにする所から始める必要があります。コードの実行が完了するとそのままコードの実行は終了し、実行結果のウィンドウが閉じられる(環境によってはウィンドウ自体は残る)ので、自分で終了させるまでゲームが起動し続けるように無限ループ機構を作る必要があります。(こう言うと難しく感じるかもしれませんが、要するに、無限ループ機構が無いと起動して1フレームで終了してしまうということです。これではゲームとして成り立っていないですよね?)そしてこの無限ループの中でゲームの中身を作っていくことになります。
どうでしょう、やっぱり難しそうだと思いましたか?でも安心してください。こうした面倒な最初のステップはスキップすることが可能です。次の項目で軽く説明するのでまずは次の方法を試してみるといいと思います。
3.面倒な部分を回避する
3-1.Unity等のゲームエンジンを使う
ゲームエンジンはUnityしか使ったことが無いのでUnityを例に説明します。Unityでは、最初に解像度などある程度の設定をしてしまえば、ゲームを起動させるためのコードは基本的に書く必要はありません。つまり、設定さえ済ませてしまえばいきなりゲームシステムなどを作る所から始められます。さらに、Unityではコライダーを使うことで面倒な計算なしで当たり判定を実装できたり、場面ごとにわけてシーンを作り特定条件でシーン移動するようにすることでステージ移動等を実装できたりします。また、オブジェクトにスクリプトを付けることなどでオブジェクトの動きを実装していくことができるので、分かりやすく段階的に様々な機能を実装していけます。
とにかく、ゲームエンジンを使えばゲーム作りでネックとなる面倒な部分を楽に、そして分かりやすく扱うことができます。この辺りは実際に使ってみないとわからないと思いますが、まずは何かしらのゲームエンジンを使うことをオススメします(というか使わずに作るのは本当に修羅の道)。
{{<post 224>}} これは前回のイベントでUnityを使って弾幕STGを作った時の記事です。良かったら見てみてください(一応書いたコードの一部とか載せてますが、ゴリ押しコードを切り取っただけのものなので参考にはしないでください...)。
3-2.サンプルを使わせてもらう
ひとまずゲームエンジンを紹介しましたが、いくらゲームエンジンを使ってもやっぱり最初はそれぞれの機能を実装するのにどんなコードを書けばいいかわからないと思います。そんな時はネット上にあるサンプルコードやサンプルプロジェクトを使わせてもらいましょう(利用規約などがある場合はちゃんと読みましょう)。おそらく実装したい機能の作り方で検索すれば割と出てくるんじゃないかと思います。多分サンプルを自分なりにつなぎ合わせて改変するだけで、ある程度思い描いているものを作ることができると思います。
さらに、余裕があればサンプルコードを解読してみましょう。サンプルコードの内容を理解し活用していくことで、実際に自分の力となっていきます。
4.ゲームの中身作り
ある程度枠組みが作れたら、いよいよゲームの内容を作っていくことになります。が、ここで書くことはほとんどありません。というのも、作るゲームによって大分変わってきますし、ここまでと同じようにサンプルを活用すれば中身も作っていけると思うからです。正直、ゲームの内容作りは枠組み(システム部分)を作るよりは難易度は低いと思います。(規模によってはかなりの手間が掛かりますが。)
ここで一番重要なのは、作りたいものの構成がしっかりと頭の中で組み立てることができているかだと思います。あとはその構成をもとに、部分部分に分けてどう実装していくかを考えていきます。
5.まとめ
どうだったでしょうか。色々と書きましたが、結論としては「とりあえず困ったらネットの力に頼っちゃえ」ってことです。自分だけで無理に頑張ろうとせず、割り切ってどんどんネットの力を借りていけば、ゲーム作りの敷居はかなり低くなると思います。あと、実際のプログラミング力を身に着けるのに一番大切なのは、とにかく自分でやってみることだと思います。現段階で不安に感じている部分がある人も、まずは実際に挑戦してみるところから始めてみましょう。ランダムでは困ったことがあれば先輩からサポートしてもらえるので、この機会にランダムに入ってゲーム制作に挑戦してみませんか?
6.おまけ
プログラミングをメインテーマにしておきながら抽象的な話しかしてないので...
最後に、おまけとしてC系言語において初心者キラーな部分(基本でサンプルにもよく使われるけど初心者向け説明で割とよく省略される部分)を一つだけ紹介します。
皆さんは下のif文を見てどう思うでしょうか?
int a;
a = 何らかの整数;
if(a){
真なら実行する文;
}
if文の条件式が成り立ってないじゃん!と思いましたか?でも実はこれでも文として成り立っています(この場合C#では変数がbool型でないといけないようですが)。 if文といえば、初心者向け解説では大体次のように説明されると思います。
if(条件式){
条件式を満たしていたら実行する文;
}
しかし、実はこれは完全な説明ではありません。まず、条件式は条件が満たされていなければ0(偽)を、満たされていれば0以外の値(真、普通は1)を返します。そしてifステートメントが真の値を参照した場合にif文の中の文が実行されます。よって、よく「条件式」と書かれている部分は変数のみでも良く、その変数に代入された値が0で無ければその中の文が実行されます。この省略は特に三項演算子(条件演算子)を用いた式内でよく使われている気がします。そういえば、三項演算子の説明自体がされていない解説も多い気がするので一応使用例を挙げておきます。(条件演算子は三項演算子の一つですが、C言語には三項演算子は条件演算子しかないので三項演算子が条件演算子を指す言葉として使われてたりします。というか個人的には三項演算子と呼ぶ方がメジャーな気がしてます。)
int a;
a = 何らかの整数;
a ? aが0でない時の処理 : aが0の時の処理;/*三項演算子*/
また、変数部分は値を持つ関数でもOKです。その場合は関数が実行され、返された値によって判断されます。
/*if文ver.*/
if(値を持つ関数){
関数が0以外の値を返した時に実行する文;
}
else{
関数が0を返した時に実行する文;
}
/*三項演算子ver.*/
値を持つ関数 ? 関数が0以外の値を返した時に実行する文 : 関数が0を返した時に実行する文;
これの利用例としては、毎フレーム実行する必要がある関数を条件式部分で呼び出して実行するようにし、関数側は正常に実行されれば0以外の値を、そうでなければ0を返すようにして、関数の実行結果により必要ならば例外処理を行うというものがあるようです。
これらに関してはC系以外の言語にも言えるものがあると思うのですが、C系しか扱ったことが無いのでその他には言及しないでおきます。
それでは、ここまで読んでくださりありがとうございました。