NDKを使用する必要があると思います。プロジェクト管理を容易にするために、C++ ではなくCでプログラムを記述します。非同期リクエスト処理にはlibeventの使用を検討する必要があります。WebインターフェイスにPHP を使用しないでください。現時点では、 Pythonの方がはるかに優れています。汚れても構わない場合は、 C が最適なソリューションです。
ソケットの開発には、業界標準であるPOSIXソケットを使用する必要があります。後で、 ZeroMQなどのより高度なソリューションを確認する必要があります。要件に応じてPostgreSQL /* MongoDB *を使用します。これらは非常に高度なデータベース管理システムであり、たとえば MySQL よりもオーバーホールが少なくて済みます。私は、MongoDBの方がこの目的により適していると思います。MongoDB の方が高速ですが、ACID データを完全にサポートしていません。
オンライン/オフラインのドキュメント ベースのMAN ページで、ソケット プログラミングに必要なものを学ぶ必要があります。それほど難しくありません。これは Cでのサーバーの例です。それを調べて、独自のクライアント実装を作成してみてください。TCP/IP パケットの抽象化の基本原理を理解してください (ちなみに、これは TCP ソケットです。UDP の例を確認してください。これらはもっとたくさんあります)プロジェクトに関連します):
/*
"Arch_server" - a basic server program in C
Copyright © Juozas Domarkas 2012, all rights served
*/
#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <strings.h>
#include <unistd.h>
void respond(int socket);
void error(char *msg)
{
perror(msg);
exit(1);
}
int main
(int argc, char *argv[])
{
int socket_server_fd, socket_client_fd, pid;
socklen_t client_address_length;
struct sockaddr_in server_address, client_address;
if (argc != 3)
error("Correct usage: server [host] [port]\n");
socket_server_fd = socket(AF_INET, SOCK_STREAM, 0);
bzero(&server_address, sizeof(server_address));
server_address.sin_family = AF_INET;
server_address.sin_addr.s_addr = INADDR_ANY;
server_address.sin_port = htons(atoi(argv[2]));
bind(socket_server_fd, (const struct sockaddr *) &server_address, sizeof(server_address));
listen(socket_server_fd, 16);
client_address_length = sizeof(client_address);
while (1) {
socket_client_fd = accept(socket_server_fd, (struct sockaddr *) &client_address, &client_address_length);
pid = fork();
if (pid == 0) {
close(socket_server_fd);
respond(socket_client_fd);
exit(0);
}
}
return EXIT_SUCCESS;
}
void respond
(int socket)
{
int n;
char buffer[1024];
bzero(buffer, 1024);
n = recv(socket, buffer, 1023, 0);
if (n < 0) error("ERROR reading from socket");
printf("Here is the message: %s\n", buffer);
n = send(socket,"Message received.", 17, 0);
if (n < 0) error("ERROR writing to socket");
}
経験に応じて、サーバー スイートを作成するか、既存のソリューションを使用する必要があります。適切な期限 (たとえば8 か月) を自分に与えて、すべての「高レベル」ツールを自分で作成することをお勧めします。そうすれば、プロジェクトを最大限に活用できます。できるだけ基本的なものを書くようにしてください。低レベルの既存のソリューションを使用してパフォーマンスを向上させ、それらを研究し、31337 h2x0r5 から何かを学びます。
GL/ES の代わりに OGRE 3D を必ずチェックしてください。OpenGL の抽象化ライブラリです。OpenGL よりもはるかに簡単で、最新の 3D 開発、ライブラリ、プラグイン、あらゆる種類の既に開発されているパーティクル、ロコモーション、空/水システムのサポートが向上しています。
Unity3D のようなものには行かないでください。あなたにはもっと良いことがあります。
真の C プログラミングを学ぶのに最適な本は、 Dennis M. RitchieとBrian W. Kernighanによる「 C プログラミング言語」です。
Google には、NDK に関する Android 開発用のチュートリアルがたくさんあります。必ず NDK を使用してください。Java は 3D グラフィックスを適切にサポートしていますが、実際にはこの仕事に適したツールではありません。これは「ニッチな」ソリューションであり、業界で受け入れられているゲーム開発の標準ではありません。それに関して、業界はゲーム開発に C++ を使用しています。製品ライフサイクル全体で 1 つの言語を使用することを強くお勧めします。ネットワーク サーバー、データベース インターフェイス、フックが必要です... C を使用します。C++ ではオーバーホールが多すぎます。BOOST や STL など、C++ に付属するその他すべてのがらくたを学習することになります。C、libevent、OGRE 3D、いくつかの既存の OGRE システムを使用することをお勧めします。これらのプロジェクトはすべて、しっかりしたドキュメントを備えており、プライムタイムで使用する準備ができています。
Ogre3Dは 3D ゲーム向けです。それを使って「2Dプラットフォーム」ゲームを作ることができます。1 つの余分な次元は、実際にはそれほど多くを学ぶ必要はありません。
各プラットフォームを 1 つずつ学習します。「オールインワン」の本を読まないでください。
これらのプロジェクトのドキュメントを確認してください。
自由な時間がたくさんあるので、まず自分で良い計画を立ててください。ひとつの方法で自分自身、自分の考えを整理し、「目標」に到達しようとします。MMO を 4 ~ 5 年で完成させるのは現実的です。それは、主にプロ、時にはインディーズでさえかかる時間です.
粘り強く、毎日何か新しいことを学び、毎日コードを書くようにしてください。1 つの目標、つまりゲームに向けて取り組みます。他のプロジェクトが発生した場合は、延期してください。実用的なプログラマーになりましょう。汚れることを恐れないでください。タイトルのために月に数日休みを取ってください。学校には行かないでください(落とさないでください!!!)。しつこい。
私はこれを行うのは嫌いですが、コンパイラ、ツール、プラットフォーム、言語を選択することは純粋な政治です。Linus Torvalds と同じように、私は「仕事に最適なツール」を好みます。私は主にオープンソース ソフトウェアを使用しています。「GPL」対「BSD」、または制限的対許容的ソフトウェア ライセンスに関して言えば、私は間違いなく BSD を選択します。単純に、「社会的に自由」ではなく、フリー ソフトウェアを信じるからです。
私の意見では、優れたコンパイラは、Apple の LLVM コンパイラ コレクションのCLANGです。