ゲームプログラミング:C#またはC ++?[閉まっている]


15

私が本当にやりたいのは、ゲームプログラミングを行うことです。だから、自問自答のプログラミングを学びたい18歳のとき、C#とC ++の間で最も適したプログラミング言語は何ですか?(私は、Windowsが依然として最も使用されるOSであると信じているため、Unixを気にしないと述べるべきです)

私はC ++の基本を知っていますが、C#については知りません。C ++にはチュートリアルガイド、dllなどがありますが、C#にはないことを知っていますが、一人でプログラムを開発するのは習得して使用する方がはるかに簡単ですが、プログラムが難読化されていても読んでいますソースを入手するのは簡単です。

まあ、まず基本に集中したいのですが、C ++の方が自分に適していると感じているからといって、C ++を好みますが、私は一人で働くことを考えなければなりません。だから、たとえそれが好きだったとしても、それが最善のことではないかもしれません。

どっちがいいかわからない、いろいろなウェブサイトでたくさんのスレッドを読んだことがあるし、C#がC ++よりも人気が出てきているようだ。しかし、そうは言っても、私はゲームプログラミングをしたいとも指定しました。ですから、「C ++はそうではないのに.NETメモリを処理するのでC#の方が簡単です」よりも良い点をいくつか知る必要があります。


16
gamedev.stackexchange.comが役立つこともあります。
アダムリア


2
また、ここを参照してください:gamedev.netを
パトリック・ヒューズ

回答:


21

ゲームをプログラミングしてC ++を学びます。それはとても楽しい経験でした。同じことをすることを強くお勧めします!

しかし、今私はC#プログラマーです。その時点でC#が利用可能だったら、もっと生産的になっていたはずです。

C#は、ゲーム開発の学習に最適な選択肢です。フレームワークから本に至るまでに必要なものがすべて揃っており、言語は素晴らしいです。

C#Game Programmingについて書かれた本を何十冊も見てきましたが、MicrosoftはDirectXXNAなどのフレームワークを改善するために多くの努力を注いでいます。

UPDATE:あなたはによって興味がある可能性があり、このようにも。Miguel de Icazaからの最近のブログ投稿です。

更新2013-02-22マイクロソフトは、XNAサポートの中止を計画しています。


1
だから、C ++でSDLなどを試してから、将来C#に移行する必要があるかもしれません。エンジンの作成を除いて、C ++がC#に置き換えられているように見えます。 !
クロニックス

2
C#は、一部のゲームプラットフォームでの移植性やその他の懸念事項ではなく、ゲーム開発の体験に優れていることを理解してください。最良のシナリオは、両方を使用する十分なゲーム開発者を知っており、ターゲットプラットフォームに応じてC ++またはC#を選択する場合です。
クライム

それ以外は、明らかに+1。個人的にはまだC ++を好んでいますが、それは私のプロジェクトのほとんどがプロジェクト固有の理由で低レベルのアクセスを必要としているからです。
クライム

12

