みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ゲームプログラミング学習法

将来ゲームプログラマーを志望する大学生です。
ゲーム製作を行ってみたいんですが、
何から手をつけていいのかわかりません。
もう少し具体的にいうと、ゲームがどのような仕組みで動いているのかも、もうひとつわかっていません。

そこで、ゲーム製作経験者の方にお聞きしたいのですが、
皆さんは最初にどのようにゲーム製作を始めたでしょうか?
入門書を調べても、なかなか勉強しようと思うものが決定できません。
書籍名などを一言載せて頂くだけでも十分なので、よろしくお願いします。

ちなみに、C, Perlを習得済、Win32はとりあえず勉強済(入門書1冊読破)、C++, DirectXを勉強中です。
そういった言語を利用して、ゲームプログラミングを行いたいです。

投稿日時 - 2007-05-23 04:00:16

QNo.3022893

困ってます

質問者が選んだベストアンサー

>DirectXのところの話のようにコードをみて勉強するのが良いのかなとは思いました。

SDKのサンプルコードはDirectXの開発関係者が書いているわけで
ある意味バイブル的なものなのです。いわば教科書みたいなもんです。
(もちろんサンプルコードにバグが入っている場合もあります。)

他人のソースをみて勉強するのもいいですが
最初はやはりSDKについてくるサンプルコードをみることをお勧めします。
何故ならソースには癖があり、最初はそのコードをまねるわけですから
その事により予期せぬ落とし穴にはまる事があります。
SDKについてくるサンプルコードも、コードの書き方自体には癖が
ありますがDirectXを使用する部分に関してはそれにならった方が良いです。
先ほどの回答でPeekMessageでメッセージループを回すと書きましたが
PeekMessageを使わなくてもDirectXでの描画は可能です。
ただSDKのサンプルプログラムはそうしているので、それに習って書いておいた方が
無難だと思うからです。
SDKのサンプルコードが教科書なら他の人のコードは参考書といったところです。

ちなみにSDKのサンプルコードは描画関係だけでも30個ほどあるので
最初に学習するには十分すぎる量です。(全部みる必要は無いです。)
Tutorialや入力関連、サウンド関連を含めると更にあります。
DirectXを学習するにあたり、最初はTutorialという名前のフォルダ以下にある
サンプルコードを見ると良いと思います。
そのほとんどはコメントや改行を含めて200行に満たないコードです。

ゲームそのもののコードを見てもDirectX自体を勉強する意味では
逆にそのコードが邪魔になると思います。
前述の内容と被りますが、キャラクタを表示させて、それをキーボードからの入力によって
移動させる事ができれば、シューティングゲームを作る事ができるでしょう。
あたり判定の高速化とか、AIの最適化等はその後に学習すれば良いのです。

※最新のSDK(April 2007)はDirectX9以外にも10のサンプルコードもはいっているので
注意してください。フォルダの名前を見ればわかると思います。
これから学習するなら10からでも良いとは思いますがOSがVistaでないと動きません。
ただ情報量から考えると今は9の方がお勧めですね。

投稿日時 - 2007-05-23 19:27:56

お礼

回答有難う御座います。
>他人のソースをみて勉強するのもいいですが
これは、ゲーム特有のループ部分を参考にしたいと思って、
それに関連する書籍を買うよりソースを見る方がタダだし良いかなと思ったんです。
>ただSDKのサンプルプログラムはそうしているので
もしかして、DirectXのサンプルコードにそういった部分の参考になるものがあるという事でしょうか? 汗
先程無事にDirectXのインストールが完了し、サンプルコードを見つけたので、
何個か見てみて、PeekMessageの扱いを確認してみようかなと思ってます。
(C++の学習がまだなので少し早いですが、これくらいの長さのコードなら気軽に読めますね。)
>前述の内容と被りますが、キャラクタを表示させて、それをキーボードからの入力によって
そういった考え方をすると、凄く気持ちが楽になりますね。
初めに作るべきものがはっきりして助かりました。

とりあえず、自分が学習しようと思う範囲の入門部分を固められたと思うので、
ゲームを作っていきながら、色々な技術を勉強して行こうと思います。
有難う御座いました。

投稿日時 - 2007-05-24 10:29:05

このQ&Aは役に立ちましたか?

7人が「このQ&Aが役に立った」と投票しています

回答(6)

ANo.6

★回答者 No.2、No.4 です。
・PeekMessage() キーワードが出ましたので参考になりそうなページを2つ紹介します。
 (1)http://codezine.jp/a/article/aid/207.aspx→『落ち物ゲームの作り方 第1回:「TETRA」編』
 (2)http://codezine.jp/a/article/aid/297.aspx→『本格的なシューティングゲームを実現するタスクシステム』
 (1)の下の方に『ゲームのメッセージループ』と『メッセージが無い時の処理』が参考になるかな。
