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

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

解決済みの質問

C++とWIN32APIとゲームプログラミング

WINDOWSで動くゲームを作りたくて3日ほど前からC++の勉強を始めました。
(最終的にはグラディウスのような横スクロールシューティングが作りたいです。)
そこで質問なんですが
1、Win32APIについて調べるとC言語を使っての入門サイトばかりがヒットします。
Win32APIはC言語で書くものなんでしょうか?
そうなってくると今WindowsのGUIアプリを作るのにC++を勉強していますが無駄ってことでしょうか?
例:
猫でもわかるプログラミング
http://www.kumei.ne.jp/c_lang/index.html
Win32API入門
http://wisdom.sakura.ne.jp/system/winapi/win32/index.html
ちなみに今学習に利用しているサイトは以下のサイトです。
C++入門
http://www.asahi-net.or.jp/~yf8k-kbys/newcpp0.html

2、ポインタの概念について
ポインタのイメージですが値を格納している場所みたいな感じで大方あってますでしょうか?
僕は組み込み系をやっているのでアセンブラにどっぷり漬かっています。
なんていうかレジスタの番地がポインタに該当するのかなって思っています。
↓みたいなイメージで考えています。
ポインタ=データの場所=レジスタ番地
これであってますか?

3、まだGUIには進んでませんがウインドウのメニュー(ファイル、編集等)を作るのにリソースファイルも作るって説明が上記ページ(猫でもわかる)に書いてましたがリソーススクリプトとかヘッダーもプログラム言語とは別に勉強する必要があるんでしょうか?

4、C++のクラス概念について
クラスとは複数の関数をひとまとめにしてグループ管理(おおざっぱに言うとサブルーチンの集まり的な)するようなものってイメージであってますか?

5、WindowのGUIアプリのプログラムの概要ですが各オブジェクト(ウインドウやボタン、マウスポインタ等)に対して「クリックされた」とかのアクションに対して動作するプログラムを書くって事でいいんでしょうか?

6、お勧めの参考書籍について
今までアセンブラをはじめPerlやJavaScript、C言語のお勧め入門書をいろんなサイトのレビューを見て買いましたが本よりネットの入門サイトのほうがかなり役にたってきました。それでも入門書を買うのは気持ち的に安心するからなんですが・・・
それを踏まえた上で僕の最終的な目的にあうような本があったら是非教えてください。

7、勉強の進め方や「合わせてこれも勉強しろ」っていう項目があれば教えてください。
現状としては
「C++の基礎(必要ですか?)」→「Win32API」→「DirectX」で行こうと思っています。

投稿日時 - 2010-02-14 16:55:17

QNo.5676144

困ってます

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

>言語の中にAPI関数を記述しその機能を呼び出してるんですよね?
>OSの機能を使うための関数がAPIみたいな?

ざっくり言うとその通りです。
ウィンドウ制御などOSの機能を使うための関数がWindowsAPIです。

>ポインタについてですがポインタ自体はわかりましたが(参考ページは読ませてもらいました。)
>利便性がいまいち理解できてません。たとえば文字列で何文字目の
文字だけ取り出すとかだと使えそうですがポインタのポインタとか
さらにそのポインタとかこんなややこしいことしたら自分がこんがらがってしまいそうです。

使わないで済むなら、それが一番かも知れません。C++なら参照渡しができますし、stringクラスで文字列も扱えます。
ただ、文字列の処理はchar型の配列であることから逃れらない部分がありますので、そのうち使わざるおえない事があると思います。ポインタと実体は違うものだと意識していないとクラステンプレート等を使うときにぜったい間違いをしでかしますんで覚えておいてください。

>「4」でいいんでしょうか?
正解です!
私は最初1バイト足すんだと勘違いしました。
アセンブラのインクリメントとは違うんですよね。

>お勧めいただいたC++の本ですが本屋さんで実際に見て厚さにビビってしまい「ゲーム作りで学ぶ!実践的C言語プログラミング」だけ買ってきました。せっかく進めてくれたのにすみません。

C++をちゃんと勉強するためには、あのぐらいの厚さがどうしても必要です。今は不十分な理解のままでも良いので、ゲームを作ることでプログラミングに慣れる事を優先してください。
でも、将来的には購入を考えてくださいね。薄い本では、どうしてもモノ足らないんです。

サイトの紹介をしていなかったんで紹介しておきますね。
猫でもわかるプログラミング
http://homepage2.nifty.com/c_lang/
C++入門
http://www5c.biglobe.ne.jp/~ecb/cpp/cpp00.html
ロベールのC++教室
http://www7b.biglobe.ne.jp/~robe/cpphtml/index.html