ほとんどのゲーム会社はC ++を使用しており、おそらくPythonスクリプトまたは他の言語をバックグラウンドで実行しています。さらに、OpenGLとDirectXのバインディングはC ++を対象としているため(C#でも同様にDirect3dを行うことができると確信しています)、ゲームプログラミングの場合はC ++がメイン言語です。

しかし、公正な警告を出すつもりです(そして、これを止めさせないでください)が、3Dグラフィックスは非常に複雑になる可能性があります。新しいDirect3Dを使用すると、以前よりもかなり簡単になりましたが、それでもかなりの数学であり(かなり混乱する可能性があります)、ライブラリ自体だけが混乱する可能性があります。

最初に非常に単純なものから始めます。2Dの場合、SDL(Simple Directmedia Layer)は、3Dに慣れたら(トップダウンゲームのようなもののために)使いやすいです。MSのDirectX SDKドキュメントには、いくつかの素晴らしいチュートリアル/サンプルがありますので、一見の価値があります。Neheのチュートリアルは少し古くなっていますが、それでもなお優れています。

しかし、あなたの質問に答えるために、それらはすべてC ++で通常行われます。


1
SlimDXは.NETのDirectXラッパーを提供します
ダニーヴァロッド

1
「ゲームプログラミングでは、C ++がMAIN言語です。」私はその声明に同意しません。ゲーム市場は、単なるAAAコンソールゲームよりもはるかに広範です。これは、人々が気付く傾向があるよりもはるかに小さい市場です。C ++よりもはるかに多くのゲームがActionScriptのような言語で書かれていると思います
-MattDavey

8

まず、いくつかの優先順位を設定します。最初にゲームを作成し、その後プログラミングのより高度な側面について学習したい、またはその逆を行いたいだけですか。どちらのアプローチにも長所と短所がありますが、私の意見ではどちらも合法です。

ゲームの作成を開始する場合は、C#を学ぶことをお勧めします。C ++の基本をすでに知っている場合は、C#を習得してもまったく問題はないはずです。C#をツールにすることには利点があります。言語を習得するのは簡単で(C ++と比較して)、「マネージ言語」です。つまり、自動的にメモリ処理を行います(多くのC ++初心者や初心者でも問題があります) )。また、さらに面倒な配管作業を行うMicrosoftのXNA Frameworkにアクセスできます。これにより、ゲームサイクルやデザインなどに集中することができます。確かに、このすべてのインスタ配管にはオーバーヘッドがあります。つまり、おそらく業界グレードの3Dゲームを作成することはないでしょうが、ゲームプログラミングを始めているだけです。そのため、最初の数回の試行で次のHaloを作成することになるとは思いません。:)

これは、成功したXNAゲーム(Weapon of Choice)を開発した男による事後分析です。彼は、C#/ XNAを使用すると、C ++を使用するのではなく、開発時間をどのように節約したかを詳しく説明します。 http://www.gamasutra.com/view/feature/3899/postmortem_mommys_best_games_.php

そうは言っても、少なくともバックグラウンドで物事がどのように機能するかを知るために、ある程度の時間を費やすべきです。C ++プログラマがそれを行う方法。C ++でゲームを作成することを学ぶと、別のゲーム開発チームに参加しやすくなります(ほとんどのチームがC ++で動作するため)。しかし、たとえC ++を使用しないことになっても、使用する言語に関係なく、内部構造がどのように機能するかを知っていれば、より優れたプログラマーになります。


私は完全に同意します。c ++で直面しているメモリ管理の問題が最大の問題です。私が取り組んだゲームにはメモリの問題はありませんでしたし、何十ものゲームを作った20年のベテランが言ったことを聞いたことがあります。古いデータを指すポインターの問題や所有権の問題が発生するため、RAIIやスマートポインターでも問題は解決しません。それらを見つけて修正する方法を学ぶと、はるかに優れたプログラマーになりますが、バッファオーバーランと無関係な部分でのゲームクラッシュを初めて経験すると、数か月間困惑する可能性があります。
ドミニクマクドネル

この質問に追加したいのは、C#にはXNA(en.wikipedia.org/wiki/Microsoft_XNA)もあるということです。XNAは、多くの管理対象外のDirectXよりピックアップしやすいです。
Vitor Py

1
@DominicMcDonnell:C#などのマネージランタイムのどこかに隠されたものへの参照を保持することにより、メモリの問題が発生する可能性があります。
Jan Hudec

@JanHudec、私はそれを知りませんでした。私はあなたが物事を機能させることがより簡単で簡単であると言うことができると思いますが、got-yasは追跡するのがはるかに難しく、言語が構築することを許可する習慣が邪魔になります。
ドミニクマクドネル

3

ゲーム開発のためにC ++を大いに宣伝しています。いくつかの余分な障害があり、さまざまな長所と短所があります。最良の理由の1つは移植性です。

C#を使用すると、最近かなり多くの開発を行うことができます。また、驚くほど素晴らしいエンジンがプログラムされています。これらはどちらもゲームプログラミングに適した言語です。Windows/ Xboxプラットフォームのみをターゲットにしている場合は、特にC#に傾倒する理由があります。

私が最も学ぶべきだと思う言語は、OpenCLまたはCUDA、いくつかのGPGPU言語です。個人的には、長持ちし、さらに成長する可能性があるため、OpenCLを好みます。基本的にはCスタイルです。C ++またはC#の優れたラッパーであるOpenTKがあります。

Rubyゲームプログラミングがハードウェアアクセラレーションでどのようなものになるのか、いつも疑問に思っていました...


3

生のゲームプログラミングでは、かなり冷たくなります。C#またはC ++のいずれかで低レベルのグラフィックコールを操作することは軽度の悪夢であり、3Dモデルはもちろんのこと、2Dスプライトのレンダリングのホイールを再構築する必要はありません。あなたは自分でプログラミングを学びたいので、あなたの最善の策はあなたを少し前進させることができるフレームワークを見つけることです。

Cベースの言語にある程度精通しているので、私の提案はUnity 3Dを見てみることです。市販のゲームデベロッパーショップからの採用に真剣に取り組んでいるだけでなく、興味深いプラットフォームオプション(PC、Android、iPhone、Webランタイムなど)があるだけでなく、非常に使いやすい無料バージョンと多くのチュートリアルもありますコンセプトから実装に移行する方法を示します。何よりも(IMO)サポートされているスクリプト言語の1つはC#です。


2

私は2年前にクラス用のゲームを作成し(当時も18歳でした)、C#で作成しました。大規模なC#プログラムは通常、大規模なC ++プログラムよりも動作が遅いことに気づきますが、C#で必要な作業ははるかに少なくなります。メモリ管理は自動的に行われます。最初のゲームの範囲では、十分に高速です。(当社のゲームは本格的な2DマルチプレイヤースタークラフトのようなRTSです。)

管理しやすいはずなので、私はC#のルートになります。ただし、プロのゲーム開発者になりたい場合は、Microsoftプラットフォームでのみ機能することを覚えておいてください。(それでも、C#はC ++への足がかりになる可能性があります。2つの言語を再学習する必要がある場合は、最初にC#を学習しようとします。)


C#はMono(クロスプラットフォーム)でも動作しますが、フレームワークの一部(WPFなど)はサポートされていません。
ダニーヴァロッド

1
@Danny Varod、クロスプラットフォームゲームの開発にMonoを推奨するのはあまり好きではありません。Monoの機能に関しては、これまでMicrosoftに対して常に少し遅れていたため、変更されるとは思いません。また、Microsoftプラットフォーム用のC#を使用した開発の主な利点はXNAであり、MonoもDirectXを提供するまでは、MS以外のプラットフォームでは機能しません。
-zneak

1
あなたが述べたように、DirectXはMicrosoftのものであるため、Monoは互換性のあるOpenGLラッパーを提供する必要があります。私のポイントは、C#を部分的に移植できることだけでした。
ダニーヴァロード

2
Unity、monogame(オープンソースXNA for mono)、およびOpenTKの間には、mono用の優れたゲームライブラリがたくさんあります。
ストーンメタル

1

私はC ++に投票します-主にクロスプラットフォームになる可能性があるためです(もちろんあなたのコードを書く方法に依存します)そしてまたあなたがそれを気にする必要があるのでメモリ管理についてより多くの知識を与えると思うからです。しかし、linux / unixは気にしないので、メモリの複雑さをとりあえず無視したいのであれば、今すぐC#に焦点を合わせてからC ++も学習してみませんか?


Stack Exchange Programmersに関する最初の質問にお答えいただきありがとうございます。
DeveloperDon

C ++は今でも最も移植性の高い言語です。特にモバイルプラットフォームにはJavaがあり、C#がありますが、ほとんどは両方ありません。しかし、すべてにC ++が必要です。仮想マシンは、ネイティブマシンコードにコンパイルされるもので実装する必要があり、現在は常にC ++です。
Jan Hudec
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.