どり〜むきっず 〜ゲーム制作支援サイト〜
トップ | 初めての方へ | プロフィール | メールマガジン | リンク

同人ゲーム制作支援 | ゲームアルゴリズム勉強法 | C言語入門

今日のみなせけ | インフォプレナー | ゲームプログラム講座

めるまがきっず「ゲームプログラミングで意識すべき基本知識」


////////////////////////////////////////////////////////////////////////////////
//
//         ☆ めるまがきっず ☆
//
//     〜ゲームプログラミングを主とした、ゲーム制作支援メルマガ〜
//
//
// 配信者:
//   早瀬 竜也(たつにい)
//
// 配信日:
//   2008/10/08
//
//
// 第25回 「ゲームプログラミングで意識すべき基本知識」
//




ええっと、前回の配信から一ヶ月近く経ってしまいました。

お待ちしていた方がいらっしゃったなら幸いです。


さて、今回は久々にプログラミング関係のお話です。




■ゲームプログラミングで意識すべき基本知識


今回のお話はゲームプログラムの習得に関することではなく、
ゲームプログラミング時に意識すべき事柄についてです。

もしかしたら読者さんの中には既にゲームプログラムを
組んでいらっしゃる方もいるかもしれませんので、
そんな既に実践していらっしゃる方に対して
特に知っておいてもらいたい事柄となります。


意識すべきところ……それは「時間の流れ」と
「無意識」と「数値」です。




●時間の流れを意識する


MS−DOSのコンソールプログラムとは違い、
ゲームプログラムの殆どはリアルタイムで動いています。

そして、ゲームプログラムとはそのリアルタイムの
1/60秒(ゲームによって違う場合もある)の処理を
コーディングするものとなります。


詳しく言いますと、プログラムが開始したら、初期化処理を行い、
その後、メインループという無限ループに入り、ゲーム機の場合電源が
切られたり、PCゲームの場合ウィンドウを閉じられるまで、
延々とメインループを繰り返し続けます。

そのメインループでは処理の帳尻あわせとしてフレームレート制御
という処理をして、メインループの一回の処理につき、
1/60秒の処理が出来るように調整を行っています。


その1/60秒の間に何を行うのかと言いますと、

・キー入力を受け付けているか判定
・キー入力されているならそれに伴った反応を処理
・タイマーやアニメーションのカウンターをインクリメント
・カウンターを判定してアニメーションのタイミングなら絵の差し替え

などなど、他にもゲームによって様々な処理がなされています。


ところで、1/60秒って、どのくらいの速さなのかご存知ですか?

ほんの一瞬です。人間の知覚スピードでは意識できません。


ですから、メインループのソースコードを上から下へと、
長々と書いたとしても、その処理が一瞬にして
毎回毎回処理されているのです。


さて、ここで普通なら感覚が狂ってしまうのですが、
あなたは今、このメルマガを上から下へと読んでいると思います。

人によって読むスピードは異なるでしょうが、上から下へと
少しずつ読んでいっていると思います。

一つの文節を1秒で読める人もいれば、考えながら読み、
一つの文節に10秒もかけて読む人もいるでしょう。

でも、さすがに1/60秒で一瞬にして読みきり、それを何度も何度も
繰り返している人はいないと思います(むしろ人間技じゃない!)


でもコンピュータはプログラミングをたった1/60秒でも一瞬で
読みきり、その処理をその一瞬で行ってしまうのです!

勿論、ソースや環境によっては、処理落ちすることはありますけどね(笑)


一応、その一瞬の中にも時間の流れはあるのですが、
それは人間の感覚では知覚できないとさきほども言いました。

でも、あなたもゲームをプレイした事があるのならわかるとおり、
ゲームの時間はしっかりと知覚出来ますよね?


それはゲームプログラマーさんがしっかりと時間を意識して
そのゲームのプログラムを作っているからです。


1/60秒の一瞬を1フレームといいます。

