仕様書とは、それを用いることで何が出来るのかを使い方とともに明確に書かれたもの?大体そんな感じ。
ゲームを作成するときも仕様書は重要です。先にゲームでやりたいことを明確に決めておかず、後から新しい機能を追加しようとすると、プログラムに無理が出ることが多く、膨大な量の書き換えが必要になり面倒です。
ですので、実際にプログラミングをする前に最低でも必要な関数やフラグなどを紙に書き出すなどをして、無理の無い設計を心がけるべきです。プログラミングには初期化?がつき物です。初期化が必要なタイミングというのはその処理、関数を実行する前になります。先に関数などを作ってから変数初期化用の関数を作るというのはあまり現実的でありません。体験談です。
ゲームを作成するときも仕様書は重要です。先にゲームでやりたいことを明確に決めておかず、後から新しい機能を追加しようとすると、プログラムに無理が出ることが多く、膨大な量の書き換えが必要になり面倒です。
ですので、実際にプログラミングをする前に最低でも必要な関数やフラグなどを紙に書き出すなどをして、無理の無い設計を心がけるべきです。プログラミングには初期化?がつき物です。初期化が必要なタイミングというのはその処理、関数を実行する前になります。先に関数などを作ってから変数初期化用の関数を作るというのはあまり現実的でありません。体験談です。
タイトル画面 → メインのゲーム → ゲームクリアorゲームオーバー → タイトル画面 → メインのゲーム...
このようなゲームについて考えてみます(ゲームの中身は問わない)。画像・音声を用いるものとします。
必要な関数
- タイトル
- メインゲーム
- ゲームクリア
- ゲームオーバー
- 画像・音声などのロード
最低でもこれらの関数が必要だということがわかります。
それぞれの関数に必要な処理
- タイトル画面からメインのゲームをスタートさせる処理
- メインゲームから特定の条件でゲームクリア、ゲームオーバー画面に移動する処理
- ゲームクリア画面からタイトル画面に戻る処理
- ゲームオーバー画面からタイトル画面に戻る処理
- 画像・音声などのロード
最低でもこれらの処理が必要だということがわかります。
初期化のタイミング
さらに、各関数の初期化のタイミングを考えます。初期化のタイミングを間違えると思わぬ動作をすることは当然ですね。
タイトル画面の初期化は当然、タイトル画面を表示する前に行わないといけません。そのため、タイトル画面の初期化はゲームを起動したすぐあとに実行するべきことがわかります。また、ゲームクリア、ゲームオーバー画面からタイトル画面に戻ってくる際もタイトル画面の初期化をしたいです。
メインゲームはタイトル画面でゲームスタートを選択したときに処理を開始します。そのため、メインゲームの初期化はタイトル画面から切り替わるときに実行するべきことがわかります。
ゲームクリア画面、ゲームオーバー画面にはメインのゲームから切り替わることになります。そのため、ゲームクリア、ゲームオーバー画面の初期化はメインゲームから切り替わるときに実行するべきことがわかります。
タイトル画面の初期化は当然、タイトル画面を表示する前に行わないといけません。そのため、タイトル画面の初期化はゲームを起動したすぐあとに実行するべきことがわかります。また、ゲームクリア、ゲームオーバー画面からタイトル画面に戻ってくる際もタイトル画面の初期化をしたいです。
メインゲームはタイトル画面でゲームスタートを選択したときに処理を開始します。そのため、メインゲームの初期化はタイトル画面から切り替わるときに実行するべきことがわかります。
ゲームクリア画面、ゲームオーバー画面にはメインのゲームから切り替わることになります。そのため、ゲームクリア、ゲームオーバー画面の初期化はメインゲームから切り替わるときに実行するべきことがわかります。
では、各ファイルのロードはどのタイミングで行うべきでしょうか?これには大きく分けて2つのパターンが存在します。
- STAGE1が始まる前にそのステージのデータを読み込み、クリアしたらそのデータを削除。そしてSTAGE2が始まる前にロード...というように細かくロード、デリートを繰り返すタイプのもの
- ゲーム開始と同時に全てのデータを読み込み、ゲームが終了するときに全てのデータを削除する一度にまとめてロード、デリートを実行するタイプのもの。
前者がメモリを効率的に使うことが出来ますが、処理が面倒です。そのため、このwikiでは後者の方法を用います。
よって、データの読み込みのタイミングはゲームが起動したすぐ後だということがわかります。タイトルで画像や音声を再生することを考えるなら、タイトルの初期化よりも先に行うべきです。
体験談
初期化、当然なようでいてゲームを作り始めたころは存在はおろか、使うべきタイミングが一切わかりませんでした。
私の場合、先にメインゲームを作ってからタイトル画面を付け足そうとしました。死にました。メインゲームの初期化をさまざまな関数で行っていたため、それらを全て一箇所に集める作業が始まりました。また、タイトル画面を付け足す前は初期化のタイミングは、一箇所で実行して問題ない変数にもかかわらず「ゲームを起動した直後」にだったり、「ゲームをプレイしていて必要になった瞬間」だったりとばらばらに適当にだらだらとやっていたせいで相当な書き直しが求められました。計画的にプログラミングをしましょう。
私の場合、先にメインゲームを作ってからタイトル画面を付け足そうとしました。死にました。メインゲームの初期化をさまざまな関数で行っていたため、それらを全て一箇所に集める作業が始まりました。また、タイトル画面を付け足す前は初期化のタイミングは、一箇所で実行して問題ない変数にもかかわらず「ゲームを起動した直後」にだったり、「ゲームをプレイしていて必要になった瞬間」だったりとばらばらに適当にだらだらとやっていたせいで相当な書き直しが求められました。計画的にプログラミングをしましょう。