¿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.
-
A consultar la vista mediante REST puede utilizar el siguiente comando curl -
curl -X GET -H 'Content-Type: application/json'
https://bucketname:contraseña@localhost:8092/bucketname/_diseño/designdocname/_vista/
viewname?descending=true&connection_timeout=60000&limit=10&skip=0'
-
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: https://www.couchbase.com/docs/couchbase-manual-2.0/couchbase-views.html
¡A jugar!
¿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?
Obtener clasificaciones de jugadores con vistas:
https://www.couchbase.com/usin…