質問: こんにちは。ゲームプログラミングに興味があるmassu1221と申します。 この度、以下のことをお伺いしたく質問させて頂きました。 わからないこと・解決したいこと --------------- 「ハースストーン」や「シャドウバース」のような 対戦型カードゲームを作ってみたいと考えております。 そうしたゲームを作る場合、言語や環境は何を使えば宜しいでしょうか。 もちろん、1人の開発でできることには限界があると思いますので、 カードゲームのコアの部分だけでもプログラミングで作れないかと考えています。 コアの部分とは以下の内容を想定しています。 * 山札や手札といった概念の構築 * プレイヤーごとのターン制御 * 呪文を唱える、モンスターで攻撃するなどのフェイズの概念 自分で調査したところ、やはり「Unity」や「cocos2d-x」を使い、 C、C#、C++当たりの勉強が必要かという印象を受けております。 この認識は間違っていないでしょうか。 もし他にこういった選択肢があるといった場合などありましたら、 ご教授頂けますと幸いです。 どうぞ宜しくお願い致します。
回答: いきなり苦言ですが、**既存の大規模なゲームを真似るのは相応の技術が必要です**。いまのあなたは**ひのきの棒を持って「どうやったら魔王を倒せますか?」と聞いている状態**です。こちらとしてはそこまで実力と目標がかけ離れていると「レベルを上げて、正しい道のりを歩いてこい」と言うしかありません。 私は元ゲームプログラマであり、かつシャドウバースプレイヤーなので、ある程度シャドウバースがどのような仕組みで動作しているかは想像がつきます。その上で、「これから言語を勉強します!」という人が作れるものとは到底思えません。あなたの指す「コア部分だけでも」という目標すら超えるのに年単位がかかるでしょう。私としてはまずは自力で(Windowsの)ソリティアが作れるところくらいまで成長してから上記目標を掲げるべきだと思います。 それでも作るのをやめない!そのための努力は惜しまない!というのであれば、アドバイスをしましょう。 Unity、Cocos2d-xに目をつけたのは正解です。まったくの素人が触ってもある程度動くものが作れるUnityは初級者が触るのにふさわしいでしょう。私はCocos2dのほうは詳しくないのでUnityのほうで説明します。UnityではC#が使えるので言語選択はC#ということになるでしょう。一応他にもUnityで使える言語はありますが、C#一本でいいでしょう。 もしあなたが「オンライン」対戦カードゲームを目指しているなら、サーバ側も自力で組む必要があります。サーバ側はPHPでもPythonでもJavaServletでもRubyでもなんでもいいですが、とにかくUnityとは全く違うものを勉強する必要があります。シャドウバースやハースストーンは「サーバ側で山札、手札、攻撃、結果などを処理」して、「操作や演出をスマホやPCで処理」しています。そうしないとスマホやPCが山札や手札の処理を改造して不正し放題だからです。いきなり1ターン目から相手がPPを無視して場に5枚フォロワーを出してきたらキレますよね?だから、サーバ側でルールに則った管理をすることで改造による不正プレイを回避し、不正ユーザができることを限定しているのです。 サーバができたら今度はUnityと通信してやりとりするので「ソケット通信」や「Http通信」を学ぶ必要があります。これを学ぶだけでも1冊の本になるような量です。ある程度Unityがやってくれるでしょうが、サーバとやり取りするデータの形や受け取ったデータの処理などは自分で組む必要があります。通信フォーマットはREST形式が最近の主流なのでこれも勉強しましょう。 キリがないのでここらへんでまとめておきましょう。 * Unityを勉強するのがよい * Unityの中のロジックはC#で書けるのでC#を勉強するとよい * オンライン対戦にするならサーバ側の勉強も必要 * サーバ側のプログラミングはPHP、Python、JavaServlet、Ruby等 * カードゲームのルールの根幹部分はサーバ側で制御し、表示や操作だけスマホやPCが受け持つ * サーバとスマホ・PC間の通信手法にもいろいろあるので勉強する必要がある * ここまで説明してまだ「コア部分」の説明に入れない 壁の高さを感じていただけたでしょうか。挑戦するのは止めませんが、まずはUnityで簡単なゲームを作ることで「ゲーム作りの練習」をすることをおすすめします。