C++のオブジェクト指向をやっていくうちに、デザインパターンと言うものに出会うと思いますが、たぶん薄い本の知識だけでは、これを読むことは難しいと思います。
「C++で読むデザインパターン」
http://www.01-tec.com/document/cpp_design_pattern.html
今は読めなくて良いので、こういう物がある&プロは知っていないと話にならないってことだけ理解しておいてください。

投稿日時 - 2010-03-28 18:20:52

お礼

>ただ、文字列の処理はchar型の・・・
しっかり覚えておきます。

>宿題の件
正解するとうれしいですね(^^)
入門書で解説を読んだとき「インクリメントなのに4増えるの?」
って思いました。

C++の本ですがゲーム入門を一冊終わらせたら購入してみます。
やるからにはしっかり覚えたいですからね。
ま参考リンクありがとうございます。
入門書サイトも複数読むと理解が深まる事を実感しました。
(ロベールのC++教室は絶対読んどきます)

いつも丁寧なご回答感謝いたします。
できる限り自分で乗り越えたいですが、また質問させていただくかもしれません。
その時はどうかよろしくお願いしますm(_)m
ありがとうございました☆

投稿日時 - 2010-03-28 22:20:05

ANo.6

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

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

回答(6)

ANo.5

1)
WindowsのGUIプログラミングもC++だったり、C言語だったり、C#、VBと色々です。どの言語を選択するのかは趣味のレベルの話です(出来上がったものの性能差はあるでしょうが)。
また、他の方も言われていますが、C++はC言語をほぼ内包していますので、C++の勉強が無駄になることはないかと思います。
ですが逆に、C言語は基礎でC++は拡張、と言えなくともない部分がありますので、一度C言語でプログラムの勉強をした方が良いかもしれません。
C言語の段階で、C言語の基本構文や、ポインタ、構造体、列挙子などを学ぶことができます。他にも色々ありますが、殆どがそのままC++でも使用することができます。
C言語の基礎ができた時点で、C++の勉強として、構造体の機能を拡張する気分で、メンバ関数を入れてみて構造体をクラスにしてみる・・・といった手順でC++に移行するとすんなりいけるんじゃないかな?と思います。(厳密には構造体≠クラスですが、最初は構造体≒クラス程度の認識で良いかと)

6)
厚さ2cm前後のC言語の入門書(それ以上の厚さだとダレてしまう)を10回ほど繰り返し読むことをオススメします。(回数は適当です)分からないなりに何回も読み返しているうちに分かってくる場合もありますので。

7)
Win32APIや、DirectXをいちから勉強するのは結構苦労するかと思います。それらを簡単に使えるようにしてくれている人様のライブラリなどを使ってゲームプログラミング自体の勉強に特化させたほうが良いかもですね。(Win32APIや、DirectXを直接扱うのはその後でも十分かと。)

ゲームを作りたいのであれば、DXライブラリなど如何でしょうか?
自分は使ったことはありませんが、シンプルな作りになっているようですし、サンプルも基本的なものは揃っているようです。

プログラミングの勉強初期は習うより慣れろ感が強いと個人的には思っていますので、人様のプログラムを多用し、書き写し、ひとつでも多くのプログラムを作成したほうがよいと思いますよ。

参考URL:http://homepage2.nifty.com/natupaji/DxLib/

投稿日時 - 2010-03-09 03:26:46

お礼

お礼、大変遅くなってしまいすみませんm(_ _)m
おっしゃられてるようにCも勉強することにしました。
理解に苦しむ部分も多々ありますが何度か読み直してるうちに
「なるほど!」となる部分がありました。
入門書のすべてを完全に理解できてるわけではありませんが
考え込みまくってそれでも理解できない部分は「こんな機能もあるんだ」って頭の隅に置いといて色々試してみる感じで進てます。
とりあえずゲームを作りたいのでお勧めのDXライブラリに進んでみたいと思っています。
ありがとうございます。頑張って勉強してみます☆

投稿日時 - 2010-03-28 18:04:31

ANo.4

4
私の場合ですが、1キャラ1クラスという感じで組んでますね。
class Chara{
public:
 int x,y; //表示位置、座標{x,y}
 Picture pic; //Pictureは画像データを保持しておく自前で作ったクラス
}
void main(){
 Chara a[100]; //キャラ100体生成
 a[0].pic.GetPicture("b.jpg"); //絵を指定して
 a[0].pic.Show(); //これで表示
}
という感じで、後はこのaを弄ってそれぞれのキャラを動かす感じです。キャラは自機かもしれないし、敵かもしれないし、弾かもしれません。

