現在、タイトル画面を開発しているのですが、「オブジェクト指向を完全に封印」したまま開発を進めているので、かなり苦戦しています。かなり大掛かりなプログラムになってきましたので、途中経過のプログラムを紹介します。

タイトル1-1
 今回は、新たにTitle.hというヘッダーファイルを作成し、それをHeader.hからインクルードします。あと、細かいようですが、以前は、コメントに「グローバル変数の定義」と書いていましたが、「定義と宣言の概念」をよく考えたところ定義には当たらないと思いましたので、「グローバル変数のプロトタイプ宣言」に変えておきました。プロトタイプでもないような気がしますが、コメントの内容や変数の名称とか、そういう呼び名などなんでもOKです。当サイトは、お学校のおテストで100点満点を取ることが目的ではなく、「動くゲームを開発すること」だけがメインです。

タイトル1-2
 Title.hです。このヘッダーファイルからもDxLib.hをインクルードし、T_MojiDraw関数とT_Mojimoji1関数のプロトタイプ宣言を行い、マトリックス文字素材画像用に280配列でT_m1変数と1140個のグローバル変数のプロタイプ宣言を行っています。なぜ、こんなにも大量の数になっているのかは、今回は本気で映画マトリックスのあの演出を忠実に再現するためです。内容は違うのにしますがw

タイトル1-3
 Global_t.cppを新たに作成し、タイトル画面に関するグローバル変数の宣言は、ここで済ませます。

タイトル1-4
 Kidou.cppのKidou関数は、このように変更しました。変更点は、MovieLoad1関数を呼び出す前に、ImgLoad1関数を呼び出したことです。MovieLoad1関数を後回しにした理由は、ムービーファイル読み込みエラーになり、ムービーを飛ばしてタイトル画面に移行するようなことがあっても、画像ファイルだけはメモリに読み込ませておくためです。

タイトル1-5
 ImgLoad1.cppのImgLoad1関数です。実際の画像ファイルの読み込みは、T_m1.pngをT_m1変数に280分割で読み込んでいるだけで、その他は、全て1140個のグローバル変数の初期化になります。

タイトル素材1-1
 ちなみに、読み込んだT_m1.pngとは、こういう画像ファイルになります。

タイトル素材1-2
 それを、このようにマス目で表示することになると考えます。1140個のグローバル変数とは、このマス目一つ一つの配列番号を指定するためです。最初は、何も書いていない39番目の配列を表示しておき、あとから変化を持たせる予定です。色々と考えてみたのですが、ここはあえて一番大変な方法(オブジェクトもクラスも二次元配列も使わない)でやってみることにしました。

タイトル1-6
 そして、Main.cppのWinMain関数のムービープレイ関数1の呼び出しはコメントにしておき、起動画面を抜けたらすぐにタイトル画面に移行できるようにしておきます。

タイトル1-7
 Title.cppのTitle関数です。変更点は、whileループの中で、T_MojiDraw関数とT_Mojimoji1関数を呼び出し、ループされる度に、グローバル変数のi変数をカウントアップしている点です。雷フラッシュは、バックのマトリックス文字演出の手前に表示させておきました。そして、T_MojiDraw関数のご紹介になるのですが、これがとてつもなく長いソースです。二次元配列やオブジェクトを使わないと、こんなに大変なソースになってしまうということの実例みたいなものです。

タイトル1-8-1
タイトル1-8-2
タイトル1-8-3
タイトル1-8-4
タイトル1-8-5
タイトル1-8-6
タイトル1-8-7
タイトル1-8-8
 お疲れ様ですw 以上が、1205行にも及ぶT_MojiDraw関数になります。ここでは、30段にわたって1140個の配列画像を表示しています。二次配列やオブジェクトというものを使えば、もっと楽にコードを書くことが出来るのですが、今は、二次配列やオブジェクトやクラス(メンバ関数やメンバ変数)は全て封印して開発しているため、このような大変なプログラムになってしまっていますが、コンピューターは1フレーム(1/60秒)で、どれだけ早く処理できるのかを確かめてみるために、わざと大量のコードを書くようにソースを組んでいます。

タイトル1-9-1
タイトル1-9-2
タイトル1-9-3
 そして、こちらがT_MojiDraw関数に対してアクションをさせるT_mojimoji1.cppのT_Mojimoji1関数になります。ちなみに、現在のT_Mojimoji1関数の行数は285行です。まだ、制作途中なのでまだまだ増えていく予定なのですが、最終的に1140行ものT_MojiDraw関数の内容とT_Mojimoji1関数の内容が、たった1フレームで読まれることになります。

タイトル1-7
 つまり、Title関数のwhileループの中で、T_MojiDraw関数とT_Mojimoji1関数を読むように書いているため、あの大量のコードが一瞬で読まれるということです。もし、CPUの処理能力の限界がくれば、画面の動きが重くなる(スローになる)などの現象になりますが、コンピューターは、こんなものではまだまだヘッチャラです。

実行結果のキャプチャー画像

 今回は、プログラムの内容のわりに動作は少ないので、紙芝居風のキャプチャー画像で実行結果をご紹介します。

タイトル1-10-1
 まず、この文字が画面の下から現れて、あの位置に止まります。この時、普通にy座標を変えてるわけではありません。画像の座標は一切いじらずに、1140マスの画像を瞬時に変化させて、動いているように見せています。

タイトル1-10-2
 次に、こんな風に左右に割れるように文字が複製され、

タイトル1-10-3
 完全に複製されます。この間、わずか0.5秒以内の出来事です。

タイトル1-10-4
 そして、まずは右側がカーテンのように文字が消えていくのですが、その時に、このような文字を表示しておきます。あれ?という演出です。

タイトル1-10-5
 もう片方も左方向にカーテンのように文字が消えながら、この文字だけが表示されます。あれ?という演出です。この時、「し た よ な w」の5文字が足りませんが、その5文字だけ00~0Fの文字でループカウントしながら最終的な文字を表示しているのですが、あまりに一瞬(19フレームぐらい)の出来事なので肉眼では、ほぼ見えないと思いますw いかかがでしょうか?中々、渋い演出だと思います。

 ゲーム開発には、「これどうやって作ったんだろう?」とか「これ作るの大変だっただろうな・・・」的な、プログラマのスキル自慢をするかごとくの演出をどこかに入れておくべきだと私は思います。そういうのを入れておくことで、プレイヤーに「お!?」という小さな驚き(小さな楽しみ)をお届けすることが出来ます。ゲームの目的はプレイヤーを楽しませることがメインです。

タイトル素材1-1
 とりあえず今は、残りの文字は、どうやって表示させようかと色々と楽しみながら考案中です。こういう演出を考えてる時間はすごく楽しいですね。

タイトル素材1-2
 このマス目にどうやってカッコ良く、次々と文字を表示させるのかは、プログラマである私やあなたのセンス次第です。私は誰も見たことがないような演出でプレイヤーをアッと言わせて楽しませてみたいですね(^ー^