・以上。

参考URL:http://codezine.jp/a/default.aspx?cid=146

投稿日時 - 2007-05-24 22:34:35

お礼

たびたび有難う御座います。
(自分としては、PeekMessage()はてっきりDirectXの方の仕様だと思ってました。)
メッセージループの説明もあるようなので、一度じっくり読んで、
小さなプログラムを試しで作るときの参考にしようと思います。
あと、ここのサイトも知らなかったので、こういうサイトを紹介して頂いたことも感謝です。w
色々なゲームプログラムをみて驚いたのは、思ったよりゲーム製作が平易な言語で行われていることです。
(もっと難しいものだと思っていました)
なんでも始めてみるものですね。w

投稿日時 - 2007-05-25 08:40:01

ANo.4

★回答者 No.2 です。
・ジャンルは、シューティング・ゲームですか。
 それなら、次の本も参考になりますかね。
 (1)http://www.amazon.co.jp/dp/4797327316/→『シューティングゲームアルゴリズムマニアックス』
 (2)http://www.amazon.co.jp/dp/4797337214/→『シューティングゲーム プログラミング』
 ↑私は(1)を持っています。この本はシューティング・ゲームを作るうえでの細かい弾、自機、敵機、
 背景、システムなどのアルゴリズムを解説しています。CD-ROM も付いていて『デモ・プログラム』が
 入っています。この『デモ』を見るだけでも作る意欲が沸きますし、量も多いので見るだけでも時間が
 かかります。ただし、ゲーム全体の作成法に関しては特に書かれていない。つまり、細かい部分の技術
 に焦点を当てているようです。
・↑の(2)は持っていませんが、ゲーム全体の作成法を学べそうです。
 こちらは以前、お気に入りにチェックしていた本です。いずれ買おうかなっと思ってね。
 本屋でリサーチなどをしてみて下さい。
・あとゲーム・ループが大事になってきます。
 次のサイトも参考になると思いますので。どうぞ。
 http://www.c3.club.kyutech.ac.jp/gamewiki/→『ゲームプログラミングWiki』
 ↑『ゲーム特化』の『シューティング』項目や『グラフィックス』項目が参考になります。
・昔、買った本にたくさんのゲーム・アルゴリズムが書かれた本がありました。
 今は『改訂第2版』が買えるようです。私は改定前のバージョンを持っています。内容的には多分おんなじかな?
 http://www.amazon.co.jp/dp/4797316535/→『ゲームプログラミング遊びのレシピ―アルゴリズムとデータ構造』
 ↑この本は、いろいろのゲーム・ジャンルのちょっとしたアルゴリズムを知るには
 便利な本と思います。でも、1つのジャンルに詳しく書かれていないので本屋で
 ペラペラって見る程度が一番良いのかもしれない。C++、Delphi 言語で書かれていた。
 CD-ROM もあってソースも付属はしているが、DirectX については触れていなかった。
・以上。参考情報でした。

参考URL:http://www.c3.club.kyutech.ac.jp/gamewiki/

投稿日時 - 2007-05-23 18:24:44

お礼

度々有難う御座います。助かります。
シューティングゲーム関連の書籍は、ひとまずゲームプログラミングに慣れてからのようですね。
(まだC++でさえろくに習得していませんし。汗)
ですが本を実際に読み込まれた経験者の方の意見は参考になるので助かります。
>『ゲームプログラミングWiki』
こちらのサイトは初心者を対象に書かれているようですし、かなり良さそうですね。
ゲームループについてが一番知りたかったので、すぐに読んでみようと思います。
とりあえず、ゲームプログラミングについては紹介して頂いたサイトで勉強して、
実際に作っていく中で身につけていこうと思います。
有難う御座いました。

投稿日時 - 2007-05-23 19:20:40

ANo.3

ゲームメーカーに勤めているものです。

>DirectXを勉強中です。
DirectX SDKの中にサンプルプログラムがはいっています。
サンプルコードはC/C++とWin32の知識があれば読めます。
最初はTutorialと書いてあるコードを読んでください。
(これはCとWin32のみで書かれており分かりやすいです。)
またDirectX SDK(最新版 April 2007)を利用する為には
Visual C++ 2003以降が必要です。もし持っていないのなら
Visual C++ 2005 Express Editionが無料でダウンロードできます。

この手の質問は既に何回か回答していますので、
過去ログも調べてください。

>そこで、ゲーム製作経験者の方にお聞きしたいのですが、
>皆さんは最初にどのようにゲーム製作を始めたでしょうか?
私自身ゲームが作りたくて、プログラムを始めました。
大学のときに、Visual C++を購入しましたがその時は挫折しましたね。
その後、VBが簡単だったのでそれを学習して
C→Win32(Visual C++)→C++→DirectXという順序で学習していきました。

