ゲームを実際に作るための考え方

 

673271_92245724.jpg

多少プログラムを覚えた人、

FLASHでアクションスクリプトを少し覚えた人、

HSPなどの簡易言語が多少使える人、

こういう人で、さてゲームを作ろうと思うんだけど、これからどうすれば
いいんだろう? という人に、スムーズにゲーム製作に入れる方法を書きたいと
思います。


 ほとんどの人は、


ゲームを作りたい → プログラムをちょっと覚えた → 
でもこれからどうすれば?


みたいな、つまづきがあるのではと思います。

 実際私も、プログラムを覚えて、いろいろなサンプルプログラムを作ったり、
技術的なプログラムを作ったりはするんですが、はて、じゃあゲームは
どう作れば...? どこから入っていけばいいのか...みたいなところで、
一度つまづきました。

 で、そこでストップして、ずるずると時間が経ってしまう。

 知り合いにも、ゲームを作ろうとプログラムを覚えているんだけど、
どこまで覚えればいいのかわからず、結局プログラムの材料だけを
たくさん用意したにも関わらず、ゲームはなにも作っていない...という
人がいます。


 ゲームの大きな構想はあるんだけど、いきなりそれを作るわけにも
いかないし...みたいな抵抗もあったりする。


 ということで、じゃあそこからゲームを作れるようになるにはどうしたら
いいのか? というところを説明していきたいと思います。


 これは実際に楽しい作業ですよ。

 だんだんと「ゲームを作っている!」という実感が出てきて、
楽しくなります。

 プログラムをこれから覚えたい、という人も、ぜひこれから説明する
手順でゲームを作ってみてください。

 楽しいですよ。


 まず、私はプログラムを覚えたての人には、「シューティングゲーム」の
習作をすることから薦めています。

 なぜかというと、シューティングゲームは、シンプルにゲームを作る要素が
すべて入っているからです。

 要素というのは、


1・自機(と、弾)

2・敵

3・ゲームオーバー

4・ゲームクリア


 こうですね。

 これを作れば、ゲームが完成します。

 実に4つのパーツでゲームが出来上がるわけです。

 簡単ですよね?


 これさえ作れば、あとは新しい処理を付け足していくだけで、実はRPGも
出来るし、シミュレーションゲームもできます。


 どんなゲームも作れます。

 今あるどんなゲームも、この4つの要素を基礎にして出来ている。

 この4つの処理を膨らませて大きくしているだけなんですね。

 ということで、プログラムを覚えたての人には、
まずシューティングゲーム。

 これをお薦めしています。


 作り方の概要を1つずつ解説しましょう。


 まず自機。

 プレイヤーが操作するものを作るところから入ります。

 ここから入ることで、「おっ、ゲームを作ってるんだ」という気分に
なります。

 いじって遊べるものから入ると、「次はこうしたい」という欲求も
出てきます。


 私がプログラムを覚えたての頃は、まずはキャラクタを表示する処理を
作るところから入りました。


 これは、今だったらどんな言語でもウェブにサンプルがたくさん
転がっています。


 で、そのキャラクタを右に移動させる処理を作ってみる。

 おお~、動いた! じゃあ、今度はボタンで移動するようにしよう。


 で、ボタン入力を判定する処理を調べて、実装してみる。

 おお~、押したら動く! じゃあ次は...4方向に動くようにしよう。

 こんな感じで、どんどん作っていくわけです。

 自分が作りたいものを作って、楽しみながら作るのがコツですよ。


 自機を動かすには、ボタンの判定によって、上下左右に動かす。

 if文を4つ並べて、上下左右のキーを判定します。

 で、押されていたら、そちらの方向に表示座標をプラスもしくは
マイナスする。

 これだけですね。

 本格的な移動処理になると、斜め方向の移動量をちゃんとサイン・
コサインで計算して作りますが、まずは単純にプラスマイナスだけで
いいです。

 画面から自機がはみ出さないように、移動限界処理を入れたりもして
くださいね。


 表示処理のお約束は言語によっていろいろあると思いますが、表示の同期を
取る命令に従ってください。


 私が最初自機を作ったときは、横スクロールシューティングだったんですが、
ちゃんと戦闘機の絵を作って、上下に移動したら傾いた絵を表示するように
したり、噴射口からジェットを出してアニメーションさせたりして遊びました。


 自分で描いたものが動いている! という喜びの端緒でしたね。

 ヘタクソだったのでだいぶ弱そうな自機でしたけどね(笑)。


 あと作ってしまうと、コンシューマで出ているゲームの自機の
