2008/11/15
初級ゲームプログラミング完全マニュアル [vol.0068 2008/11/15]
┏┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳┓
┣┛ ┗┫
┃ 挫折不可能! 初級ゲームプログラミング完全マニュアル ┃
┃ ┃
┃ 第 68 号 2008/11/15 ┃
┣┓ ┏┫
┗┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┻┛
- Ads space -
┌┬───────────────────────────────┬┐
││ はじめに ││
└┴───────────────────────────────┴┘
みなさま、こんにちは!
個人ゲーム制作アドバイザーの Byerkut です!
心ならずもご無沙汰してしまいました。
待っていただいたみなさま、本当に申し訳ありません。
最近では早朝に時間を作るようにしてみました。
6時くらいに起きてブログを更新したりメルマガ書いたりラジ(自粛)
さて、今回はプログラムの新しい技が登場します。
┌┬───────────────────────────────┬┐
││本日のラインナップ ││
└┴───────────────────────────────┴┘
・今日のメインテーマ
【円高だから輸入がうまい】
・考えようによっては、ためになるコラム
【ファイル入出力が苦手】
・あとがき
┌┬───────────────────────────────┬┐
││ みんなの備忘録 ││
└┴───────────────────────────────┴┘
■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
┏┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳┓
┃┃ ┃┃
┃┃ 今日のメインテーマ ┃┃
┃┃ ┃┃
┃┃ 【円高だから輸入がうまい】 ┃┃
┃┃ ┃┃
┗┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┻┛
前回までのメルマガで、どれだけ画面が増えてもソースコードが
汚くならない方法を知ることができました。
早速今週から具体的なゲーム内容を作っていきたいと思います。
さて、「崖の上のうみょーん」ですが、今回の大きな目玉のひとつが、
「広大なフィールド」になります。今までのサンプルゲームは
すべて1画面で完結する簡単なものでしたが、今回のゲームは
スクロールを用いて広い海の中を表現します。
スクロールかぁ…、どうやって実装するんだろう?
期待に胸がふくらみますよね。しかし、実は問題があるのです。
実はスクロールというのはあまり難しくありません。
ゲームプログラミング系の専門学校では授業の中に入っていないくらい
基本的なことです。しかし、基本的ではないこともあります。
それは、広大なマップのデータをどこからもってくるのか?
…という点です。
こうやれば良いじゃないか!
------------------------------------------------------------------
static Map map[] = { /* ここにマップのデータが入る */ };
------------------------------------------------------------------
…と、思われるかもしれませんが、マップのデータは幅をとりますので、
この方法では問題があります。おそらく最初はうまくいくのですが、
調整にとても時間がかかってしまいます。
この問題に関してはどのみちどこかで触れることになりますので、
ここでやってしまいます。
ズバリ!こういった場合には
「ファイルからデータを持ってくる」ということをやります!
よく、ゲームを遊んでるときに「 Now Loading ... 」などと表示される
のを見たことがあると思いますが、あれはファイルからデータを
読み込んでいるのです(実際にはオーバーレイなども読んでいますが)。
ファイルは問題ないでしょうか?みなさまが普段 Windows で使われている
ファイルのことです。たとえば readme.txt など。
まず、ファイルにマップに関する大量のデータを入力しておき、
ゲームからはそのファイルを読み込むことでプログラムの保守性を
高めようというのが狙いです。
「なんだかファイル内容の読み込みって大変そうだなぁ…」
そう思われた方はセンスが良いです。
実は、ファイルの読み込みは大変です。
とくに組み込み系プログラムの場合は命をかけるに値する分野です。
しかしながら、最初から気負っていると先へ進みません。
最初は「6割くらいの理解でいい」と割り切ることが大事です。
心配は要りません。 Byerkut さんもよくわかっていないのですから。
(言い訳はコラムにて)
今回は最初ですのでファイルの読み込みのさわりだけをお伝えします。
ファイルの内容を読み込むためには次の手順を踏みます。
1:ファイルを開く
2:目的のデータまで移動する
3:ファイルの内容を読み込む
4:ファイルを閉じる
…以上です。
「あれ?もしかして簡単ではなかろうか?」と思われるかもしれません。
しかし、半分くらいの方は誤解があると思います。
まず、1の「ファイルを開く」ですが、普段 Windows を使っているときでも
「ファイルを開く」というダイアログがありますので、
それを想像してしまいがちですが、実際にはそうではありません。
「 Windows のファイルを開く」のと「プログラムのファイルを開く」では
大きな違いがあります。それは何かというと、
「 Windows のファイルを開く」はファイルの内容をすべてメモリに
読み込むのに対し、「プログラムのファイルを開く」は、
データの入出力の準備をするだけになるのです。
つまり、1の段階ではまだファイルのデータがメモリに
読み込まれていないのです。実際はバッファリングやスーパーフェッチ
などの技術でファイルを開いた段階でメモリ読み込みをするのですが、
しないと理解していた方が無難です。たとえば、「ファイルを開いたぞ!
必要なデータはすべてこのファイルの中にあるわけだから、
ファイルを開きっぱなしにすればメモリが節約できるぞ」というのは
間違っています。なぜ間違えているのかというと、ファイルが
開いただけではデータがメモリに乗っていないため、
データ入出力の際にファイルアクセスのオーバーヘッドが
発生してしまうからです。ゲームでは極力処理速度を重視するのが
基本的です(ただでさえ描画に時間がかかりますので)。
ファイルからデータをもらう際には、必要なデータをすべてメモリへ
読み込んでから使います。
つまり、今回のポイントは…
ファイルからデータを読み込む際には、
ファイルのデータを必要なだけメモリに読み込んでから使う!
…ということになります。
実際にゲームを作る際には次のようにします。
1:プログラムを起動する
2:変数などのオブジェクトを初期化する
3:ファイルからデータをメモリに読み込む ←ここです!
4:ゲームを実行する
5:(中略)
6:ゲームを終了する
ですので、2〜4の間で「 Now Loading ... 」と表示すると
それらしくなるんですね。やってみましょう。
それでは、次回から具体的なファイル読み込みの方法を見ていきます。
自分たちのゲームプログラミングが、さらにひとつ前進した気分に
なれますよ!
今回も最後まで読んでいただきましてありがとうございます。
それでは!
Byerkut.
┌┬───────────────────────────────┬┐
││ 考えようによっては、ためになるコラム ││
││ ││
││ 【ファイル入出力が苦手】 ││
└┴───────────────────────────────┴┘
Byerkut さんは、ファイル入出力を理解していないと書きましたが、
実は、業務系のプログラマとしては珍しくありません。
というのも、普段ファイルからデータを読み込む際には、
データベースを使っているからです。
データベースを使うと、データの整合性や検索するスピードが
大幅に向上するので大変便利なのです。
業務のプログラムで普通にファイルを使うと、たとえば
「ファイルにアクセスしているときに電源が落ちたらどうなるか?」や
「同じファイルに同時に書き込みをしたらデータが壊れないか?」など
いろいろなことに気を遣わなければ鳴りません。
しかし、データベースはこれらのことをソフトウェア側で
やってくれるのです。
もし、ブラウザが Firefox の方は設定ファイルを探してみてください。
実は Firefox の設定ファイルは SQLite といってデータベースなのです。
近年、非業務系のプログラム以外でもデータベースの採用が
増えてきました。そろそろゲームで使ってもいいなぁ、と思っています。
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/20080608200909000.html
■プログラムはソースコードを分散させて大きなソフトを作る
http://archive.mag2.com/0000240151/20080525121425000.html
http://archive.mag2.com/0000240151/20080531212858000.html
■ゲームを作るためには「入力」「出力」「条件分岐」が必要
http://archive.mag2.com/0000240151/20080301221623000.html
■画像ファイルの絵を画面に表示する際にはメモリに読み込む
http://archive.mag2.com/0000240151/20080406202024000.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.


