全般
MMOを作るのって何が難しいの?
まず、ゲーム自体作るのって結構大変です。ゲームにもよりますが。
グラフィックやサウンド関連とか、AIとか、経路探索とか、いろんな知識が必要になりますし、 パフォーマンスもそれなりに出さないとユーザビリティが悪くなるし、 グラフィックやマップ(レベルデザイン)とか、リソースもいっぱい作らなきゃなんなかったりします。
MMOになると、さらにネットワークやデータベースの知識とかが必要になるし、 サーバのパフォーマンスやネットワーク帯域の確保が大変です。
また、クライアントとサーバ間に整合性の問題が発生しないように同期をきっちりとるのが難しいです。
コードは非常に複雑になるし量も大きくなります。 にもかかわらず、サーバは長期間稼働させますし、 なんかあるとユーザー全員に影響しますので、バグの無い高品質なコードが要求されます。
ユーザーデータをサーバが扱いますし、暗号化などセキュリティ関連にも気を遣う必要があるでしょう。
まあ、大変です。
グラフィックやサウンド関連とか、AIとか、経路探索とか、いろんな知識が必要になりますし、 パフォーマンスもそれなりに出さないとユーザビリティが悪くなるし、 グラフィックやマップ(レベルデザイン)とか、リソースもいっぱい作らなきゃなんなかったりします。
MMOになると、さらにネットワークやデータベースの知識とかが必要になるし、 サーバのパフォーマンスやネットワーク帯域の確保が大変です。
また、クライアントとサーバ間に整合性の問題が発生しないように同期をきっちりとるのが難しいです。
コードは非常に複雑になるし量も大きくなります。 にもかかわらず、サーバは長期間稼働させますし、 なんかあるとユーザー全員に影響しますので、バグの無い高品質なコードが要求されます。
ユーザーデータをサーバが扱いますし、暗号化などセキュリティ関連にも気を遣う必要があるでしょう。
まあ、大変です。
開発言語や開発環境のオススメは?
まず、サーバには多くの人が接続しますので、
かなりのパフォーマンスが要求されます。
コードが複雑になりますので、クラスなどで 各部分の独立性を高くしたり分かりやすくする必要もあるかも。
クライアントとサーバでデータのやりとりをしますので、 クライアントとサーバは同じ言語の方が楽でしょう。
これは単純なデータ構造の定義だけの問題ではないです。
ゲームの状態全てを逐次やりとりするとデータが膨大になりますので、 データのやりとりは主に状態を変化させるトリガ(移動した、とか)を送受信することになります。 なので、ゲーム状態の保持をし、トリガの入力に対して変化させる部分というのは、 クライアントとサーバ間で共通になります※。 よってプログラム部分でも共通な部分が多くなります。
クライアントとサーバが同じ言語・プラットフォームなら 開発環境も同じだろうし、同時にデバッグなどもできて便利かもしれません。
(もちろん、必ずしもクライアントとサーバで同一の言語を使わなきゃなんないわけではないです。 「気軽に遊べる物にしたいから、クライアントはflashで...」とかもアリだと思いますが、 開発は大変になります。)
以上を考えると、おいら的には「C++」が一番良い気がします。
まあ、おいらの好みの問題もありますが、 おいらは特にパフォーマンス指向が強いので、 「多少強引な手法を使ってでもパフォーマンスを向上させる」 という選択肢があるのは魅力です。 ただし、数十人の同時接続数なら、他の高級言語等でもいけると思います。 最近(?)の言語ですと、だいたいネットワーク系の関数やライブラリが用意されてますし、 自分の好きな言語で組むのもありかと。
開発環境(ツール)としては、まず、デバッグ機能が強力なことが第一条件になります。
プログラムが複雑になりますので、デバッグ機能がダメだともう手に負えなくなります。 リモートデバッグとかもできると便利かも。
あとはソースコードの量が多くなるので、 ファイル数が多くても管理しやすい物を。 まあ統合開発環境なら、ここらへんは基本的な機能なのでなんでも平気でしょうか。 クライアントとサーバのプラットフォームとかに応じて、 使いやすいのを選択すれば良いと思います。
おいらは主に Visual Studio で開発してます。別に他のでも良いと思います。
コードが複雑になりますので、クラスなどで 各部分の独立性を高くしたり分かりやすくする必要もあるかも。
クライアントとサーバでデータのやりとりをしますので、 クライアントとサーバは同じ言語の方が楽でしょう。
これは単純なデータ構造の定義だけの問題ではないです。
ゲームの状態全てを逐次やりとりするとデータが膨大になりますので、 データのやりとりは主に状態を変化させるトリガ(移動した、とか)を送受信することになります。 なので、ゲーム状態の保持をし、トリガの入力に対して変化させる部分というのは、 クライアントとサーバ間で共通になります※。 よってプログラム部分でも共通な部分が多くなります。
クライアントとサーバが同じ言語・プラットフォームなら 開発環境も同じだろうし、同時にデバッグなどもできて便利かもしれません。
(もちろん、必ずしもクライアントとサーバで同一の言語を使わなきゃなんないわけではないです。 「気軽に遊べる物にしたいから、クライアントはflashで...」とかもアリだと思いますが、 開発は大変になります。)
以上を考えると、おいら的には「C++」が一番良い気がします。
まあ、おいらの好みの問題もありますが、 おいらは特にパフォーマンス指向が強いので、 「多少強引な手法を使ってでもパフォーマンスを向上させる」 という選択肢があるのは魅力です。 ただし、数十人の同時接続数なら、他の高級言語等でもいけると思います。 最近(?)の言語ですと、だいたいネットワーク系の関数やライブラリが用意されてますし、 自分の好きな言語で組むのもありかと。
開発環境(ツール)としては、まず、デバッグ機能が強力なことが第一条件になります。
プログラムが複雑になりますので、デバッグ機能がダメだともう手に負えなくなります。 リモートデバッグとかもできると便利かも。
あとはソースコードの量が多くなるので、 ファイル数が多くても管理しやすい物を。 まあ統合開発環境なら、ここらへんは基本的な機能なのでなんでも平気でしょうか。 クライアントとサーバのプラットフォームとかに応じて、 使いやすいのを選択すれば良いと思います。
おいらは主に Visual Studio で開発してます。別に他のでも良いと思います。
例えば、ゲーム処理はクライアント側に任せて、 サーバは通信の中継点として使う。というようなものです。
ちなみに、このような手法ですと、チートなどに弱くなる可能性が高いので、 そのへんに留意してください。