2008/02/09
初級ゲームプログラミング完全マニュアル [vol.0032 2008/02/09]
┏┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳┓
┣┛ ┗┫
┃ 挫折不可能! 初級ゲームプログラミング完全マニュアル ┃
┃ ┃
┃ 第 32 号 2008/02/09 ┃
┣┓ ┏┫
┗┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┻┛
- Ads space -
┌┬───────────────────────────────┬┐
││ はじめに ││
└┴───────────────────────────────┴┘
みなさま、こんにちは!
個人ゲーム制作アドバイザーの Byerkut です!
細木数子先生の六星占術の本を買いに行ったら雪に見舞われました。
占い好きなんですから「今日の買い物運」とか調べれば良かったですね。
さて、今週から「考えようによっては、ためになるコラム」が
始まりました。
本編ではフォローできなかったゲームプログラミングの周辺知識を
拾っていきたいと思いますので、
時間に余裕のある方はぜひともご覧ください。
┌┬───────────────────────────────┬┐
││本日のラインナップ ││
└┴───────────────────────────────┴┘
・今日のメインテーマ【一番小さいプログラム】
・考えようによっては、ためになるコラム【関数について】
・あとがき
┌┬───────────────────────────────┬┐
││ みんなの備忘録 ││
└┴───────────────────────────────┴┘
■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
┏┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳┓
┃┃ ┃┃
┃┃ 今日のメインテーマ ┃┃
┃┃ ┃┃
┃┃ 【一番小さいプログラム】 ┃┃
┃┃ ┃┃
┗┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┻┛
先週のメルマガで記憶と計算しかできない C++ から
Windows の機能を利用する方法をお伝えしました。
その方法は #include <windows.h> という一文でしたね。
しかし、実はこれだけではプログラムたりえません。
コンパイルしてもエラーに遭遇して完了しないはずです。
そこで今回は、プログラムとして成立する最小のコード、
一番小さいプログラムを作っていきましょう。
一番小さいプログラムとは「何もしないプログラム」のことです。
この「何もしないプログラム」にいろいろと手を加えて、
「何かをするプログラム」へと進化させていき、
最終的にゲームの形にしていこうと考えております。
さて、先週お伝えしたプログラムは次の一文です。
------------------------------------------------------------------
#include <windows.h>
------------------------------------------------------------------
これは C++ に Windows の機能を組み込むプログラムでした。
(ちなみに include は「組み込む」という意味の英単語です)
残念ですが、これだけではコンパイルは通りません。
「何もしないプログラム」なのだからこれで十分なのでは?
と疑問をお持ちの方もいらっしゃることでしょう。
実はそうではないのです。
このプログラムには足りない部分があるのです。
それはなんでしょうか?
と、ここでひとつ考えていただきたいことがあります。
Windows ではプログラムのアイコンをダブルクリックすると、
プログラムが実行されるわけですが、このとき、
プログラムはソースコードのどこからスタートすると思いますか?
「ソースコードの先頭から」と、思われた方、非常に惜しいです。
おそらくソースファイルが1つだけであればそれで問題ないと思います。
しかし、思い出してください。
少し前まで使っていたシューティングゲームのサンプルは
たくさんのソースファイルから構成されていました。
ソースファイルが複数ある時、いったいどのファイルからプログラムを
開始したらいいのか判断に困ってしまうという事態に陥ってしまうのです。
プログラムを実行する際には、
実行を開始するポイントを1つに絞らなければなりません。
ではどうやればいいのでしょうか?
それこそが、先の問題の答えでもあり、今回の要旨でもあります。
答えは WinMain() という関数を作ることです。
実は Windows で動くプログラムには、
「 WinMain() という名前の関数から実行をスタートする」という
取り決めがあるのです。
この取り決めによって、ソースファイルが大量になっても、
どこから実行を開始すればいいのかを見失わないようになっているのです。
つまり、先のソースコードをコンパイル可能にするためには、
WinMain() という名前の関数を作ればいいのです。
今回もサンプルソースを用意しましたのでダウンロードください。
http://www.game-create.com/archives/250
中身は次のようになっています。
------------------------------------------------------------------
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPreviousInstance,
LPSTR lpsCommandLine,
int nCommandShow)
{
return 0;
}
------------------------------------------------------------------
正直、訳がわからなすぎて吐き気がすると思います。
私も最初はそうでした(笑)
「何もしないプログラム」を作りたいだけなのに、
こんなにも記述が必要なのか???!…と。
ここは、慣れによって解決する部分ですので、
今回は次の下線部だけ覚えてください。
あとの部分は、まだそれほど重要ではありません。
------------------------------------------------------------------
#include <windows.h>
~~~~~~~~~~~~~~~~~~~~ ←ここは先週の部分でしたね
int WINAPI WinMain(HINSTANCE hInstance,
開始ポイント→ ~~~~~~~ HINSTANCE hPreviousInstance,
LPSTR lpsCommandLine,
int nCommandShow)
{
return 0;
~~~~~~~~~ ←決まり文句
}
------------------------------------------------------------------
#include <windows.h> は先週お伝えしましたね。
今回は WinMain() という名前の関数が一番重要です。
プログラムはこの WinMain() という名前の関数を見つけて、
そこからプログラムをスタートさせます。
今回は「何もしないプログラム」を作りたいわけですので、
この WinMain() 関数の中身を空に…
おや return 0; という記述が見えますね?
実はこれは決まり文句となっておりまして、
「プログラムが正常終了」したことを意味します。
これはそのまま覚えてください。
さて、ここまでこれたらいよいよコンパイルです。
早速コンパイルしてみてください。
おさらいですが、 Windows で動くプログラムをコンパイルするためには、
「 Windows アプリケーション」をターゲットとした
プロジェクトを作る必要があります。
Visual C++ 2005 Express Edition をお使いの方は
次のページを参照してください。
http://www.game-create.com/archives/19
いかがでしょうか?コンパイルはうまくいきましたか?
コンパイルが成功しましたら実行してみても良いのですが、
なんせ「何もしないプログラム」ですので、何も画面に変化がありません。
おそらく実行してもわからないと思います。
一番小さいプログラムを作るために、
2週に渡ってメルマガをお送りしてきましたが、
改めて重要なポイントをまとめたいと思います。
・C++ は計算と記憶しかできない
・外部の機能を借り受けるには #include を使う
・Windows プログラムには必ず WinMain() 関数を作る
なんとこの3つだけです。
この3つだけでプログラムを作る土台ができてしまいました。
来週は、いよいよ「何もしないプログラム」に
目に見える変化をつけてみましょう。
今週も最後まで読んでいただきましてありがとうございます。
それでは!
Byerkut.
┌┬───────────────────────────────┬┐
││ 考えようによっては、ためになるコラム ││
││ ││
││ 【関数について】 ││
└┴───────────────────────────────┴┘
「関数」という名前に激しい違和感を
もたれる方が多いのではないでしょうか?
関数と聞くと三角関数や波動関数などに代表される
数学の知識というイメージがぬぐえないからです。
この「関数」という言葉だけで
プログラミングをあきらめてしまう方も多くいらっしゃいます。
私の学友にも「おれ数学苦手だし…」という理由で
学校を去ってしまわれた方がらっしゃいました。
これは非常に残念なケースです。
諸悪の根源「関数」。
実はこれ、誤訳ということをご存じでしょうか?
「関数」を英語にすると function になります。
ですが function を日本語にすると「機能」という意味になります。
「機能」であればかなり理解しやすいと思いませんか?
たとえば、みなさまのお手元のキーボードの上に並んでいる
キーをご存じでしょうか?
これは「ファンクションキー」と言います。
英語にすると Function key です。
F1 を押すとヘルプが表示されたり、 F5 を押すと画面が更新されたり、
いろいろな「機能」を提供してくれていますよね?
つまりプログラミングにおける「関数」もこれと同じことなのです。
今回出てきた WinMain() という「関数」は、
「プログラムの実行開始ポイントを Windows に教える」という
「機能」を提供しているに過ぎません。
さらに先週登場した Rectangle() という「関数」は
「四角形を描く」という「機能」を、
Ellipse() という「関数」は
「円を描く」という「機能」を提供しています。
こう考えると「関数」という言葉のイメージに
惑わされにくくなるのではないでしょうか?
ちなみに function がなぜ「関数」になってしまったのか?
という経緯については Wikipedia に詳しく書かれています。
http://ja.wikipedia.org/wiki/%E9%96%A2%E6%95%B0_(%E6%95%B0%E5%AD%A6)
Byerkut.
┌┬─────┬─────────────────────────┬┐
││ あとがき │ 発行者のつぶやきです ││
└┴─────┴─────────────────────────┴┘
■デスノート
今日発売のジャンプにデスノートのアフターストーリーが載っていました。
松田の目が逆転裁判の主人公みたいになっていて驚きました。
時間が経てば人は変わる。絵柄も変わる。
■レディアントマイソロジー
ロイドと腕試しをしたらこてんぱんにやられました。
攻略サイトを見たら LV 70 あれば楽勝と書いてありました。
LV 70 にするのが楽勝ではありません。
┌┬───────────────────────────────┬┐
├┘ └┤
│ 購読の解除はこちら↓ │
│ 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.