この一瞬の処理をゲームの状況によって、刻々と変化させていく様を
プログラミングするのがゲームプログラマーの仕事なのです。


では、時間を意識するということはどういったことでしょうか?

それはコンピュータの処理スピードと人間の知覚スピードの違いを
しっかりと意識して、コンピュータの様々な処理を人間の知覚に
あわせてプログラミングするということになります。

勿論、速ければ速い方が良い処理もあるのですが、
例えば「速撃ちゲーム」なんてものがあったとします。

ルールは1、2、3、4、5と数え、5と数えた瞬間に
振り向き、ボタンを押すことにより銃を撃ち、相手より
速く銃を撃てば勝ち、撃てなければ負けとなります。

勿論、フライングしてしまったら反則負けです。

実際にゲームにしてしまうなら、フライングして敵を
倒した場合、卑怯者のレッテルを貼られて後ろ指を
さされ続けることになり、バッドエンドって感じですかね(笑)

まぁ、そんなバッドエンドは置いておき、このプログラムの場合、
どんなところで時間を意識すれば良いのでしょうか?


まず最初に、1秒から5秒までを数えるタイマーカウントです。

これは1フレームごとにインクリメントするカウンターを使います。

「int timeCnt = 0;」等と変数宣言しておき、
メインループ内に「timeCnt++;」と処理しておきます。

そして、さきほど1フレームは1/60秒と言いました。
裏を返せばtimeCntが60に達すれば1秒ということになります。

そして5秒まで数えます。


次は敵(CPU)の反応速度です。

実は敵はコンピュータなので5秒に達したジャストタイミングで
銃を放つことも余裕で可能です。

ただ、そうしたらコンピュータは無敵となりゲームになりません。

どんなに強い設定の敵だとしても、ある程度の
フレーム数の「遊び」が必要だということです。

まぁアイドルタイムと言いますけどね(変な想像しないように!)

ここで時間を意識しなければなりません。

難易度を甘めにするなら遊びのフレーム数も多めに設定し、
難易度を辛めにするなら遊びのフレーム数を少なめに設定する。

何度も言うように1フレームは1/60秒(まぁゲームによっては
設定が違っている場合もありますが)という、とても短く細かい
感覚なので、ある程度、人間が知覚できる反応速度分の
遊びが必要と理解していただけると幸いです。


また、余談となりますが、ゲームを更に面白くするためには、
この遊びのフレーム数に乱数を用いて、値を不定にすれば、
時の運により、プレイヤーが勝ったり負けたりなどの
不確定要素が混ぜられるので、少しだけ奥が深くなります。




●無意識を意識する


さて、あなたは今、呼吸をしていますよね?

当たり前の話ですね。


では、あなたは今、意識して呼吸をしていますか?

例外はあるかもしれませんが、あなたは
無意識に呼吸をしていることと思います。


「よしっ! 息を吸わなきゃ」
「息を吸ったから今度は吐かなきゃ」


こんなことを呼吸のたびに考える人なんて滅多にいませんよね?

まぁ、泳いでいる最中なら、いるかも知れませんが……。


でも、ゲームプログラムの場合……と、いうよりは
コンピュータプログラムは指示した命令しか実行しません。


例えばキャラが上下左右に動くプログラムを作るとします。


「↑キーを押したら上に動け」
「↓キーを押したら下に動け」
「←キーを押したら左に動け」
「→キーを押したら右に動け」

「キャラが存在するならキャラを表示しろ」


これらの処理をメインループで繰り返せば、
ただ単に上下左右に移動するだけのプログラムは作れます。

でもこれは、本当に「それだけ」のプログラムです。


例えば、このキャラが画面の右端に行ったとしましょう。
でも、画面外に出て欲しくなかったとします。

でも上記の「それだけ」のプログラムでは
残念ながら画面外に飛び出してしまいます。

ライブラリによっては画面外に出た瞬間にバグったり、
何故か左下からキャラが現れたりすることもあるでしょう。


