今更な感じがしないでもないですが、
ゲーム開発にはC言語とC++は、どちらが適してるプログラミング言語と言えるでしょうか?
俺はこれまでC言語とC++は同じものという考え方をしていたのですが、
よくよく考えると、C言語とC++は別もののプログラミング言語であるように思えました
C++は、C言語にプロジェクト指向を取り入れた言語であることは言うまでもないですが、
オブジェクト(クラス)を使う利点は、ワープロやアプリケーション開発に向いているように思えます
つまり、同じ処理を繰り返す比率が多いからです
そしてC言語は、組み込みシステムと呼ばれるものですので
C++よりもC言語の方がゲーム開発に向いていると思える
組み込みシステムとは、ゲーム機器に組み込まれているハードウェア+ソフトのシステムのことです
何処から突っ込んだらいいの?
全く同じ実行内容のゲーム開発をするとして、
C言語だけで組まれたプログラムと
C++のオブジェクトを使って組まれたプログラムを見比べると
C++の方が遥かにややこしいプログラムのような気がします
クラスを使うためにクラス内でメンバ関数やメンバ変数を使って
publicやらprivateやらを使って定義を構築
メインプログラムからはクラスを使うために
new演算子でインスタンス作成をしてオブジェクトを作成
そして、そのクラスのメンバ変数を呼び出してプログラムを構築する
クラスを使うには、これだけたくさんの工程が必要なのです
C言語だけで組むなら、直接命令を打ち込むだけで済むじゃないですか?
ゲームというのは、コントローラーに付いている僅かなボタンしか使いません
キーボードを使って文字を入力したりもしませんし、
与えられた項目を十字キーで選択して、決定ボタンを押すだけです
そのようなシステムになぜ、C++でなきゃいけないのだろうか?
書店で見かけるゲームプログラミングの本はC言語を使ったのはよく見かけますが
C++で解説しているゲームプログラミングの本が全くないのは、そのためのような気がします。
>>952 すみません
オブジェクト指向の間違いですw
あと、C言語だけを使ったプログラムとは
C++を使うがオブジェクト指向の機能だけ使わないという意味です
つまり、変数の宣言や初期化をプログラムの冒頭でやらなくても済むという
C++の特徴などは使うという意味です
C言語の場合、プログラムの途中で変数を宣言して使うことは出来ませんが、
そういうのは抜きで、あくまでもオブジェクト指向の機能だけ使わないという意味です
ゲームが項目を選んで選択肢を押すだけのゲームだったらいいね
956 :
名前は開発中のものです。:2013/08/11(日) 18:59:10.63 ID:Vkv1rucG
ゲームは一秒間に60回同じ処理繰り返すわけだけど、アプリケーションやワープロの方が同じ処理を繰り返す比率高いの?
957 :
名前は開発中のものです。:2013/08/11(日) 19:00:32.20 ID:Vkv1rucG
ていうかそれ以前に同じ処理繰り返す比率とオブジェクト指向になんの関係があるの?
C言語にも構造体という技術もありますし、
メンバ関数を使わなくても、普通の関数を使って呼び出すことも出来ます
グローバル変数を使えばスコープ外に変数を使うことだってできますし、
グローバル変数でも解放は出来るじゃないですか
そう考えるとC++でゲーム開発をやっていた自分が無駄なように思えてしまいました
なぜ、俺はここまでオブジェクトを使うことに拘ってるのだろう?と・・・
オブジェクト指向のほうが個人的にはゲームに向いてると思うよ
ゲームは、ゲーム内のオブジェクトを動かしたりアニメーションさせたりするわけで
それには座標やら向きやら速度がオブジェクトそれぞれに必要なわけで
これらの情報をまとめて持つということに関してオブジェクト指向がプログラマにとって一番わかりやすいはず。
別にプログラマの技術力を無視した視点から見ても
助けてくれるサポートコミュニティが無数にあるフレームワークというか言語のほうがいいんじゃないか
>>956 俺が言ってるのは、クラスを1つ定義しておいて
それをたくさんのオブジェクトでクラスを複製して使うという意味です
オブジェクトの特徴ってそういうことじゃないですか
1本のゲームを作り上げるのに
クラス化にすることがそれほど必要なことなのでしょうか?
シューティングなら主人公の構造体と敵の構造体を別々に個々に用意してもいいような気がします
一度処理を書き込んでしまえば外部のループから頭スッカラカンにして呼び出すだけでいい
っていうのが楽で素晴らしいと思う
962 :
名前は開発中のものです。:2013/08/11(日) 19:09:51.35 ID:Vkv1rucG
>>958 その気づきは大切なことだからいいと思うけど
まずオブジェクト指向の利点について勉強した方がいいんじゃないの?
ちなみにC++のコードはCのコードに完全に置き換えることも出来るよ
ついでにObjective-Cも
グローバル変数を使えばできる
C++なら使わなくてもできる。素晴らしいじゃないか
>>959 まあ、俺が単にオブジェクトが苦手ということもありますが、
助言ありがとうございます
DirectX学ぶにはどうしたらいいですか?
猿でもわかるようなのがいいです。
デバイスの宣言とか頂点バッファ?とか、
C++初級者でもシェーダプログラミングとかまでこれ一冊!
って感じの本無いですか?
贅沢を言えばGPUに処理投げられたり?するとか、そこら辺の基礎知識も一緒に学べるようなもので、
ゲーム開発を意識した本が良いです。
ベクトルや行列の基礎知識はあります。
予算は5000円付近で
やっぱりDirectXの前提知識が無いのでわかりやすいのがいいです。
なんか、アホな会話がされているようだが、俺もアホだから興味深い話だw
俺はオブジェクト指向がどうも理解できなくて、グローバル変数や構造体でゲーム作ってる
ヘボプログラマだから、クラスだのなんだのがゲーム製作に有用なんだったら
どこがどう有用なのか知りたいと常々思ってる。
けど、解説とか「だからそれがゲームにどう関係あるんだよ」みたいなのしかなくて
どうにも身につかないんだ。
ヒント:フレームワーク
あ、俺は職業ゲームプログラマーというわけではありません
ただの趣味でゲーム開発を楽しんでいるだけです
最初はC言語だけでゲーム開発をやっていたのだけど、
途中でC++というのを知って
オブジェクトに手を出してみたのですが、それが意外と難しくてつまずいて
そこで、なぜ、俺はこんなややこしいオブジェクトを使ってるんだ?ウガー!
となってるだけですw
オブジェクトにつまづいたことへの愚痴のようなものです
>>964 ちょっとわかりづらくなるかもしれない例えになるんだけど
C言語の構造体だと、例えば敵とキャラクターの接触が起きた時に
それぞれの構造体データに対して、
「おいお前、敵とぶつかったから一旦座標戻すからな、あとHPからダメージ分引いとくから、あとダメージ受けた時のリアクションにしとく」
という処理を施すんだけど
クラスというオブジェクト指向を持って、クラスに対して「振る舞い」を予め処理しておくと
「おいお前、この敵とぶつかったから」
という処理で終わる。
他にも色々あるけど、つまりその処理が何をしているのかわかりやすくなって、今どんな処理がされているのかわかりやすくなる
→デバッグしやすいし、多人数で作業分担しやすい、予期しないデータ改変が行われない
というメリットがある
でもオブジェクト指向が苦手なら苦手で、別にC言語で作ってもいいんじゃないかね
作れないわけではないから
誰かC言語ではなくC++を使ったゲームプログラミングの本を執筆してくれる人いないかな?
俺が手にしているゲームプログラミングの本は、全てC言語ばかりです
それをC++のオブジェクトの置き換えるために、
C++の本を買いあさってオブジェクト指向に構築し直しているのだが、
それがうまくいかない・・・
俺が持ってるゲームプログラミングの本は、全てC言語ばかりですので
本当にお手上げ状態です
今は、オブジェクトを理解するために、ゲーム開発を一時中断して
仕方がなくJavaを学んでいるところです
>>969 ありがとうございます
言ってる意味が、分かりそうで解からないという
モヤモヤした状態ですが、
なんとなく「オブジェクトが便利」ということだけは伝わりました
もう少し大人しくオブジェクトを学んでみることにします
明確にコードがこう変わる!っていういい例があった
ttp://dixq.net/g/ ここの「メニュー画面の作り方」を読むんだ
1,2,3とC++編の違いがわかると大きい
>>973 ありがとうございます。
そのサイトでしたら、C++以外の
C言語でDXライブラリを扱う解説は一通り読みました
サンプルコードを打ち込んで実行結果を確認して
すべて上手く行ったのでC言語でのゲーム開発については自信がつきました
あとは、それを自分が開発するゲームに置き換えてプログラミングをすれば
C言語によるゲーム開発のゴールも見えていたのですが、
俺の場合、途中でC++のオブジェクトに手を出してしまったのでドツボにはまってしまった
つまり、完成するはずのゲームは完成しない
>>969 >でもオブジェクト指向が苦手なら苦手で、別にC言語で作ってもいいんじゃないかね
でも、いいです。
せっかくオブジェクトに触れたので、オブジェクトを身に着けてみせます
ありがとうございました
Cを読んでうまく行って自信がついてC++に手を出してわからなくなった
じゃあそのサイトのC++を読めばいいじゃない
976 :
名前は開発中のものです。:2013/08/11(日) 20:49:11.24 ID:Vkv1rucG
>>960を見た感じだとクラスとただのデータ構造の違いがわかってないみたいだし、ポリモーフィズムに関する理解が薄いんだと思う
確かゲームつくろーにデザインパターンのゲームへの応用みたいなのあった気がするから
それ見たら少しは理解が深まるんじゃないかな
あと純粋にC++覚えたいってんじゃなかったらCでやっちまえばいいと俺も思います
>>975 メニュー画面だけ解説されてもね
どうせなら、全部C++で解説してほしい
というか、そのサイトのC++以外のC言語を使った解説は丁寧でわかりやすかったけど
C++だけ、いきなり過ぎて最初は意味がわかりませんでした
>>976 C++のオブジェクトの扱い方については、なんとなく理解しています
メインプログラムでクラスを呼び出してオブジェクトを作成する
new演算子を使うとクラスのコンストラクタを読みに行って
まずは初期化が行われる
クラス内で扱う変数は、同じクラス内のメンバ変数から扱うことになり、
メインプログラムからは、
「オブジェクト、クラス、メンバ変数(引数)」という形式で組み
ここに書いた引数は、クラス内のメンバ変数に移されて
メンバ関数内で処理で実行結果を映す
という、一連のオブジェクトの流れまでは理解できたが、
かなりややこしい
俺はC++のオブジェクトを独学で学んだ後に、
Javaのオブジェクトを独学で学んでみたのですが
Javaのオブジェクトの方が遥かに楽ですね
C++のようにhファイルでクラス宣言とかしなくていいでしょ?
メインプログラムもJavaファイルですし
クラスも同じJavaファイル
そして公開クラスはJavaファイルに1つしか組めないというルールも分かり易い
今はJavaのオブジェクトをC++のオブジェクトに置き換えて考えてみようとしたのですが、
やっぱC++のオブジェクトは面倒で、すっごくややこしいですね・・・
Javaのオブジェクトが分かりやすいのは、
Javaはすべてクラスだからです。クラスだけでプログラムを組むからです
979 :
名前は開発中のものです。:2013/08/11(日) 21:41:48.62 ID:Vkv1rucG
>>977 でもオブジェクトがただの構造体と比べてどう便利なのかわかんないんでしょ?
文法や仕組みだけわかっても概念や考え方わからないと役に立たないよ
GoFのデザインパターンはオブジェクト指向のかなりメジャーなベストプラクティスだから
それが理解できればオブジェクト指向のメリットも理解できると思うよ
念のために言っておくけどベストプラクティスは「成功例」であって「正解」ではないからそこは忘れずに
980 :
名前は開発中のものです。:2013/08/11(日) 21:46:22.72 ID:Vkv1rucG
>>978 JAVAはオブジェクト指向言語だけどC++はオブジェクト指向「も出来る」言語だから
いろんなプログラミングパラダイムを持つのがC++の特徴
ぶっちゃけ人によってスタイルちがうからメンドイ
981 :
名前は開発中のものです。:2013/08/11(日) 21:55:41.72 ID:IbgpLycy
>>978 ??C++でもこーゆー書き方は出来るよ?
class CMutex
{
HANDLE m_hMutex;
public:
CMutex(void){m_hMutex=CreateMutex(NULL,FALSE,NULL);}
virtual ~CMutex(void){CloseHandle(m_hMutex);}
DWORD Wait(DWORD dwMsec=INFINITE){return WaitForSingleObject(m_hMutex,dwMsec);}
void Release(void){ReleaseMutex(m_hMutex);}
};
class CEvent
{
HANDLE m_hEvent;
public:
CEvent(void){m_hEvent=CreateEvent(NULL,FALSE,FALSE,NULL);}
virtual ~CEvent(void){CloseHandle(m_hEvent);}
DWORD Wait(DWORD dwMsec=INFINITE){return WaitForSingleObject(m_hEvent,dwMsec);}
HANDLE GetHandle(){return m_hEvent;}
void Set(void){SetEvent(m_hEvent);};
void Reset(void){ResetEvent(m_hEvent);};
};
ポリモーフィズムが便利だよなあ
敵のオブジェクトをリストに突っ込んでおいて
イテレータで回しながら順に敵の処理を実行するとか
C言語だとどうやるんだろ
よし。じゃあ、新たにJava版のゲームプログラミングの解説サイトでも作ることにしよう。
開く
JET++ ‏@JET_JAPAN 8月3日
とにかく約2週間も暇になってしまうので、先にJava学習を始めてみることにしよう。
どうせ職業訓練で学ぶJavaはシステム系のプログラミングになると思うので、
こっちはJavaを使ったゲームプログラミングを学んでいくことにしよう。
開く
JET++ ‏@JET_JAPAN 8月3日
今日が8月3日ですから、約2週間も暇になる。あ、明日は日曜日で
ハローワークはやってないんだった。なので、ハローワークは来週の月曜日の
8月5日に行くことにしよう。
開く
JET++ ‏@JET_JAPAN 8月3日
>>979 いや、さすがにそれぐらいは解かる
構造体は変数しか扱えない
クラスは変数と関数が使える
Javaの場合は、フィールドと変数とメソッドだけど
メインプログラムでクラスを呼び出してオブジェクトを作り、
そのオブジェクトでメンバ関数に引数を渡せば
クラスの中で、別のメンバ変数なども動かして、様々な部品を作ることができる
あとは、そのオブジェクトのメンバ変数を呼び出せば答えを返すことが出来るし
メンバ関数を呼び出せば、その関数のreturnの値を呼び出すことも可能
構造体に関数を追加したのがクラスっていう認識なんだろうなあ
継承とか、ポリモーフィズム、デザインパターンあたりを
キーワードに勉強するといいと思うよ
>>981 うん。
C++のクラスでも、そうやって宣言も定義に含めることもできますが、
そういうことじゃないんですよね
C++のオブジェクトがJavaのオブジェクトよりややこしいというのは・・・
俺は最初にC++を使ったオブジェクトをプログラムを組んで学んでから
Javaに触れてみると、
いきなり「え?」と思ったよ
だって、いきなりクラスの中にプログラムを組んでいくのだし
だが、Javaを使ってみると、意外と分かり易かったです
コードの組み方がC言語と同じだったので
先にC言語を学んでおいてよかったと思いましたね
987 :
名前は開発中のものです。:2013/08/11(日) 22:47:27.83 ID:Vkv1rucG
>>985 まあ最初はみんなそんなもんでしょ、実装上は間違いってわけでもないし
その理解だと設計が手続き型の延長にしかならんからメリットが見えないけど
>>985 継承あたりまでは学びました
継承は確かに便利ですね
いくらでもスーパークラスを受け継がせたサブクラスが作れますからね
俺はこの継承という技術は好きです
前にRuby1.9のプログラムを学んだことがあったのですが、
あれは継承の連続でしたね
無数にあるクラスを一つ一つ辿っていくと
全てのクラスが1つのスーパークラスの上(下?)で、動いているのを知った時は
面白い技術だなと思いましたね
ポリモーフィズム、デザインパターンは、まだ知りません
あ、俺が見たRuby1.9のプログラムは、
RPGツクールVX Aceに入ってた
Rubyスクリプトプログラムのことです
990 :
名前は開発中のものです。:2013/08/11(日) 23:40:08.00 ID:Vkv1rucG
>>988 ならポリモーフィズム学んでからまた考えればいいんじゃない
それでもCでいいと思うならそれはそれでいいと思うけど
ぶっちゃけオブジェクト指向の大きな利点は再利用性とかメンテナンス性だから
一人でやっててメリット見えないってのはありえるし
個人的にはソースを見るのが一番解りやすいな
クラスの扱いは別にC++に限らないから他言語でもいい
市販ゲームではDOOM3とかソース公開しているから見てみるといいかもね
992 :
名前は開発中のものです。:2013/08/12(月) 05:49:59.47 ID:3AMeZIoC
>>965 DirectX は初心者スレがどっかにあったと思うから探してみるといいと思う
そこで質問したほうがいい答えを得れると思うよ
あと, 本だけじゃなくてネットで初心者サイトを探してみるとか
実際に DirectX で簡単なプログラム組んでみるとか
読みにくいけど, MSDN の DirectX のページを読んでみるのもおすすめ
誰か次スレ頼む
994 :
名前は開発中のものです。:2013/08/12(月) 08:08:10.18 ID:RPqvnGkC
ポリモーフィズムで自機と敵機を一緒にして管理してるんですけど
プレイヤーが見るUIを描画する際にどこに処理を置いたほうがいいですか?
自機をインスタンス化する時に、UIクラスなどを作っておいてそこに登録させるのか
もしくは予め自機敵機のスーパークラスにUIを描画する機能を作っておいて、
描画するときには、線形探索じゃないですけどループ回して、自機だったら描画、敵機だったら描画しない、という判断をするのか
どっちのほうがわかりやすいですか?
プレイヤーが見るUIってなんじゃらほい
997 :
名前は開発中のものです。:2013/08/12(月) 15:50:51.79 ID:9jLpDglR
前者でいいんじゃない
特定のサブクラスしか使わないメソッドを親に持たせるとクラスのスコープが曖昧になるし
ちなみにUIってのはHUDの事でいいんかな
Win8だとUSBがドライバまともにインストールできんの、直ったんかね
もう少し人に伝わる文章を書く努力をしろ
埋め
1001 :
1001:
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。