Я думаю, вам следует использовать NDK. Напишите свою программу на C, а не на C++, чтобы упростить управление проектом. Вам следует рассмотреть возможность использования libevent для асинхронной обработки запросов. Не используйте PHP для веб-интерфейсов, Python на данный момент намного лучше. C — это лучшее решение, если вы готовы запачкаться.
Я бы сказал, что для разработки сокетов следует использовать сокеты POSIX — отраслевой стандарт. Позже вам следует попробовать более продвинутые решения, такие как ZeroMQ. Используйте PostgreSQL/*MongoDB* в зависимости от ваших требований. Это действительно продвинутые системы управления базами данных, в которых вы определенно найдете меньше капитального ремонта, чем, скажем, в MySQL. Я бы сказал, что 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.
Обязательно попробуйте OGRE 3D вместо GL/ES. Это библиотека абстракций для OpenGL. Гораздо проще, чем OpenGL, лучшая поддержка современной 3D-разработки, библиотеки, плагины, всевозможные уже разработанные системы частиц, передвижения, небо/вода.
Не гонитесь за чем-то вроде Unity3D. У тебя есть дела поважнее.
Лучшей книгой для изучения настоящего программирования на C является "Язык программирования C" Денниса М. Ритчи и Брайана В. Кернигана.
У Google есть много руководств по разработке Android, касающихся NDK. Обязательно используйте NDK. Java хорошо поддерживает трехмерную графику, но на самом деле это не лучший инструмент для этой работы. Это «нишевое» решение, а не принятый в отрасли стандарт в разработке игр. В связи с этим индустрия использует C++ для разработки игр. Я бы серьезно рекомендовал использовать ОДИН язык для всего жизненного цикла продукта. Вам понадобится сетевой сервер, интерфейс базы данных, хуки... Используйте C. С C++ вы получите слишком много капитального ремонта. Вы закончите тем, что изучите BOOST, STL и прочее дерьмо, которое идет с C++. Лучше использовать C, libevent, OGRE 3D, некоторые существующие системы OGRE. Все эти проекты имеют хорошую надежную документацию и готовы к использованию в прайм-тайм.
Ogre3D предназначен для 3D-игр. Вы можете сделать с ним игру «2D-платформа». Одно дополнительное измерение на самом деле не так уж много для изучения.
Изучите каждую платформу по отдельности. Не читайте книги «все в одном».
Ознакомьтесь с документацией этих проектов.
Поскольку у вас есть много свободного времени, лучше сначала составьте себе хороший план. Организуйте себя, свои мысли в одном порядке и постарайтесь достичь «цели». Вполне реально закончить свою MMO, скажем, за 4-5 лет. Именно столько времени в основном требуется профессионалам, а иногда и инди.
Будьте настойчивы, узнавайте что-то новое каждый день, старайтесь каждый день писать код. Работайте над ОДНОЙ целью — своей игрой. Если появится какой-то другой проект - отложите его. Будьте прагматичным программистом. Не бойтесь испачкаться. Отпускай пару дней в месяц ради своего титула, не ходи в школу (не бросай!!!). Будьте настойчивы.
Я ненавижу это делать, но выбор компилятора, инструмента, платформы, языка — это чистая политика. Я предпочитаю «лучший инструмент для работы», как и Линус Торвальдс. Я в основном использую программное обеспечение с открытым исходным кодом, так как оно лучше справляется со своей задачей. Когда дело доходит до «GPL» против «BSD» или ограничительных или разрешающих лицензий на программное обеспечение, я определенно выбираю BSD просто потому, что я верю в свободное программное обеспечение, а не в некоторую «социальную свободу».
На мой взгляд, хорошим компилятором был бы CLANG из коллекции компиляторов Apple LLVM.
person
user1254893
schedule
13.05.2012