>ゲームがどのような仕組みで動いているのかも、もうひとつわかっていません。
ゲームプログラミングの方法ですが、そのほとんどは描画周りの
プログラミングがウェイトを占めています。
(逆に描画方法がわかれば、なにかしらのゲームは作れるでしょう。)
ただ、この描画周りはプラットフォームに依存します。
例えばWin32で描画プログラムを書くなら
WM_PAINTが呼ばれるタイミングで描画しますが、
DirectXやゲーム機などのプログラムはメインループの中で描画し続けます。
イメージ的には

while(true){
描画();
sleep(1);
}※あくまでイメージ
こんな感じです。

DirectXの場合でもWindows上で動いている事はかわりないわけで、
サンプルコードをみれば分かりますが
PeekMessageでメッセージループをまわし、ウインドウメッセージがないときに
描画するといったようなコードになっています。

ちなみに昔のゲーム機はフレームレートが固定でしたが最近のゲーム機や
Windowsは可変です。特にWindowsの場合は機種毎に性能差があるし
ゲーム機も色々な解像度に対応したりマルチコア化が進んだため
わざわざVSynk(垂直同期)を待つことなく描画ルーチンがループし続けるようになっています。
DirectXでプログラムする場合も、1fpsだろうが60fpsだろうが、違和感なく
動作するように工夫する事です。(具体的には時間を見ます。)

DirectXのプログラムの学習についてですが
ひたすらサンプルコードをみるだけです。もしサンプルコードが理解できないとするなら
それはC/C++とWin32の基礎がしっかりしていない可能性があります。
またDirectX自体はcomなので、comについても多少知っておくと良いでしょう。
(ただしcom自体は廃れてきているのと難しい為、ほどほどに・・・)
DirectX関連のお勧めの書籍としては工学社の実践プログラミングシリーズですかね。
「DirectX9実践プログラミング」 ISBN-13: 978-4875934998

DirectX SDKダウンロード先
http://www.microsoft.com/japan/msdn/directx/downloads.aspx

Visual C++ 2005 Express Editionダウンロード先
http://www.microsoft.com/japan/msdn/vstudio

投稿日時 - 2007-05-23 12:55:14

お礼

丁寧な書き込みありがとうございます。
>Visual C++ 2003以降が必要です。もし持っていないのなら
VC++はWin32を学習する際にExpressをインストールしました。お気遣い感謝します。
>ゲームプログラミングの方法ですが、そのほとんどは描画周りのプログラミングがウェイトを占めています。
この辺の話が分からなくて質問させて頂いたんですが、DirectXのところの話のようにコードをみて勉強するのが良いのかなとは思いました。
No.2の方の書き込みにあるようなネット上で公開されているコードを読んで、勉強するのが良いかなと考えています。
>DirectXのプログラムの学習についてですがひたすらサンプルコードをみるだけです。
そういう勉強方法もあったんですね。
自分が自学をするときはいつも講義本のようなものを読んで勉強していたので、少し意外でした。
(前後して申し訳ないですが、)DirectXにサンプルコードがついているという話も知らなかったので、とりあえずインストールして見てみようと思います。
あと、実はDirectXの書籍については、勇み足で既に注文してしまったのですが、
Amazonの書き込みを見ていると、こちらの方が入門書色が強いみたいですね。
購入したものが難しいと感じたときに重宝しそうです。
有難う御座いました。

投稿日時 - 2007-05-23 16:46:41

ANo.2

★回答
>ゲーム製作を行ってみたいんですが、
>何から手をつけていいのかわかりません。
・ゲームのジャンルは何でしょうか?→シューティング、RPG、パズル系、どれ?
>もう少し具体的にいうと、ゲームがどのような仕組みで動いているのかも、もうひとつわかっていません。
・ゲームのジャンルにより異なります。→ジャンルを最初にはっきりと決めて下さい。
>そこで、ゲーム製作経験者の方にお聞きしたいのですが、
>皆さんは最初にどのようにゲーム製作を始めたでしょうか?
・パソコンを始めた 19 歳の時に RPG ゲームを作りました。ただし、プログラミング言語ではなくて
 バッチファイル(51個)を組み合わせて作りました。今思うとよくバッチファイルで作ったな。って思う。
・ちなみに C 言語で最初に作ったゲームはシューティングの『インベーダー・ゲーム』です。
 でも、MS-DOS の時代ですので Windows 上ではもう動きません。ソースファイルはありますが、
 コンパイルしても動きません。当然です。MS-DOS はシングルタスクですので。また、PC-98 の
 T-VRAM、G-VRAM を直接制御しているため全面的に書き直す必要があるか、作り直す必要があります。