処理というのは、こんな程度なんだな、というのがわかります。


 次に自機から弾を発射します。

 出現座標を自機の位置からにして、画面の端まで行ったら消す。

 これだけです。

 配列を使って、連続して複数の弾を発射できるようにもしてみてください。

 弾のフラグがオフだったら、そこの配列を使う...みたいな処理です。

 連続で発射できるようになると楽しいですよ。


 弾を発射したら、射出位置にマズルフラッシュ(発射の時の光)を
表示してみるのもかっこいいです。

 これができるとだんだんとシューティングっぽくなってきます。

 

 次に敵。

 とりあえずは、直進だけをしてくる敵にしましょう。

 上から下に移動するだけとかね。

 私はキャラクタを隕石にして、横シューだったので右から左に
移動させました。

 右の端からy座標をランダムにして、どんどんと出現させます。

 左端に行って画面外に出たら消す、と。

 ここも、敵の数は配列で管理します。

 自機の弾と似たような処理です。


 私の場合はここから、隕石の大きさを大きくしたり、小さくしたり、
速さを変えてみたりして遊びました。


 ここまでで、ビュンビュンと隕石が飛んでくるシーンができましたね。


 さてこうなると、当たり判定をつけたくなりますね。

 ドカドカと隕石を撃ち落としたくなります。


 で、自動的にゲームオーバーの処理を作ることになるわけです。


 当たり判定は、まずは自機の弾に対する、敵の当たり判定。

 弾の側で、敵の配列をすべて見て、座標が重なっていないか判定します。

 弾と敵を矩形同士の判定で処理してもいいですが、まずは簡単に点と
四角で判定してもOKです。

 弾の中心点が、敵の矩形の中に入っているかどうかの判定です。

 簡単ですね。


 で、当たっていたら、弾と敵を消す。


 弾の側の判定はこれで終わりです。


 で、次に自機と敵の判定。

 敵の側で、自機の中心点が、自分の当たりである矩形領域に入っているか
見る。

 当たっていたら、ゲームオーバー処理に飛ばして、ゲームオーバー。


 ここでひとまずはゲームっぽくなりましたね。


 最後にクリア処理。

 これはクリア条件を常に監視して、それに達したらクリア処理に飛ばす
という簡単な処理です。

 クリア条件はなんでもいいですが、例えば隕石を100個破壊したとか、
そういうのですね。


 これでひとまず、ゲームがゲームである条件をすべて満たしました。

 最小限のゲーム要素です。


 自機と敵が出てきて戦う。

 ゲームオーバーとゲームクリアがある。


 おめでとうございます!

 あなたが作った初めてのゲームです。


 このあとは例えば、ただ弾が敵に当たって消えるだけじゃさみしいから、
敵に弾が当たったら爆発を発生させるとか、音を出してみるとか、そういう
ふうに、どんどん欲求のまま付け加えていくのがいいですよ。

 自機を人に変えて、重力をつけて、ジャンプできるようにするとかでも
いいですね。

 だんだんとアクションゲームっぽくなっていきます。


 敵のアルゴリズムも変えたりして。

 いろいろ変えようがありますね。


 さて、基本形ができたら、改良とつけたしを繰り返します。


 このままシューティングゲームにしていくとしたら、プログラム的な
改良も必要ですね。

 ゲームの規模が大きくなっていくと、その規模の大きさを吸収でき、
なおかつ効率よくプログラムできるようにしていく必要があります。


 ゲーム・プログラムの最も根底に位置する基本なアルゴリズムは、
「タスク管理システム」です。

 開発の方便で、タイムスライスシステムなどと言うこともあるようです。


 いずれにしろ、複数のキャラクタ(タスク)を1つの管理構造で
管理するためのシステムです。

 タスクとは処理の1単位のことを言います。

 さっきの例で自機とは敵と弾をすべて別の配列で管理しましたが、
それを1つの配列で管理する、と考えると簡単ですね。

 タスクシステムには、生成、動作、消去の3つの処理があり、すべての
タスクはこれで運用されます。

 例えば自機のタスクを生成すれば、自機が画面に表示され、動かすことが
できるようになる。

 ボタンを押すと自機のタスクが弾のタスクを生成します。

 弾のタスクは画面の端に行くと、自分自身を消去。


 みたいな感じで、すべての動作をタスク管理システム下で
行なうわけですね。


 処理単位ですが、ゲームの場合は、1秒間に60回の表示をスクリーンに
