2008/02/16
初級ゲームプログラミング完全マニュアル [vol.0033 2008/02/16]
┏┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳┓
┣┛ ┗┫
┃ 挫折不可能! 初級ゲームプログラミング完全マニュアル ┃
┃ ┃
┃ 第 33 号 2008/02/16 ┃
┣┓ ┏┫
┗┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┻┛
- Ads space -
┌┬───────────────────────────────┬┐
││ はじめに ││
└┴───────────────────────────────┴┘
みなさま、こんにちは!
個人ゲーム制作アドバイザーの Byerkut です!
14 日はバレンタインデーでしたね、
今年は「賞味期限以内に食べてください」と言われてしまい、
正直、胃にきました。
これも時勢ですね。
チョコレートは白くなっても食べられる人なのですが、悪食でしょうか?
さて、今回は先週のプログラムに目に見える変化が訪れます。
┌┬───────────────────────────────┬┐
││本日のラインナップ ││
└┴───────────────────────────────┴┘
・今日のメインテーマ
【小さなプログラムの目に見える変化】
・考えようによっては、ためになるコラム
【ウィンドウとは何か?】
・あとがき
┌┬───────────────────────────────┬┐
││ みんなの備忘録 ││
└┴───────────────────────────────┴┘
■Visual C++ 2008 Express Edition をインストールする手順
http://www.game-create.com/archives/235
------------------------------------------------------------------
以前の情報
------------------------------------------------------------------
■Visual C++ 2005 Express Edition をインストールする手順
http://www.game-create.com/archives/12
■Microsoft Windows SDK をインストールする手順
http://www.game-create.com/archives/13
■Visual C++ 2005 Express Edition でプロジェクトを新規作成する手順
http://www.game-create.com/archives/19
■VC++ 2005 EE でプロジェクトにソースファイルを登録する手順
http://blog.mag2.com/m/log/0000240151/108824854.html
┏┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳┓
┃┃ ┃┃
┃┃ 今日のメインテーマ ┃┃
┃┃ ┃┃
┃┃ 【小さなプログラムの目に見える変化】 ┃┃
┃┃ ┃┃
┗┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┻┛
先週、ついにコンパイルの通る最初のプログラムを組むことができました。
しかし、2週に渡ってお伝えして、いまだ目に見える変化はありません。
「実はメルマガを長持ちさせるための牛歩戦術では?」
いえいえ、邪推はいけません。歩みはこれでも早いくらいです。
メルマガの第1回でもお伝えしましたが、
プログラムができるようになるまで2年かかった学友&同僚がいました。
みなさまはすでに Visual C++ という IDE が使えるほどですので、
彼よりも格段に早くステップアップの階段を上っております。
それでは、今回は先週のコードに目に見える変化をつけてみましょう。
Windows で動くプログラムで目に見える変化をつけるためには、
まず、なんと言ってもウィンドウを表示することでしょう。
…と、言いたいところなのですが、ウィンドウを表示するコードは
非常に長くなってしまい、現在のテーマの趣旨に沿わないため、
今回はもっと簡単な方法で試してみたいと思います。
まずは、前回のソースを開いてください。
次のようになっていると思います。
------------------------------------------------------------------
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPreviousInstance,
LPSTR lpsCommandLine,
int nCommandShow)
{
return 0;
}
------------------------------------------------------------------
ここに1行追加して、次のようにしてください。
------------------------------------------------------------------
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPreviousInstance,
LPSTR lpsCommandLine,
int nCommandShow)
{
// ↓この1行を追加
MessageBox(NULL, TEXT("Hello work!"), TEXT("通過儀礼"), MB_OK);
return 0;
}
------------------------------------------------------------------
追加できましたら、コンパイルして実行してみてください。
前回、何も変化がなかったプログラムですが、
今回は小さなダイアログが表示されているかと思います。
「えー、これだけ?」と思わないでください。
小さなことを、ひとつひとつ押さえていくことが大変重要です。
さて、今回追加しました、この MessageBox() とは何でしょうか?
独学で勉強されている方や、本メルマガを熟読されている方の中には
すでにおわかりの方もいらっしゃるかもしれませんね。
そうです、これは「関数」です。
先週のコラム風に表現すると「機能」になります。
MessageBox() は「メッセージボックスを表示する」という
「機能」を持った「関数」になります。
実は、今回の重要なポイントがここになります。
すなわち…
・ C++ は関数の集まり
・ C++ は関数を増やしてプログラムを作る
…という2点です。
今回は「プログラムは関数によって
構成されている」という点を忘れないでください。
(厳密にはクラスなどあるのですが、それはまた後ほどの話題です)
今回は、この「関数」について少しだけ掘り下げてみたいと思います。
■関数の役割
まず、関数の役割を見ていきましょう。
関数の役割はズバリ「機能を提供&実行すること」です。
先の MessageBox() は「メッセージボックスを表示する」という
「機能」を持っていましたが、みなさまがゲームを作るときも同様です。
「プレイヤーを表示する機能」「弾を発射する機能」
「敵キャラを爆発させる機能」「ハイスコアを更新する機能」など
様々な「機能」を実装していかなければなりません。
これを実現するプログラムのメカニズムが「関数」なのです。
難しく書きましたが、
つまり「プログラムで何をするにも関数を作る」ということです。
■関数の要素
次に関数の要素を見ていきます。
関数の要素は次の4つです。
・名前
・機能
・引数
・戻り値
まず、「名前」ですが、これは当たり前にしてとても重要です。
なぜなら名前がなければ関数を認識できないからです。
今回のサンプルで、画面にメッセージボックスを
表示することができたのも、そもそもはメッセージボックスを表示する
という機能に MessageBox という名前がついていたからです。
難しく考える必要はありません、「名前がなければ使えない」と
ただ、それだけのことです。
「機能」も非常に重要です。
機能がなければ「使い道がない」からです。
今回のサンプルで MessageBox() 関数を採用したのは、
MessageBox() 関数が「メッセージボックスを表示する」という
機能を持っていたからに他なりません。
ここも難しく考える必要はありません、
「使い道があるから関数が存在する」というだけのことです。
さて、「引数」ですが、これはなんでしょうか?
今回のサンプルの場合ですと、下線部が引数になります。
------------------------------------------------------------------
MessageBox(NULL, TEXT("Hello work!"), TEXT("通過儀礼"), MB_OK);
~~~~ ~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~ ~~~~~
------------------------------------------------------------------
今回は NULL と TEXT("Hello work!") と TEXT("通過儀礼") と
MB_OK の4つの引数を渡して MessageBox() 関数を
使っているという意味になります。
おそらく勘の良い方はすでに理解されていると思われますが、
引数とは「機能に変化を加えるための情報」のことです。
MessageBox() 関数の場合、引数がとても重要な意味を持ちます。
「メッセージボックスを表示したい」と思ったとき、
「何でも良いからメッセージを表示してくれ」と希望するでしょうか?
たいていの場合はそうではなく、
なんらかの「表示してほしいメッセージ」があるはずです。
たとえば、みなさまが作るゲームが Windows Vista では動かないとして、
ユーザにそのことを通知するためにメッセージボックスを使うとします。
ただ「メッセージボックスを出したいから」と、
今回のソースをコピペしたらどうなるでしょうか?
「 Windows Vista では動きませんよ?」ということを伝えたいのに、
表示されるのは「 Hello work! 」になってしまいます。
これで目的は達成されているでしょうか?
されませんよね。
では、どうしたらいいでしょうか?
簡単です。 MessageBox() に引数を与える(変える)のです。
具体的には次のようにします。
------------------------------------------------------------------
MessageBox(NULL, TEXT("Hello work!"), TEXT("通過儀礼"), MB_OK);
~~~~~~~~~~~~~~~~~~~
// ↑をの引数を↓の用に変えます
MessageBox(NULL,
TEXT("このゲームは Windows Vista では動作しません!"),
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
TEXT("重要です!"), MB_OK);
// 改行していますが1行で書いても同じ意味になります
------------------------------------------------------------------
このように引数は、関数の機能に変化を与え、
「目的を達成させるために必要な情報」という意味を持っています。
ここは、慣れによって解決する部分もありますので、
あせらずに、忘れてしまったら何度も読み直してみてください。
「戻り値」は関数が返す「仕事の結果」の値です。
この点に関しては、今回のサンプルでは説明が
不十分になってしまうので、後ほど解説したいと思います。
長くなってしまいましたが、今回のおさらいは次のようになります。
・ C++ は関数の集まり
・ C++ は関数を増やしてプログラムを作る
ここは忘れないでください。
ただ、後ほど嫌と言うほど身にしみてきますので、
自然に覚えると思います(笑)
そして、関数には次の4つの要素があります。
・名前
・機能
・引数
・戻り値
最低限、名前だけは忘れないでください。
内容を忘れてしまった時は、
今回のメルマガをもう読み直していけばいいと思います。
次回は、いよいよ小さなゲームを作っていきたいと思います。
いくら勉強のためとはいえ、
何も反応しないプログラムはつまらないですからね。
今回も最後まで読んでいただきましてありがとうございます!
それでは!
Byerkut.
┌┬───────────────────────────────┬┐
││ 考えようによっては、ためになるコラム ││
││ ││
││ 【ウィンドウとはなにか?】 ││
└┴───────────────────────────────┴┘
突然ですが Windows はなぜウィンドウズという名前かご存じですか?
「ウィンドウがたくさんあるから」と答えた方、正解です。
しかし、ウィンドウとは何を指すかご存じでしょうか?
「
http://www.game-create.com/wp-content/uploads/2007/08/win32api_sample_0001_ss.jpg
↑こういうソフトウェアの土台のことで、
アイコンがあって、アプリケーションの名前があって、
最小化ボタンがあって、最大化ボタンがあって、終了ボタンがあって、
サイズを変更するための枠がある四角い領域のことでしょ?」
と、多くの方が思っていらっしゃると思います。
それは間違いではありません。それも立派なウィンドウです。
ですが Windows の場合、ボタンやテキスト入力ボックスや
プルダウンメニューなどもウィンドウと呼ぶのです。
少し厳密に言うと「なんらかのユーザの入力を受け付けるもの」は
たいていの場合、ウィンドウになります。
Windows の名前の由来は「ウィンドウがたくさんあるから」で
間違いありませんが、思いのほかウィンドウと呼ばれる物体は
たくさんあるということを覚えておくと
後で幸せになれること請け合いです(笑)
たとえばデスクトップマスコットなどを作りたい場合は、
この考え方が非常に重要になります。
Windows のツールを作りたいと思っている方は必ず覚えておきましょう!
Byerkut.
┌┬─────┬─────────────────────────┬┐
││ あとがき │ 発行者のつぶやきです ││
└┴─────┴─────────────────────────┴┘
たまたま、昔のメルマガを整理していて気がついたのですが、
なんと創刊号で壊れたとお伝えした XBox 360 が
いまだに壊れていることが発覚いたしました。
どんだけ興味が無くなったのでしょうか…
直ったらアイドルマスターを遊んでみたいです…
┌┬───────────────────────────────┬┐
├┘ └┤
│ 購読の解除はこちら↓ │
│ 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.