>書籍名などを一言載せて頂くだけでも十分なので、よろしくお願いします。
 ↑ゲームのジャンルを特定してくれないと紹介しきれません。といいながらも紹介します。
・基本的に画像の描画やゲーム・アルゴリズムの本を探しているのですよね。
 http://www.amazon.co.jp/dp/4875934289/→『リバーシのアルゴリズム C++&Java対応―「探索アルゴリズム」「評価関数」の設計と実装』
 http://www.amazon.co.jp/dp/4777511103/→『コンピュータ将棋のアルゴリズム―最強アルゴリズムの探求とプログラミング』
 http://www.amazon.co.jp/dp/4873112168/→『ゲーム開発者のためのAI入門』
・私が持っている本で買ってよかった、または参考になった本を紹介します。
 http://www.amazon.co.jp/dp/4797325453/→『Windowsゲームプログラミング』
 http://www.amazon.co.jp/dp/4797331976/→『ゲームエンジンプログラミング GAME DEVELOPER』
 http://www.amazon.co.jp/dp/4797328479/→『オンラインゲームプログラミング』
 http://www.amazon.co.jp/dp/4797328460/→『MMORPGゲームサーバープログラミング』
>ちなみに、C, Perlを習得済、Win32はとりあえず勉強済(入門書1冊読破)、C++, DirectXを勉強中です。
>そういった言語を利用して、ゲームプログラミングを行いたいです。
・下の本も参考にどうぞ。
 http://www.amazon.co.jp/dp/4797329807/→『DirectXゲームグラフィックスプログラミング』

サイト紹介:
・紹介1
 http://www.sm.rim.or.jp/~shishido/rpgp.html→『プロトタイプRPG』
・紹介2
 (1)簡単ノベルゲームクリエイター
 (2)ルービックキューブ
 (3)とことんぷよぷよ
 (4)SPACE TETRIS
 (5)BIG BOSS
 (6)Go!Go!五目並べ vs human
 (7)THE invader game 2003
 http://www13.plala.or.jp/kymats/program/program_game.html→『プログラム作品(ゲーム)』
・紹介3
 (1)Visual C++ を使ってオセロを作ろう
 (2)Visual C++ でルービックキューブを作ろう
 (3)3Dテトリスの紹介
 http://www.geocities.co.jp/SiliconValley-Bay/4543/index.html→『プログラミング ティー ショップ』

最後に:
・ネットで検索するとゲーム作成のサイトが多数見つかります。
 土・日曜日などで1日中・検索しまくれば結構見つかります。
 上で紹介したものは、お気に入りに入れてあったサイトです。
・過去質問を紹介。
 http://oshiete1.goo.ne.jp/qa2650823.html→『ドラクエ4の戦闘のAIが知りたい』
 http://oshiete1.goo.ne.jp/qa2643858.html→『RPGで誰が攻撃を受けるのかを決めたい』
 このQ&Aの検索システムで過去の質問を検索すると、朗報のような回答が発見できるかもしれません。
・以上。今後の参考に。どうぞ。

参考URL:http://www13.plala.or.jp/kymats/program/program_game.html

投稿日時 - 2007-05-23 08:16:35

お礼

つたない質問ながらもとても詳しい答えを頂き、
大変な感謝とともにうれしい限りです。有難う御座いました。
>・ゲームのジャンルは何でしょうか?
一応とりあえずはシューティングを考えています。
本当はアクションが作ってみたいんですが難しいように思うので。
自分もインベーダーゲームみたいなのから作れれば良いかなと思ってます。
>・私が持っている本で買ってよかった、または参考になった本を紹介します。
この辺りから1冊選んでみようかな思います。
ちなみにDirectXの本は届き待ちだったので、推薦して頂いて嬉しかったです。w
>このQ&Aの検索システムで過去の質問を検索すると、朗報のような回答が発見できるかもしれません。
質問する前に検索してみたのですが、あまり得たい回答が得られなかったので、重複になる部分があると思いつつも質問させて頂きました。

投稿日時 - 2007-05-23 11:46:28

ANo.1

「14歳からはじめるC言語わくわくゲームプログラミング教室」
「14歳からはじめるC++わくわくゲームプログラミング教室」
「ロールプレイングゲームプログラミング 2nd Edition」
「アドベンチャーゲームプログラミング」

投稿日時 - 2007-05-23 05:27:55

お礼

回答有難う御座いました。参考にさせて頂きます。
ちなみに「14歳からはじめるC++わくわくゲームプログラミング教室」が一番良いかなと思いました。

投稿日時 - 2007-05-23 11:49:06

あなたにオススメの質問