挫折不可能!初級ゲームプログラミング完全マニュアル  RSSを登録する

「ゲームが作りたいけどプログラミングなんて全然知らない」「文系だし数学や物理が苦手だけどゲームが作れるだろうか?」そんなアナタのためのメールマガジンです。PCの電源を入れてからどうすればいいのか?から自分のゲームが完成するまでを応援します!

最新号をメルマガでお届けします    
登録 解除

規約に同意して

登録した方には、まぐまぐの公式メルマガ(無料)をお届けします。
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.
最新号をメルマガでお届け
登録 解除

規約に同意して

登録した方には、まぐまぐの公式メルマガ(無料)をお届けします。

最近の記事

上へ戻る