2008/05/31
初級ゲームプログラミング完全マニュアル [vol.0048 2005/05/31]
┏┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳┓
┣┛ ┗┫
┃ 挫折不可能! 初級ゲームプログラミング完全マニュアル ┃
┃ ┃
┃ 第 48 号 2008/05/31 ┃
┣┓ ┏┫
┗┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┻┛
- Ads space -
┌┬───────────────────────────────┬┐
││ はじめに ││
└┴───────────────────────────────┴┘
みなさま、こんにちは!
個人ゲーム制作アドバイザーの Byerkut です!
しとしと、じめじめの季節がやってまいりました。
雨の日は気分が憂鬱で嫌になりますよね。
さて、外に出られないときこそゲームプログラミングです。
オリジナルゲームの完成と明日のお天気をお祈りしてまいりましょう!
今日は、複数のソースファイルが連携する方法についてです。
┌┬───────────────────────────────┬┐
││本日のラインナップ ││
└┴───────────────────────────────┴┘
・今日のメインテーマ
【ソースコードもチームワークが大事】
・あとがき
┌┬───────────────────────────────┬┐
││ みんなの備忘録 ││
└┴───────────────────────────────┴┘
■Visual C++ 2008 Express Edition をインストールする手順
http://www.game-create.com/archives/235
■Visual C++ 2008 Express Edition でプロジェクトを新規作成する手順
http://www.game-create.com/archives/270
■VC++ 2005 EE でプロジェクトにソースファイルを登録する手順
http://blog.mag2.com/m/log/0000240151/108824854.html
■画像ファイルを LoadImage() 関数で読み込めるようにする手順
http://www.game-create.com/archives/308
■ゲーム用ウィンドウのテンプレート
http://www.game-create.com/menu/downloads
■ビットマップ学習用クラス - Study::Bitmap
http://www.game-create.com/menu/downloads
┏┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳┓
┃┃ ┃┃
┃┃ 今日のメインテーマ ┃┃
┃┃ ┃┃
┃┃ 【ソースコードもチームワークが大事】 ┃┃
┃┃ ┃┃
┗┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┻┛
前回、ひとつのプログラムは多くのソースファイルから構成されている
ということをお伝えしました。
今日は、複数のソースファイルからひとつのゲームを作るための
各ファイルの連携方法について見ていきたいと思います。
まずは、軽くおさらいしてみたいと思います。
以前、作成したシューティングゲームのサンプルソースを
ダウンロードしてください。
http://www.game-create.com/archives/236
ダウンロードできましたら、解凍してファイルの一覧をご覧ください。
シューティングゲームは次のファイルで構成されておりました。
background.cpp
effect.cpp
enemy.cpp
enemy_driver.cpp
enemy_shot.cpp
enemy_shot_driver.cpp
game.cpp
player.cpp
player_enemy.cpp
player_enemy_shot.cpp
player_shot.cpp
player_shot_enemy.cpp
scene.cpp
template.cpp
timeline.cpp
この中で、シューティングゲームの起点となっているファイルは
template.cpp でした。 template.cpp が中心となり、
各ソースコードへいろいろな専門的処理を「お願い」していたのです。
なぜ、 template.cpp が起点となっているかわかりまでしょうか?
template.cpp がゲームの起点となっているのは、
template.cpp に WinMain() 関数が書いてあるからでしたね。
この話題を忘れてしまった方は過去記事を参照ください。
http://archive.mag2.com/0000240151/20080209215231000.html
さて、 template.cpp が中心となっていることが分かりましたので、
次は各ソースコードの役割をざっと押さえていきましょう。
各ソースコードには次のような役割がありました。
background.cpp 背景の描画を担当
effect.cpp 被弾などエフェクトを担当
enemy.cpp 敵の動きと描画を担当
enemy_driver.cpp 敵の制御全般を担当
enemy_shot.cpp 敵の発射する弾の動きと描画を担当
enemy_shot_driver.cpp 敵の発射する弾の制御全般を担当
game.cpp ゲームの初期化と終了を担当
player.cpp 自機の動きと描画を担当
player_enemy.cpp 自機と敵の衝突判定を担当
player_enemy_shot.cpp 自機と敵の発射する弾の衝突判定を担当
player_shot.cpp 自機の発射する弾の動きと描画を担当
player_shot_enemy.cpp 自機の発射する弾と敵の衝突判定を担当
scene.cpp ゲーム→コンテニューのような画面遷移を担当
template.cpp ゲームの起点、そして中心
timeline.cpp 敵の登場スケジュールの管理を担当
こうやって見てみると小さいゲームひとつ作るにも
さまざまな役割が必要なんですね。 template.cpp ひとつでゲームを
作るには無理があるとご理解いただけたかと思います。
では、本題です。
ゲームの中心となる template.cpp が各ソースファイルへ、
ゲームの処理を「お願いする」ためには、どうすれば良いのでしょうか?
…と、ここで思い出していただきたいことがあります。
C++ は計算と記憶しかできないのはすでにお伝えしましたよね。
これを解決する方法はなんだか覚えていらっしゃいますでしょうか?
そうです。 #include を使って Windows の力を借りることでしたね。
忘れてしまった方は過去記事を参照してください。
http://archive.mag2.com/0000240151/20080203171350000.html
実は、 template.cpp から各ソースファイルへ、
ゲームの専門的な処理を「お願い」したい場合は、
同じ #include を使うことによって実現することができるのです。
たとえば template.cpp が「背景を描画する」という処理を、
background.cpp に「お願い」したい場合は、
まず、 background.cpp に「背景を描画する」という「関数」を作ります。
そして、その「関数」を template.cpp から呼べるようにするために…
------------------------------------------------------------------
#include "background.h"
------------------------------------------------------------------
…と書きます。
template.cpp に #include "background.h" と書くことで、
template.cpp の中から「背景を描画する」という background.cpp の
関数を呼べる(お願いできる)ようになるのです。
#include <windows.h> と書くと、矩形を描画する Rectangle() や
円を描画する Ellipse() などの関数が使えるように
なったのと同じことです。
つまり、プログラミングにおいて他のソースファイルに
仕事(処理)を「お願い」するためには、
「関数」を通じて指示を出せばいいのです!
今回の「地球防衛ゲーム」でも、まさにこの方法が使われていました。
先々週のサンプルソースファイルをダウンロードして開いてみてください。
http://www.game-create.com/archives/360
見ていただきたいのは template.cpp の 61 行目です。
こっそり、でもしっかりと #include "background.h" と
書いてありますよね。
そして、その少し下の方には次のようにあります。
------------------------------------------------------------------
void DrawGame(HWND hWindow, HDC hBackBuffer)
{
DrawBackground(hWindow, hBackBuffer);
~~~~~~~~~~~~~~~ ←注目!
}
------------------------------------------------------------------
ここが、まさに「お願い」している部分です。
template.cpp から background.cpp の DrawBackground() という
関数を通じて「背景を描画してね」と「お願い」しているのです。
「やはり関数か…」
そう思われた方もいらっしゃることと思います。
過去にあれだけ「関数」に時間を割いて説明させていただいたのには
こういう理由もありました。
しかし、現在みなさまは、関数を「使う」ことはできても、
「作る」ことは不慣れなはずです(まだ、取り上げておりませんので)。
そこで次回は、「地球防衛ゲーム」の制作を通じて、
「関数を作る」方法を学んでいきたいと思います。
少し、基礎の話が続きましたが、次回はいよいよプレイヤーである
「ひのもとまどか」さんが登場します。
お楽しみにお待ちください!
今週も最後まで読んでいただきましてありがとうございます!
それでは!
Byerkut.
┌┬───────────────────────────────┬┐
││ 重要記事のダイジェスト ││
└┴───────────────────────────────┴┘
■C++ は計算と記憶しかできない
■外部の機能(関数)を借り受けるには #include を使う
■#include で借り受けた機能を使うには関数を呼び出す
http://archive.mag2.com/0000240151/20080203171350000.html
■Windows プログラムには必ず WinMain() 関数から開始する
http://archive.mag2.com/0000240151/20080209215231000.html
■プログラムは関数の集まり
■プログラムは関数を増やしてソフトウェアを作る
■関数には次の要素がある(名前・機能・引数・戻り値)
http://archive.mag2.com/0000240151/20080216090000000.html
■ゲームを作るためには「入力」「出力」「条件分岐」が必要
http://archive.mag2.com/0000240151/20080301221623000.html
■LoadImage() 関数はコピペで使い回せる。
■LoadImage() 関数の第2引数は
メモリに読み込みたい画像ファイルの名前を渡す。
■LoadImage() 関数で読み込むファイルは
プロジェクトディレクトリにおいてある必要がある。
http://archive.mag2.com/0000240151/20080413174135000.html
┌┬─────┬─────────────────────────┬┐
││ あとがき │ 発行者のつぶやきです ││
└┴─────┴─────────────────────────┴┘
バレーの最終予選が始まりましたが、
男子バレーはテレビで見ていても迫力がありますよね。
バレーや野球は最後まで勝負がわからないので面白いですよね。
自分が作るゲームでもそういうルールを作りたいです。
┌┬───────────────────────────────┬┐
├┘ └┤
│ 購読の解除はこちら↓ │
│ http://www.game-create.com/contents/gp_beginners_ml │
├┐ ┌┤
└┴───────────────────────────────┴┘
- Ads space -
┌┬───────────────────────────────┬┐
├┘ └┤
│ 「挫折不可能!初級ゲームプログラミング完全マニュアル」は、 │
│ 「いちばんやさしいゲームの作り方」が運営しています。 │
│ │
│ サイト : http://www.game-create.com/ │
│ 発行元 : http://www.game-create.com/menu/about │
│ 発行者 : http://www.game-create.com/menu/profile │
│ 問い合わせ : http://www.game-create.com/menu/contact │
│ 利用規約 : http://www.game-create.com/informations/agreement │
├┐ ┌┤
└┴───────────────────────────────┴┘
POWERED BY LIBERTIASTER GAME STYLE.



