• ベストアンサー
  • 困ってます

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」で行こうと思っています。

共感・応援の気持ちを伝えよう!

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

  • ベストアンサー
  • 回答No.6
  • zwi
  • ベストアンサー率56% (730/1282)

>言語の中に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 今は読めなくて良いので、こういう物がある&プロは知っていないと話にならないってことだけ理解しておいてください。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

>ただ、文字列の処理はchar型の・・・ しっかり覚えておきます。 >宿題の件 正解するとうれしいですね(^^) 入門書で解説を読んだとき「インクリメントなのに4増えるの?」 って思いました。 C++の本ですがゲーム入門を一冊終わらせたら購入してみます。 やるからにはしっかり覚えたいですからね。 ま参考リンクありがとうございます。 入門書サイトも複数読むと理解が深まる事を実感しました。 (ロベールのC++教室は絶対読んどきます) いつも丁寧なご回答感謝いたします。 できる限り自分で乗り越えたいですが、また質問させていただくかもしれません。 その時はどうかよろしくお願いしますm(_)m ありがとうございました☆

その他の回答 (5)

  • 回答No.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/

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

  • 回答No.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を弄ってそれぞれのキャラを動かす感じです。キャラは自機かもしれないし、敵かもしれないし、弾かもしれません。 クラスは継承とそれに関係する機能が分かってくると、その必要性と便利さが理解出来てくると思います。 (これを読んで「やっぱりね」と思うか「想像と全然違う」と思うかは分かりませんが、少しでも参考になれば幸いです)

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

  • 回答No.3
  • zwi
  • ベストアンサー率56% (730/1282)

>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 参考になれば幸いです。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

お礼、大変遅くなってしまいすみません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言語プログラミング」だけ買ってきました。せっかく進めてくれたのにすみません。 お勧めページですが参考にさせていただきます。 ありがとうございます。頑張って勉強してみます☆

  • 回答No.2

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

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

  • 回答No.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でも作りこむためには三角関数、ベクトル、行列程度は知っておいて損は無いと思います。 「ゲーム開発のための数学・物理学入門」などの本が参考になると思います。 

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

