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

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

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

規約に同意して

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

初級ゲームプログラミング完全マニュアル [vol.0049 2008/06/08]

┏┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳┓
┣┛                                                            ┗┫
┃       挫折不可能!  初級ゲームプログラミング完全マニュアル       ┃
┃                                                                  ┃
┃                       第 49 号  2008/06/08                       ┃
┣┓                                                             ┏┫
┗┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┻┛
                            - 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/386

 ダウンロードできましたら実行してみてください。

 実行の際には画像ファイルをプロジェクトファイルと

 同じ場所に置く必要がありますので注意してください。

    http://www.game-create.com/archives/308

 実行すると画面の下の方に女の子が登場したと思います。

 まだ不完全ではありますが移動することもできます。

 カーソルキーの左右を押してみてください。

 左右にポジショニングするキャラクターを見ることができます。

 キャラクターのモーションが全くないのに左右に動いてしまうのは

 不自然かと思いますが、これは後ほど対応してきます。

 今回はサンプルソースを通じて関数の作り方を学んでいきます。



 まず、今回新しく追加された部分を見ていきましょう。

 ダウンロードしたソースファイルの player.cpp を開いてください。

 player.cpp には4つの関数が書いてあり、ここに今回のプレイヤーの

 すべてが書いてあります。抜粋すると次のような内容です。

  ------------------------------------------------------------------
    #include "player.h"

    static Player player;

    void InitializePlayer(HWND hWindow, HDC hBackBuffer)
    {
      // ここにプレイヤーの初期化処理が書いてあります
    }

    void FinalizePlayer(HWND hWindow, HDC hBackBuffer)
    {
      // ここにプレイヤーの終了処理が書いてあります
    }

    void UpdatePlayer(HWND hWindow, HDC hBackBuffer)
    {
      // ここにプレイヤーの移動処理が書いてあります
    }

    void DrawPlayer(HWND hWindow, HDC hBackBuffer)
    {
      // ここにプレイヤーの描画処理が書いてあります
    }
  ------------------------------------------------------------------

 InitializePlayer() と FinalizePlayer() でプレイヤーの初期化と終了、

 UpdatePlayer() でプレイヤーの更新処理(今回は移動処理)、

 DrawPlayer() でプレイヤーを画面に表示する処理が書いてあります。

 まぁ、すっかりおなじみの名前と役割ですので「またこの話か」と

 思われるかもしれません。しかし、退屈に感じるのは

 みなさまが成長なさっている証拠です。

 内容の具体的な解説は次回以降へ持ち越して、今回は関数の作り方、

 つまり、 player.cpp というファイルを新規作成して、

 ダウンロードいただいたファイルの状態に持っていく方法を見ていきます。



 今回のように、ソースファイルと関数を追加して、

 新しいゲームの部品を作るためには次の手順を踏みます。



  1:このソースファイルにどのような関数を作るか考える

  2:関数の名前・機能・引数・戻り値を考える

  3:関数を書く



 まず、1についてですが、「あたりまえじゃないか」と思われる方と

 「なんの決まりもないんだ?」と思われる方の、

 ふたとおりいらっしゃると思います。前者の方はかなりプログラミングに

 慣れてきていらっしゃる方ですので、後者の方に対して説明いたします。

 まず、覚えていただきたいことは…



  ひとつのゲームを作るために何個のソースファイルが必要かとか

  何個の関数が必要かとか、どんな関数が必要かなどには正解はない。



 …ということです。

 長年の経験から、目安のようなものはあるのですが、

 これからプログラミングを始められる方は自分の勘だけで作った方が

 いろいろと学ぶことができてお勧めです。

 今回の目的は「プレイヤーキャラを画面に登場させる」ことですが、

 どうやって関数を作るか、そもそも関数を作る必要があるのかなどを

 判断するのはご自身の勘で問題ありません。

 一応、「何も目安がないと作れないよ!」という方のために

 当メルマガでの方針をリストアップしてみます。

  ・初期化、終了、更新、描画を1セットにしてソースファイルを増やす

  ・関数を作る必要があるかないか迷ったら作る方を選択する

  ・うまい関数名が思いつかなかったら長くてもいいのでフレーズにする

 特に注目してほしいのは最初の項目です。

 「初期化、終了、更新、描画を1セットに」とありますが、

 今回ダウンロードいただいた player.cpp ではまさにそうなっています。

 注意深く下線部をご覧ください

  ------------------------------------------------------------------
    void InitializePlayer(HWND hWindow, HDC hBackBuffer)
    {    ~~~~~~~~~~ ← Initialize は初期化という意味の英単語です
    }

    void FinalizePlayer(HWND hWindow, HDC hBackBuffer)
    {    ~~~~~~~~ ← Finalize は終了という意味の英単語です
    }

    void UpdatePlayer(HWND hWindow, HDC hBackBuffer)
    {    ~~~~~~ ← Update は更新という意味の英単語です
    }

    void DrawPlayer(HWND hWindow, HDC hBackBuffer)
    {    ~~~~ ← Draw は描画という意味の英単語です
    }
  ------------------------------------------------------------------

 「プレイヤーを画面に登場させる」という目的を4つの関数に

 分割しているわけですね。

 まぁ、このあたりはまだ理解できなくても問題ありません。



 次の手順は「関数の名前・機能・引数・戻り値を考える」

 ということです。これには聞き覚えのある方も

 いらっしゃるのではないでしょうか。

 実は過去のメルマガで時間をかけて取り上げました。

 忘れてしまった方は過去記事を参照ください。

    http://archive.mag2.com/0000240151/20080216090000000.html

 関数は名前・機能・引数・戻り値の4要素からできているのですが、

 今までは、出来合いの関数だけを使っていましたので、

 この4要素は誰かの手によって決められていました。

 しかし、今度は自分で関数を作るわけですので、

 この4要素を自分で決める必要があります。

 「そんなことできないよ」と思われる方もいらっしゃるかもしれませんが、

 ゲームを作るための神の技術を手に入れたと思って楽しんでください。



 最後に必要なのは「関数を書く」ことです。これは当然ですよね。

 今回は、一番分かりやすいであろう「プレイヤーを画面に登場させる」

 ための「キャラクタ−の描画処理」を例にとって関数を作ってみます。

 つまり、「キャラクターを画面に表示する関数の作り方」です。



 まず、必要なのは関数の4要素を決めることですが、

 機能はもう問題ないですよね? そうです、今回作る関数の機能は

 「キャラクターを画面に表示する」ことです。

 次に名前を決めます。ここは 100% 自分で決めることができるのですが、

 今回は DrawPlayer という名前にしてみましょう。

 さぁ、関数の4要素のうちのふたつはすでに決定しました。

 残り半分ですので頑張りましょう!

 次に必要なのは関数の4要素のうちの「引数」を決めることです。

 実は、これが一番面倒な部分ですので気合を入れてください。

 まず、非常に重要なポイントが…



  そもそもこの関数に引数は必要なのか?



 …を常に考えることです。

 引数は必ずしも用意する必要はありません。

 必要なければ省略することができます。

 引数とは関数になんらかの情報を渡したいときに用意します。

 たとえばすっかりおなじみとなりました MessageBox() という関数が

 あります。この関数はメッセージボックスを表示する機能を持っています。

 しかし、この関数は引数を省略して呼びだすことはできません。

 なぜなら、この関数は「メッセージボックスを表示するのはいいけど、

 その中になんていう文字を表示したいの?」という疑問があるからです。

 このように、関数の実行になんらかの情報が必要な時に引数を指定します。

 たとえば MessageBox() 関数は次のようにして使わなければなりません。

  ------------------------------------------------------------------
  MessageBox(NULL, TEXT("メモリが足りません"), TEXT("警告"), MBOK);
             ~~~~  ~~~~~~~~~~~~~~~~~~~~~~~~~~  ~~~~~~~~~~~~  ~~~~
             ↑下線部が関数の実行に必要な引数
  ------------------------------------------------------------------

 さて、本筋とそれましたが、今回の目的は「キャラクターを画面に

 表示することです」。キャラクターを画面に表示するために

 DrawPlayer() という関数を作るところまでは決まりましたが、

 この関数を作るために引数は必要でしょうか?



  「わかったぞ!!

   どのキャラクターをどこに表示するかを引数で渡すんだ!!

   だから引数は必要!!!」




 …と、思われた方、ほとんど正解です。

 しかし、ひとりでこの答えが出た方は、かなりスジが良い方ですので、

 もうこのメルマガは必要ないかもしれません。

 さて、ほとんど正解と書きましたが、実は今回のケースでは…



  キャラクターを画面に表示する関数に引数は必要ない



 …のです。

 なぜかというと、今回の場合は、どのキャラクターを表示するのか、

 また、どこに表示するのかは DrawPlayer() 関数の中からわかるからです。

 あえて書いてきていませんが、冒頭にサンプルプログラムを

 見ていただいたのでわかるとおり、今回のプレイヤーはひとりですよね?

 つまり DrawPlayer() 関数で描くキャラクターは、

 サンプルプログラムに出てきた女の子に特定されているのです。

 このように自明(明確)な情報は引数として受け取る必要はありません。

 ちょっと嘘っぽい言い方になってしまいましたが、

 今回はこうやって覚えておいてください。



 さて、関数の4要素のうち、名前・機能・引数が決定しました。

 残りは戻り値なのですが、これも引数と同じ考え方をしてください。

 つまり、関数が実行した何らかの結果を返したい場合は戻り値を

 決める必要があるのですが、必要ない場合は省略することができます。

 今回は「キャラクターを画面に表示」できれば、

 関数の役割は完遂できますので、戻り値は必要ありません。



 長くなりましたが、ようやく DrawPlayer() 関数の4要素が決まりました。

  名前 :DrawPlayer

  機能 :プレイヤーを画面に表示する

  引数 :必要ない

  戻り値:必要ない

 これをソースコードに記述するためには、次のような書式で書きます。

  ------------------------------------------------------------------
    戻り値 名前(引数)
    {
    }
  ------------------------------------------------------------------

 つまり、今回の場合は次のようになります。

  ------------------------------------------------------------------
    void DrawPlayer()
    {
    }
  ------------------------------------------------------------------

 これで完了です。完璧です。これで { と } の間に

 キャラクターを表示する関数を書けば、ゲーム画面にプレイヤーを

 登場させることができるようになります。

 しかし「ちょっと待て! void という謎の文字があるぞ」と思いますよね。

 実は、関数に戻り値が必要ない場合は void と書かなければならないのです。

 これは、こういうものですので、そのまま覚えてしまってください。



 さて、ついに念願だった関数の作り方を知ることができました。

 次回は引き続き DrawPlayer() 関数をいじくりまわして

 実際に「キャラクターを画面に登場」させてみましょう。



 今回も最後まで読んでいただきましてありがとうございます!

 それでは!

                                                            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

┌┬─────┬─────────────────────────┬┐
││ あとがき │  発行者のつぶやきです                            ││
└┴─────┴─────────────────────────┴┘

 いまさらながら Halo にはまっています。

 Halo って知らない人いそうですよね。 Xbox のゲームです。

 内容は SF モノなのですが、 SF というとエイリアンっぽい敵が

 出てくるのがお決まりのパターンなのでしょうか。

 エイリアンってかっこいいけど怖いですよね。

 Halo もエイリアンみたいのでてきて怖いので

 もっぱら味方の後ろでおびえながら援護射撃してます。

 主人公は伝説の超兵士なんですけどね。なさけなや…

┌┬───────────────────────────────┬┐
├┘                                                            └┤
│  購読の解除はこちら↓                                            │
│  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.
最新号をメルマガでお届け
登録 解除

規約に同意して

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

最近の記事

上へ戻る