対して行うので、タスクの処理単位は1/60秒を基準に行ないます。

 1回の処理を1フレームと言います。

 これも方便で、1チックとか1イントとか言うこともあるようです。


 難しそうに感じるかもしれませんが、単純に考えると配列の管理ですので、
最初は配列管理型で作るといいですよ。

 C++とかJavaだと、構造体と構造体のポインタみたいな話が出てきて
複雑なことになりますが、これも資料はウェブに転がっています。


 プログラムはそこを起点にするとして、ではその後のゲーム内容は
どう詰めていくか? ですが。


 ゲーム開発は、これまで「ウォーターフォールモデル」と呼ばれる、
ゲーム内容のすべてを記述した仕様書を作り、それにそってなだれのように
ゲームを作っていく、という開発方式が主流でした。


 しかし仕様書の変更が多いゲーム開発では、この方式はスタッフに
非常に負荷がかかり、ストレスも多いと問題になっています。


 そこで出てくるのが、「アジャイルモデル」と呼ばれる開発方式です。


 簡単に言うと、アジャイルモデルによるゲーム開発は、最初に概要的な
仕様書があり、そこから機能ごとの仕様、設計、実装、テスト、評価を
1つのサイクルとして、それを反復して作っていく形になります。

 そして、1つのサイクルごとに、リリースできる形に持っていきます。


 ゲームにおいてリリースできる形とは、ゲームオーバーとゲームクリアが
まず実装されている形になります。

 さきほどのシューティングゲームで用意した要素がまずあるわけです。


アジャイルソフトウェア開発 - Wikipedia
http://ja.wikipedia.org/wiki/%E3%82%A2%E3%82%B8%E3%83%A3%E3%82%A4%E3%83%AB%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E9%96%8B%E7%99%BA

反復型開発 - Wikipedia
http://ja.wikipedia.org/wiki/%E5%8F%8D%E5%BE%A9%E7%9A%84%E9%96%8B%E7%99%BA


 この方式は、機能ごとに作っていくので、個人ゲーム開発に適していますし、
「プロトタイピング」という、作りながら内容を確かめる開発方式でも
あるので、ゲーム開発には非常に適していると言えます。

 また、ウェブ2.0時代に提供するゲームとしても、この方式によって機能追加
していく形が合っていますね。

 現在ウェブで展開している「ミクシィ」や「はてな」などのサービスは、
すべてこの方式で行なわれています。


 柔軟性のある開発方式であり、実際にいくつかのゲーム会社では、この方式を
取り入れている会社があります。


 また、中には仕様書すら存在しない開発会社もあるようで、非常に動的に
面白さを確保しているようです。


 個人ゲーム開発者にこの「アジャイルモデル」を特にお薦めするのは、
開発の柔軟性、面白さを確保するための方式であるというだけでなく、


「とにかくボロでもいいので形にすること」


が、開発の前提になっているからです。


 形ができるということは、結果がでるということです。

 形がてしまえば人に見せることも可能になりますし、


「こうしたほうがいいのではないか?」

「こうすればもっとよくなるのではないか?」


という、評価が可能になります。

 評価ができれば、進むべき道がわかり、ゲーム開発も進みます。


 さきほどのシューティングゲームも、「ここをこうしよう」というのが
自然と出てきてましたよね。


 面白いゲームを作るために、「前進すること」が出来るわけです。


 というわけで、「ゲームを実際に作るための考え方」でした。


 

このエントリーをはてなブックマークに追加


期間限定企画「中毒ゲームデザイン・トレーニング」
■中毒になるゲームの秘訣はあなたがド変態であること?
現在1927名の方が登録中。
期間限定でゲームデザインについての講座を特別プレゼント。

■音声1:粘りについて
ゲームにハマりを生み出す要素「粘り」を入れる方法とは?
あなたの作るゲームにも「粘り」を取り入れよう。

■音声2:インパクトについて
 ヒットゲームのトリガーとなっている「インパクト」の作り方とは?
「インパクト」を取り入れて、あなたのゲームにヒットの可能性を埋め込もう。

■ほかにもこんな内容を音声でお届けします
・練り上げられたゲームデザインをする秘訣
・間違いのない面白さのコアを盛り込む方法
・ゲームがヒットする原因を盛り込む方法
etc.

■サンプル音声、登録はこちらから。



トラックバック(0)

このブログ記事を参照しているブログ一覧: ゲームを実際に作るための考え方

このブログ記事に対するトラックバックURL: http://n2-interactive.com/mt/mt-tb.cgi/151

コメントする

[[img(http://x8.mikosi.com/bin/ll?095447901)]] [http://x8.mikosi.com/bin/gg?095447901 アクセス解析]