martes, 24 de enero de 2012

El reto I: Crear un juego en 15 días. Días 4 y 5

Como ayer no puede postear lo que había hecho, hoy junto los dos días. Y como se con lo que voy a estar hoy (por que es una continuación de lo de ayer), me puedo adelantar a los acontecimientos del día 5.

Ayer entre unas cosas y otras no me pude poner mucho rato, así que avance poca cosa.

Puntuaciones y bases de datos

Una de las características que va a tener el juego es que van a haber tablas de puntuaciones globales, por lo que todos competirán con todos para tener la mejor puntuación posible. La idea es crear varios rankings para fomentar la competición: Mejores puntuaciones globales, mejores de la semana y mejores del día.

Esto va a constar de dos partes, por un lado tengo una base de datos local donde almacenare los datos del jugador (un perfil por terminal). En esta base de datos almacenare un identificador único que me servirá para diferenciarlo del resto de jugadores y la puntuación más alta que consiga, que es la que cuenta. Cuando supere esta puntuación se actualizará en el terminal.

Por otro lado crearé un WebService que “ataque” a una base de datos SQL donde almacenaré las puntuaciones de todos los jugadores. Éste WebService tendrá dos métodos principales, uno para recuperar las puntuaciones y otro para guardarlas. Ya veré donde alojo estos servicios.

Para crear las bases de datos en local, que es una nueva característica de la versión mango, primero he leido un magnifico tutorial en el blog de Josue Yeray, un hacha en el desarrollo para WP7. Aquí explica lo básico para trabajar con bases de datos locales, yo básicamente he seguido el tutorial con alguna pequeña modificación, ya que es justo lo que necesitaba.

He creado el contexto de datos:

public class AppDbContext : DataContext
{
public AppDbContext(string connectionString)
: base(connectionString)
{

}

public Table<Datos> DatosJugador
{
get { return this.GetTable<Datos>(); }
}
}



Luego, simplemente, la primera vez que se entra en el juego crea la base de datos y los datos del jugador:

 using (var context = new AppDbContext("Data Source='isostore:/XXXXX.sdf'"))
{
if (!context.DatabaseExists())
{
context.CreateDatabase();

var datos = new Datos {IdentificadorJugador = Guid.NewGuid(), Puntuacion = 0};
context.DatosJugador.InsertOnSubmit(datos);
context.SubmitChanges();
}
else
{
RecuperarDatosUsuario();
}
}



Por último, para recuperar los datos necesarios, uso sentencias LINQ:

private void RecuperarDatosUsuario()
{
using (AppDbContext context = new AppDbContext("Data Source='isostore:/XXXXXX.sdf'"))
{
var datosUsuario = (from d in context.DatosJugador
select d).FirstOrDefault();

txtUsuario.Text = datosUsuario.IdentificadorJugador.ToString();
}
}



Hoy crearé la base de datos SQL y el WebService.


Nos leemos!

No hay comentarios:

Publicar un comentario