クラスは継承とそれに関係する機能が分かってくると、その必要性と便利さが理解出来てくると思います。
(これを読んで「やっぱりね」と思うか「想像と全然違う」と思うかは分かりませんが、少しでも参考になれば幸いです)

投稿日時 - 2010-02-16 06:29:31

お礼

お礼、大変遅くなってしまいすみませんm(_ _)m
クラスですがサクサク使いこなせるようになったらとっても便利なんだろうなっていうのはイメージつくようになりました。
一つ作っておけば同じものをたくさん作れるし個別にパラメータを管理できるし・・・etc
早く慣れたいです!
ありがとうございます。頑張って勉強してみます☆

投稿日時 - 2010-03-28 17:51:49

ANo.3

zwi

>1、Win32APIはC言語で書くものなんでしょうか?
より正確に言うとC言語でも書けるって処でしょうか。
C++で書く分には何の問題もありません。
それに、C++はC言語の仕様も内包しているのでC言語のコードを参考にしたり、そのまま使うことも出来ます。
DirectXを将来的に使うことを考えておられるなら、C++で実装されているDirectXを使うにはC++の方が向いています。


>2、ポインタの概念について
ベースレジスタとかインデックスレジスタに入れる値を保持しているDSって感じでしょうか。
擬似アセンブラでポインタを説明しているこのサイトならわかり易いんじゃないかと思います。
http://www.nurs.or.jp/~sug/soft/tora/index.htm
私もアセンブラからCに入ったので、ポインタは理解しやすかったのですが混乱したのは次の一点だけです。

int *ptr;
ptr = NULL;
printf( "%p", ptr+1 );
これの答えはなんでしょう?
たぶん間違うと思います。

>3、まだGUIには進んでませんがウインドウのメニュー(ファイル、編集等)を作るのにリソースファイルも作るって説明が上記ページ(猫でもわかる)に書いてましたがリソーススクリプトとかヘッダーもプログラム言語とは別に勉強する必要があるんでしょうか?

そんなに難しくないです。
単なるちょっとしたデータです。
リソースを作るフリーソフトも存在します。

>4、C++のクラス概念について
>クラスとは複数の関数をひとまとめにしてグループ管理(おおざっぱに言うとサブルーチンの集まり的な)するようなものってイメージであってますか?
そう考えて使うと手続き型言語であるC言語の使い方の域を出られません。オブジェクト指向に関しては別の勉強をされた方が良いでしょう。

>5、WindowのGUIアプリのプログラムの概要ですが各オブジェクト(ウインドウやボタン、マウスポインタ等)に対して「クリックされた」とかのアクションに対して動作するプログラムを書くって事でいいんでしょうか?
アプリは、そんな感じです。
ゲームは、cyacya2000さんの解説されているとおりです。

>6、お勧めの参考書籍について
C++なら、「ロベールのC++入門」とか「明解C++」とか。

>7、勉強の進め方や「合わせてこれも勉強しろ」っていう項目があれば教えてください。
直接DirectXまで進むと大変なので、DXライブラリをお薦めします。
2DのゲームならDirectXよりも遥かに簡単に作ることが出来ます。
ちなみにDXライブラリの中身はDirectXです。C++じゃなくてC言語で作成出来ます。C++で作っている人もいます。

「DXライブラリ置き場 HOME」http://homepage2.nifty.com/natupaji/DxLib/
「ゲームプログラミングの館」http://dixq.net/g/
「ゲーム作りで学ぶ!実践的C言語プログラミング」http://karetta.jp/book-cover/game-programming

参考になれば幸いです。

投稿日時 - 2010-02-14 19:01:03

お礼

お礼、大変遅くなってしまいすみませんm(_ _)m
zwiさん、以前も別の質問でご回答くださってますね。感謝します。
Win32Apiがなんとなくわかった気がします(その気になってるだけですが・・・)
言語の中にAPI関数を記述しその機能を呼び出してるんですよね?
OSの機能を使うための関数がAPIみたいな?
まだこのレベルです・・・

ポインタについてですがポインタ自体はわかりましたが
(参考ページは読ませてもらいました。)
利便性がいまいち理解できてません。たとえば文字列で何文字目の
文字だけ取り出すとかだと使えそうですがポインタのポインタとか
さらにそのポインタとかこんなややこしいことしたら自分がこんがらがってしまいそうです。

↓宿題ですが答えを先に見るのが嫌なのでまだ試してませんが
int *ptr;  
→int型のポインタptrを作成