関連するQ&A

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

    ■C言語とWin32APIでしばらくコーテイングしていましたが、 最近、C++言語を始めた者です。 ■勉強の為、C++とWin32APIで書かれゲームプログラムを探しています。 ■DirectXなどは使用してない物を希望します。 適当なHP(教材)を教えて下さい。

  • VC++でwin32APIを作っているのですが・・・

    こんにちは。私はwin32APIを勉強しているc言語初心者です。 私はMicrosoft Visual C++ 2008を使ってc言語のwin32APIをプログラミングしているのですが、独学でやっているので物凄く邪道なwin32APIプログラミングをしているような気がするのです。 ・c言語のプログラムを書いて、C++のwin32APIプロジェクトとしてビルドする。 ・ヘッダーファイルにwin32API関数がなかったので、自分のwindowOSからwin32API関数を探し出してVC++2008のなかのincludeフォルダ内にコピー&ペーストして使えるようにした。 これって邪道ですか?一応何の問題もなくwin32APIプログラムが作れるのですが、もっと正規なやり方があるでしょうか。回答よろしくお願いします。

  • C言語でWin32API

    C言語を使ってWin32APIを呼び出すような、Windowsプログラミングを始めたいんですが、何かよい本やサイトはご存知ないでしょうか。 Visual C++6.0はあるんで、それを使えばいいと思うんです。 C言語はわかるんですが、Windowsプログラミングに関する知識はほとんどないので、ごく基本的なことから知りたいんです。 WinMain関数というのを書くようなんですが、その書き方すら知りません。  スケルトン(出来れば、それよりもっと基本的なこと)から書いてあるようなものです。

  • C#プログラミングに役立つAPIの本???

    もっぱらC#を使用しています C言語のプログラム遺産の活用等には全く縁の無い私です だから今後もC#だけで行こうと思っております VC++などに移る気などサラサラありません それ故に、念のために ・・・・・ 実は内心では心配だから、APIだけは勉強しておこうと思って教科書を探しました 日経ソストウエアが出版している『APIで学ぶWINDOWS』¥2095を購入しましたが的外れ! ウインドウズの解説本でありプログラミングには役立ちません 更にC#プログラミングに役立つAPIの本を探したのですが、適当なものが見つかりません ご存知でしたら教えてください、お願い申し上げます

  • APIとMFC

    WindowsでC言語で書けて(利用できて)無料のものがAPI、C++で使えて有料なものがMFC だから、アマチュアプログラマーは、APIが使いこなせるのならば、APIを使ってプログラムを 書いたほうがいい という理解で正しいでしょうか。 ここでAPIと書いたのはWin 32 APIのことです。

  • 【Cか】ノベルゲーム【Javaか】

    情報工学科(進学予定)の大学1年生で、専門的なことはまだやっていません。 1年のうちに趣味と学業をかねてプログラムを少しやっておこうと思い、 ビジュアルノベル系のゲームが好き、フォトショップなども使えることから ノベルゲームを1から作ろうと前々から思っていました。 ですが、どの言語にするかきっちり定まらず、結果CとJavaの入門書を終えた段階にいます。 要はどっちつかずな状態です。 ちなみにプログラムのお勉強という意味合いも含め、NScripterなどは使うつもりはありません。 ――初めはCをやっていたのですがCでGUIを扱うにはWin32API?なるものが必要だと知り、そして Javaだと比較的簡単に扱えると知って、Javaをはじめ、 しかし今振り返ってみてCとJava、どちらにするか絞りきれません。 なにかアドバイスいただけたらと思います。 よろしくお願いいたします。

  • .NET frameworkとWIN32API

    c#の勉強をしていたらWIN32APIを[ ]演算子で囲って直接呼び出すコードが多数 あるのですが、 .NET Frameworkだけで高度な(デバイスドライバなどの深い部分)プログラムを書くことはできないのでしょうか。 それとも動作が速いとかそういう理由でwin32apiを呼び出したのでしょうか。 .NET frameworkはwin32apiの上に位置するというのはわかるのですが・・・

  • MFCなのかWin32APIなのか

    みなさんはじめまして。グフです。 これからWindows上でC/C++(VisualStudio.NET2003) にて、Windowsアプリケーション開発の勉強を始め ようとしています。 いろんなサイトや書籍を見ている中で、Windowsアプリ の開発方法としてMFCをつかうやり方と、Win32APIで 開発する方法の2つがあることがわかりました。 これからWindowsの勉強を行うにはどちらの方法で開発 するのが望ましいのでしょうか? ケース by ケースだとは思いますが、何かアドバイス いただければと思いまして、投稿させていただきました。 やはり基礎からおさえるのであれば、Win32APIの方が よろしいのでしょうか? 今後のWinFX環境を考えると、Win32APIでの知識が無駄 になってしまうということはないのでしょうか?

  • C言語次のステップ

    C言語について一通り勉強しました。 (入門的な本に書いてあるような事柄) 次に勉強するといいことを教えてください。 それから、入門レベルよりひとつ上の内容の書籍があれば教えてください。 ポインタ、アセンブラ、 マルチスレッド、マルチプロセス、といった ちょっと深いテーマみたいなのも教えてください。 (ここにあげたのもいまいちわかってませんが、、)

  • C++ Win32APIでツールバーの位置を下にしたい。

    C++ Win32APIでツールバーの位置を下にしたい。 C++ Win32APIを勉強中でして、ウインドウを作成し、ツールバーをCreateWindowsEXで作成したのですが、このツールバーをウインドウの下部に表示する事は出来ないのでしょうか? ネット上のサイトには作成までの手順は載ってはいたのですが、ツールバーの位置を変更する処理はどうしても見つかりませんでした。 どなたかご存知の方いらっしゃいましたらご指導のほどよろしくお願い致します。