2010-10-08 16 views
6

Me gustaría construir un juego de iPhone para el Game Center y actualmente estoy investigando el servidor como parte de todo. Aprendo mejor con el ejemplo y estoy teniendo un tiempo difícil encontrar algún ejemplo de servidores de juegos simples que demuestran ...Ejemplos de código para servidores de juegos simples

  1. ¿Cómo se formatea y se envían al servidor de datos y cómo se recibe
  2. Cómo autenticar los datos que se están enviando/recibidas a evitar que los jugadores hacer trampa, etc.
  3. Cómo el código de servidor del juego está estructurado junto con el DB

me gustaría construir el servidor del juego usando Ruby on Rails, aunque me conformaré con cualquier ejemplo usando cualquier marco solo para entender cómo estos los conceptos funcionan. ¿Alguien sabe de algún libro o recurso en línea que haya cubierto esto o que muestre algún código de ejemplo sobre cómo construir un servidor de juegos?

Tendría que pensar que la mayoría de los juegos multijugador en el iPhone requieren un servidor de jugador, sin embargo, parece que no encuentro ningún recurso que discuta cómo construir uno. Alguno de los recursos que encuentro que analiza la creación de juegos multijugador (incluidos los documentos de Apple) dice lo mismo, "Desarrollar un servidor de juego está fuera del alcance de este libro, pero nos centraremos en el código del lado del cliente necesario para conectarse a dicho servidor "

¡Muchas gracias de antemano por su ayuda!

EDIT: algunos detalles más sobre lo que estoy tratando de lograr ...

Estoy tratando de desarrollar un jugador de dos (posiblemente más) juego que donde los usuarios compiten para resolver un rompecabezas más rápido que el otro jugador. La creación de partidas será realizada por Game Center, pero necesitaré un servidor de juego que comience/administre los juegos y almacene los resultados en un DB. El proceso general será algo así como ...

pares
  1. centro de juego de hasta dos jugadores
  2. Los datos del jugador se envía al servidor para iniciar un nuevo juego
  3. el inicio del juego está sincronizado por la servidor
  4. el juego comienza y cada jugador intenta resolver el rompecabezas
  5. cuando cualquiera de los acabados jugador, el servidor se notifica
  6. tan pronto como ambos jugadores terminan, el servidor responde con los resultados y los resultados son almacenado en el servidor.
+1

¿Nos puede dar un poco más detalles? ¿Qué tipo de juego estás desarrollando? ¿Solo necesitas emparejar? ¿Todo el estado del juego está en el servidor o el iPhone se encarga de calcular todo? Qué tan importante es la sincronización, p. ¿necesita actualizaciones cada 10 ms? 1000 ms? ¿O es incluso un juego basado en ronda?También tenga en cuenta que RoR sigue siendo un marco orientado a solicitudes, no algo que uno usualmente usa para conexiones de socket a largo plazo. Recientemente construí uno en Node.js, funcionó muy bien. –

+0

Gracias, Ivo, acabo de agregar algunos detalles más. Buscaré en Node.js para esto, ya que también he querido jugar con ese framework. ¿Me puede dar alguna sugerencia para descubrir cómo hacer lo que hizo? – BeachRunnerFred

Respuesta

4

Bien, después de leer su edición, Node.js debería hacer el trabajo bastante bien, creo.

En cuanto a sus puntos:

  1. no sé exactamente cómo las obras de emparejamiento (supongo que se obtiene un par de claves o así para validar las solicitudes), pero debería ser difícil de implementar, sin tener en cuenta el lenguaje de programación.

  2. Fácil: configure un servidor, maneje conexiones, mantenga una lista de juegos en ejecución, para cada juego mantenga un registro del estado (jugadores, tiempo, etc.), que debería estar al máximo (bien dependiendo del mensaje que le procotol utilizar..) 150-200 líneas

  3. Simplemente envíe un tipo de evento listo para cada uno de los jugadores en un juego determinado cuando considere que el juego está listo (como todos tocaron el botón "Estoy listo")

  4. OK, aquí algunos consejos:

    1. seguimiento del tiempo restante/transcurrido en el servidor y enviar a los jugadores, temporizadores bajar muy rápidamente (tuve 4-5 segundos fuera en casi 3 minutos)

    2. Para evitar cheati ng, valida los movimientos en el servidor, eso debería ser bastante fácil en caso de un juego de rompecabezas. También podría verificar los tiempos entre cada movimiento, todo lo que sea inferior a 50 ms debería ser sospechoso, pero eso depende principalmente de la dificultad de los acertijos.

  5. Al marcar los movimientos en el servidor esto es bastante fácil también, usted no tiene que depender de un cliente que envía un mensaje de "Mira que he terminado".

  6. Nuevamente, envíe los eventos con los datos que lo acompañan y registre los puntos en la base de datos.

El punto más importante es, obviamente, la prevención de fraude, en caso de un juego de puzzle donde la solución puede ser resuelto fácilmente por un ordenador, es imposible evitar por completo. Aunque, con los consejos anteriores, puede hacerlo más difícil.

Pero tenga en cuenta que no se puede evitar que las personas infrinjan los puntajes más altos cuando el juego es simple, crear más y más protección en el juego simplemente no tiene sentido. Céntrate en el juego, hazlo interesante y simple para humanos pero complejo e impredecible para computadoras.

En el caso del DB, eh ... Supongo que podrías usar MongoDB para eso, pero aún no he jugado con eso en Node.

Ah, y si quieres una impresión de lo que puede hacer con Node.js aquí es el juego que he construido:
http://github.com/BonsaiDen/NodeGame-Shooter

Toda la lógica se ejecuta en el servidor, los clientes simplemente dibujar las cosas ellos saben, tuve un prototipo jugable en funcionamiento en dos noches.

+0

¡Es por eso que amo SO! Realmente aprecio tu esfuerzo, voy a empezar a investigar ahora mismo. – BeachRunnerFred

0

Recientemente construí una aplicación de servidor de cliente, la del servidor se basó en Netty. Hay una serie de excelentes ejemplos de cómo las cosas podrían funcionar en su sitio web. Resultó funcionar bien también. Para un juego, también podrías considerar utilizar ProtoBuffers de Google; un ejemplo de esto también está en el sitio de Netty.

0

Para que lo sepas, GameKit API incluye una funcionalidad que te permite enviar datos a los otros jugadores en tu juego. Puede que desee considerar usar esto, ya que le ahorrará mucho trabajo construir un servidor de juegos desde cero y podrá hacer uso de la infraestructura de red bien probada de Apple.

Cuestiones relacionadas