Buenas!
Hace unos días pregunté en el foro sobre el desarrollo de un ranking en tiempo real para un juego, tengo experiencia en desarrollo de apps/juegos/web pero nunca me había metido en el tema online, con la ayuda prestada y con ganas de meterme en faena, he decidido desarrollar un juego rápido, con una mecánica sencilla, que me permita ver los problemas que se pueden crear en este tipo de juegos, para después ya meterme de lleno en un proyecto un poco más grande (sigue siendo un juego sencillo, pero si en tema de diseño y programación tiene bastante más trabajo), con algo de experiencia.
Mecánica del juego
El juego va de resolver tantas operaciones matemáticas como sea posible en un tiempo determinado. Todos los jugadores juegan la misma partida al mismo tiempo, es decir resuelven las mismas operaciones y comienzan y acaban a la vez. Al ir acertando los problemas se van sumando puntos. Cada cierto tiempo en la partida se van actualizando los rankings y puedes ver en que posición vas en ese momento de la partida.
La partida durará 90 seg (por ejemplo), cuando acaba se pasa a una pantalla donde se muestra el ranking de la partida y la posición del jugador, en la pantalla del ranking hay una cuenta atrás que indica cuando va a empezar la siguiente partida (30 seg).
Muy sencillo todo, pero me sirve para ver que problemas me puedo encontrar y como ir resolviéndolos para afrontar un proyecto un poco más grande.
Servidor
Es lo que más miedo me daba. Pero con la ayuda que recibí, me lancé a contratar un VPS al final. Al principio iba perdido, nunca había gestionado un servidor, pero cuando asimilas que es como gestionar tu ordenardor solo que en remoto, es decir todo lo que había hecho antes de instalar todo lo necesario pero en el servidor, todo fue rodado.
El servidor lo estoy haciendo en Node.js, para el tema de registros y login utilizo express para hacer las llamadas GET, POST, etc... Para conectar con la db utilizo mongoose, ya que también he instalado mongoDB.
El tema registro y login ya lo tengo terminado, para este juego, al ser tan sencillo, le he puesto que solo pida nick y password, no se puede recuperar contraseña ya que no quería pedir más datos. El registro más que nada es para guardar los resultados para los rankings y que no se solapen los nombres. Utilizo JWT para generar los tokens que después utilizo para realizar las peticiones necesarias.
Para la parte de comunicación en tiempo real con los clientes utilizo sockets.io, y es en la parte que estoy trabajando.
En seguridad voy perdido, es la verdad, utilizo contraseñas encriptadas, jwt, solo tengo abierto el puerto 3000 que es por donde trabaja Node, no tengo accesos a ninguna carpeta pública, el servidor no tiene contraseña, solo se puede entrar mediante llave ssh. Sí alguien me puede aconsejar en este tema o que tengo que tener en cuenta, estaría muy agradecido.
La app de node la tengo corriendo con pm2 para poder correr otras instancias o se reinicie automáticamente.
Cliente
Lo estoy haciendo en Unity, utilizo el asset Best Http Pro para gestionar todo el tema de peticiones http y sockets, es fácil de configurar y de trabajar con él. Los request y sockets los recibo en json.
La parte del cliente no tiene mucho trabajo, ya tengo terminado todo lo que es el login y registro así como controlados todos los errores que pueden surgir (nick repetido, nick corto, errores del servidor). También ya tengo los sockets funcionando con el servidor, pero sin lógica. Puedo recibir y emitir que es lo importante.
Y nada, ya solo queda lo es la mecánica del juego, recibir operaciones y resolver y enviar puntuaciones al servidor.
Diseño
Como ya comenté en la introducción, es un diseño sencillo, no me quería matar ni perder mucho tiempo, ya que es uno de mis puntos débiles y suelo perder mucho tiempo en ello, mi cabeza piensa más como programador que como diseñador, supongo que muchos saben de que hablo xD.
Como se puede ver muy poca cosa, lo justo para que sea funcional e intentando hacer el menos daño posible a ojos ajenos.
Me faltaría por terminar el área de juego así como los rankings.
Mi objetivo es tenerlo terminado para esta semana, en principio está pensado para IOS y Android, aunque he probado que también funcione en WebGL para poder enseñar más fácilmente. No creo que termine publicándolo en las tiendas.
Y nada más, se aceptan consejos, críticas y cualquier cosa que os apetezca.
Un saludo.