¿Qué hay en un nuevo juego social? Fundamentalmente, un juego es una "experiencia" construida en torno a una serie de interacciones entre el jugador, el contenido y otros jugadores. Por supuesto, el concepto del juego, el argumento, los personajes y los componentes sociales influyen enormemente en la experiencia de juego. Pero en el centro de la atracción de un juego están los objetos del mundo del juego, la mecánica asociada a estos objetos y las recompensas que se ofrecen a los jugadores. Para alimentar toda esta actividad virtual se necesita una base de datos escalable y de alto rendimiento.

En este blog, voy a compartir cómo Couchbase se puede utilizar para alimentar sus elementos básicos del juego - Objetos, Acciones y Recompensas

Objetos del juego

Cuando se construye un juego social en línea, se suelen representar elementos que forman parte del mundo del juego. Se denominan objetos de juego y pueden ser personajes del juego, objetos de vanidad, objetos funcionales y buffs, etc. Estos objetos se ven afectados por los acontecimientos del juego. Algunos ejemplos

 

Tipo de objeto de juego Valor del documento
Jugador
{
"tipo": "jugador",
"uuid": "35767d02-???a958",
"nombre": "DonPinto4540",
"puntuación":663,
"nivel":4,
"conectado": falso
}
Artículo
{
"tipo":"item",
"nombre":“Axe_e5890c94-­???11”,
"uuid":“e5890c94-­???11c6-­???”,
"ownerId":"Dale9887"
}
Monstruo
{
"tipo":"monstruo",
"nombre":"Goliat9932",
"uuid":“d10dfc1b-­???0412-­???41”,
"hitpoints":370,
"experienceWhenKilled":52,
}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 

 

 

En Couchbase, los documentos JSON se utilizan para modelar objetos de juego y se identifican utilizando el id del documento. Para estos documentos, el tipo se utiliza para definir el tipo de objeto almacenado.

Acciones del juego

Como parte del juego, los jugadores realizan acciones que pueden hacer que los objetos del juego se actualicen o cambien. Por ejemplo, los jugadores pueden desplazarse a distintas zonas de un mapa, realizar acciones y obtener recompensas, y recuperar las coordenadas de otros jugadores que se encuentren en ese momento en el juego. Cada una de estas acciones de los jugadores se traduce en la visualización, adición, eliminación o actualización de documentos en la base de datos.  
 
En realidad, en los juegos sociales juegan varios jugadores al mismo tiempo y sus acciones pueden afectar al mismo objeto. Por ejemplo, las acciones realizadas en un juego pueden requerir "energía" y una vez que un jugador se queda sin "energía", necesita recargarla. En los juegos sociales es bastante común encontrar objetos como aceleradores y paquetes de energía, que dan un rápido impulso de "energía" al jugador. Pero lo divertido es competir por el número limitado de paquetes de "energía" del juego. El acceso a los objetos compartidos del juego necesita ser sincronizado para evitar conflictos y mantener un estado consistente del juego. Couchbase Server proporciona ambas cosas optimista y pesimista control de concurrencia.
 
He aquí cómo utilizar estos mecanismos de concurrencia. Supongamos que dos jugadores quieren conectar la misma casa-árbol al mismo tiempo. Utilizando los métodos CAS y la lógica de reintento, los programadores de juegos pueden garantizar actualizaciones atómicas de objetos de juego compartidos globales para mantener un estado de juego consistente.
 

Recompensas del juego

La mayoría de los juegos tienen una estructura compuesta por un ciclo de acciones y recompensas. Los sistemas de puntuación se utilizan en los juegos para que los jugadores puedan medir hasta qué punto dominan el juego y también para hacerlo un poco adictivo. Se suele utilizar una tabla de clasificación para registrar a los jugadores con mejores puntuaciones.

Las tablas de clasificación de juegos pueden crearse en Couchbase Server 2.0 utilizando vistas. A ver en Couchbase se escribe usando funciones map/reduce que generan un índice. Para los objetos de juego JSON mostrados en la sección de objetos de juego, se puede utilizar una función map (como se muestra a continuación) para generar una lista de puntuaciones de los jugadores. Si el campo jsonType del documento es de tipo jugador, emitimos la puntuación del jugador y el id.

función (doc) {

 si (doc.jsonType == "jugador"){

   emite(["Puntuación",  doc.puntuación], doc._id);

 }

}

La función de mapa anterior puede utilizarse para crear una especie de tabla clasificatoria. Depende de cómo lo consultemos. Las vistas pueden ser consultadas usando la API REST o usando otros SDKs como PHP.

  1. A consultar la vista mediante REST puede utilizar el siguiente comando curl -

curl -X GET -H 'Content-Type: application/json'

http://bucketname:contraseña@localhost:8092/bucketname/_diseño/designdocname/_vista/

viewname?descending=true&connection_timeout=60000&limit=10&skip=0'

  1. Para consultar la vista utilizando PHP puede utilizar el fragmento de código que se muestra a continuación e imprimir las puntuaciones de los 10 mejores jugadores -  

/* Configurar objeto de conexión couchbase */

$lbview = $cb->getView(bucketname, viewname);

$apage = $lbview->obtenerResultado(matriz("descendente" => verdadero));

$rowCtr = 0;

foreach($apage->filas AS $row) {

 si($rowCtr <= 9)

 {

  printf("Puntuación %s para el usuario %s.n, $row->clave[1], $row->valor);

   $rowCtr = $rowCtr + 1;

  }

   si no

      romper;

}

Reflexiones finales

Hay un poco de código de aplicación que tiene que ocurrir aquí para traducir la salida de la vista mapreduce en un formato útil, pero en general crankin 'fuera una tabla de clasificación utilizando Couchbase es super fácil. Espero que esto ayude a alguien a utilizar las nuevas características de Couchbase Server 2.0 (vistas). Para una visión más detallada de las vistas, consulta la documentación: http://www.couchbase.com/docs/couchbase-manual-2.0/couchbase-views.html
¡A jugar!

Autor

Publicado por Don Pinto, Director Principal de Producto, Couchbase

Don Pinto es Gerente Principal de Producto en Couchbase y actualmente está enfocado en avanzar las capacidades de Couchbase Server. Es un apasionado de la tecnología de datos, y en el pasado ha escrito varios artículos sobre Couchbase Server, incluyendo blogs técnicos y libros blancos. Antes de unirse a Couchbase, Don pasó varios años en IBM, donde desempeñó el papel de desarrollador de software en el grupo de gestión de la información DB2 y, más recientemente, como director de programa en el equipo de SQL Server en Microsoft. Don tiene un máster en informática y una licenciatura en ingeniería informática por la Universidad de Toronto, Canadá.

2 Comentarios

  1. ¿Serían las vistas lo suficientemente rápidas como para generar tablas de clasificación a partir de los amigos de Facebook de cada usuario?

  2. Obtener clasificaciones de jugadores con vistas:
    http://www.couchbase.com/usin

Dejar una respuesta