ptr = NULL; 
→ptrにNULLを代入→NULLポインタ=0になる

printf( "%p", ptr+1 ); 
→int型ptrに1を足してptrの番地(表現が正しいかわかりませんが)を出力

で結果ですが
「4」でいいんでしょうか?

お勧めいただいたC++の本ですが本屋さんで実際に見て厚さにビビってしまい「ゲーム作りで学ぶ!実践的C言語プログラミング」だけ買ってきました。せっかく進めてくれたのにすみません。
お勧めページですが参考にさせていただきます。

ありがとうございます。頑張って勉強してみます☆

投稿日時 - 2010-03-28 17:40:03

ANo.2

#1です。追加です。シューティングゲームを作るなら
 「シューティングゲームアルゴリズムマニアックス」と言う本も役立ちます。

投稿日時 - 2010-02-14 18:17:57

お礼

もう少し先に進んだら見させてもらいます。
ありがとうございます☆

投稿日時 - 2010-03-28 18:06:52

ANo.1

>Win32APIはC言語で書くものなんでしょうか?
そんなことはありません。他の言語からでもAPIを使用することができます。

>C++を勉強していますが無駄ってことでしょうか?
ゲームを作るのであれば、最終的にはC++を使用できた方がいいです。ですから無駄にはなりません。ただ、C言語を勉強してからC++に入った方が良いかもしれません(この辺りは好みの問題かも知れませんが)。

>ポインタの概念について
 簡単にいってしまえば、ポインタとはアドレスを入れておく入れ物です。アセンブラでいえば、ベースレジスタに近い使い方をします。

>リソーススクリプトとかヘッダーもプログラム言語とは別に勉強する必要があるんでしょうか?
 ここで言うヘッダーの意味が良くわかりませんが、リソーススクリプトは勉強した方が良いでしょう。

>C++のクラス概念について
 概念はおおよそあっていますが、クラスは非常に奥深いものですから、簡単には説明しかねます。オブジェクト指向言語(C++)を使用しても、中身は手続き型では意味がありませんので、オブジェクト指向を用いた設計方法を勉強すると良いと思います。GOF(ぐぐってください)が役に立ちます。

>WindowのGUIアプリのプログラムの概要ですが各オブジェクト(ウインドウやボタン、マウスポインタ等)に対して「クリックされた」とかのアクションに対して動作するプログラムを書くって事でいいんでしょうか?
 コールバック関数で全て行う(メッセージが送られてきたら行う)と言う意味でしょうか? もしそうだとすると、ゲームには不適です。
 ゲームの場合、自分でループを作成し、その中で、キーボードチェック、当たり判定、描画処理などを行っていきます。イメージは

while(1){
if(終了) break;
フレームレート処理
 キー判定処理
 当たり判定処理
  :
 描画処理
}
です。

>お勧めの参考書籍について
14歳からはじめるC言語わくわくゲームプログラミング教室Visual Studio 2008編―Windows XP/Vista対応(初心者向き)
猫でもわかるゲームプログラミング(初心者向き)
Windowsゲームプログラミング(初心者向き)
ゲームプログラマになる前に覚えておきたい技術(中級者以上)
ゲーム制作者になるための3Dグラフィックス技術(中級者以上、3Dをやるなら)

>勉強の進め方や「合わせてこれも勉強しろ」っていう項目があれば教えてください。
 3Dになると、数学が必須です。2Dでも作りこむためには三角関数、ベクトル、行列程度は知っておいて損は無いと思います。
「ゲーム開発のための数学・物理学入門」などの本が参考になると思います。 

投稿日時 - 2010-02-14 18:15:25

お礼

お礼、大変遅くなってしまいすみませんm(_ _)m
質問をさせていただいてから連日ちょっとずつ勉強していてCとC++の入門書を2冊づつ終わらせました。
うわっ!この機能便利じゃん!って思うところもあれば
この機能いつ使うの?って思ったり理解が困難な部分もありますが
少しずつ進行している感じです。
C++のクラスに関してですが、いろんなオブジェクトの共通となる基礎を作り派生クラスでそれぞれの違った機能を搭載させる。
これってゲームにもってこいの機能って感じですね。
僕はゲームが作りたくて勉強を始めたのでむしろそれ以外の使い方が想像つきませんが・・・。
似通った物を使うプログラムには向いてるのかな?って感じです。
>14歳からはじめるC言語わくわくゲームプログラミング
CとC++の両方とも買ってきました。やっとこれからとりかかります。

ありがとうございます。頑張って勉強してみます☆

投稿日時 - 2010-03-28 17:10:57

あなたにオススメの質問