画面外に飛び出さないようにするには、更に画面外に
飛び出さないようにするためのプログラミングを
しっかりと意識しながら組む必要があるのです。


↓文字だけでは実感できない人はコレをダウンロードしてください。
http://dreamkids.sakura.ne.jp/dat/sampleexe.lzh

そして、

・十字キーで自由移動
・移動速度を速くしてみる
・壁の指定と数字表示

のプログラムを実行して実際に動かしてみてください。


↓もしソースに興味がある方は、このページをお読みになってください。
ゲームアルゴリズム勉強用ライブラリ




●数値を意識する


さて、本来ならこの「数値を意識する」事が
最も重要かと思いますが、今回はこのへんで切り上げようと思います。

一度に一気に知識を詰め込むのも大変ですからね(笑)

この話題は次回の為に取っておこうと思います。




追伸:


C言語入門

↑のページ、結構人気があるみたいで、
Googleページランクが既に3になりました。

C言語でプログラミングをはじめたいなら、今すぐにでも
上記URLをクリックしてプログラミングに挑戦してください!




追伸2:


新しいベルトを手に入れました。

両親に相談したら父親より、以前買ったけどあんまり
使っていないベルトをお下がりでもらいました。

ちぎれそうでないベルトはやっぱり良いですね!

何の恥ずかしげも無くつける事が出来ます。


靴は冬用の靴に履き替えました。

しばらくは靴下がグチュグチュになることは無いと思います。

でも、春になるまでにスニーカーを買えるだけの
お金を用意したいところです。

勿論、家に毎月、5〜6万円は入れながら、です。


何故なら、母は僕からお金を受け取るとき、
本当にありがたそうに頭を下げて受け取るからです。

僕は未熟なりにも社会人ですし、当然の事をしているだけですが
それでも深々と頭を下げて「ありがとうございます」と受け取るのです。

先月のメルマガでも書いたとおり、皆さんのおかげで稼げたお金は
ちょっとしたトラブルもありましたが、母親に渡すことが出来ました。

ですから今、ものすごい金欠ですが、
母は何かと僕を気にかけてくれます。

確かに僕はそれなりに無理をしていますし、
気にかけてくれるのはとても嬉しいです。

母は買い物のときに僕が普段使っている軽自動車を
使うことがありますが、そのときにガソリンをつめてくれたり、
僕が仕事で遅くなるときに簡単な弁当を作ってくれたこともありました。

高校生の頃は弁当なんて当たり前のように作ってもらっていましたが、
それは、当たり前のことなんかではなく、わざわざ僕の為に
忙しい中、手間隙をかけて作ってくれている事を実感しました。

もちろんありがたく、米粒一つ残さずに食べました。


僕はこれからも素晴らしい家族に支えられながら、
今度は逆に僕が支えて上げられるように頑張りたいと思います。

もし宜しければ応援のメールを頂けるととても励みになります。

今後ともよろしくお願いいたします!




メールマガジン「めるまがきっず ゲーム制作支援メルマガ」

発行責任者:早瀬 竜也(たつにい)
公式サイト:「どり〜むきっず」 http://dreamkids.sakura.ne.jp/
問い合わせ:hakka17@hotmail.com
発行サイト:「まぐまぐ!」 http://www.mag2.com/
登録・削除:http://www.mag2.com/m/0000254884.html



上記の記事は僕が配信しているメールマガジンのバックナンバーです。

配信は不定期ですが、忘れた頃にゲーム制作に関しての有益な情報を
受け取ることにより、ゲーム制作の潜在的意欲が上がるかもしれませんよ?

登録は無料ですので、興味のある方は下記フォームよりどうそ!

メルマガ登録・解除
 


過去バックナンバー




メニュー






トップ | 初めての方へ | プロフィール | メールマガジン | リンク
Copyright (C) 2008 どり〜むきっず, All Rights Reserved