Tras empezar con la aplicación desde el template de Jason Taylor y desechar lo que viene de ejemplo tenemos casi un lienzo en blanco, pero ya tenemos la estructura de usuarios y roles que trae por defecto y será más que suficiente por el momento. Lo siguiente es comenzar por los juegos de NES, que es lo que se va a coleccionar (también de momento, más adelante se ampliará).
Creé la entidad Template. Creo que es el nombre apropiado ya que al iniciar una partida obtendremos los juegos de ella y los copiaremos en otra tabla. La entidad reza así:
public class Template : BaseEntity
{
public string Name { get; set; } = default!;
public string? Description { get; set; }
public int? Year { get; set; }
public string? Manufacturer { get; set; }
public string? Genre { get; set; }
public string ImageUrl { get; set; } = default!;
public int RarityLevel { get; set; } = 1;
public int InitialPrice { get; set; } = 0;
}
Mi idea es que en cada partida se copien como he dicho los juegos de Template a otra tabla y se generen los precios iniciales y la rareza, teniendo en Template un nivel de rareza y un precio iniciales. Puede que al crear una partida copie directamente los precios o puede que los genere aleatoriamente. Sí, me estoy adelantando demasiado! En principio para la primera versión directamente usaré los valores que tenga ahí y no me cierro a la otra opción, me gusta dejarlo preparado.
Ahora bien, necesito por un lado un listado de juegos de NES con los datos básicos de la clase, otro con los precios y por último las imágenes. Como mi memoria es bastante limitada y no se me ocurrió escribir antes de empezar a programar, no recuerdo bien de donde saqué los dos primeros listados. El primero está claro que lo saqué de algún .dat de un emulador, ya que tiene todos los datos más el nombre de la ROM, en XML. Creé un servicio para importar todos los datos:
foreach (var gameElement in xDoc.Root.Elements("game"))
{
var game = new Template
{
Name = gameElement.Attribute("name")?.Value ?? string.Empty,
Description = gameElement.Element("description")?.Value,
Year = int.TryParse(gameElement.Element("year")?.Value, out int year) ? year : null,
Manufacturer = gameElement.Element("manufacturer")?.Value,
Genre = gameElement.Element("genre")?.Value,
ImageUrl = gameElement.Element("rom")?.Attribute("name")?.Value ?? string.Empty
}
games.Add(game);
}
Sencillo. Tomo los datos necesarios, y genero como nombre de la imágen el nombre de la ROM que luego haré coincidir. El segundo hice una mezcla entre un listado con rarezas y precios que encontré, pero modificándolos para hacerlo un poco más heterogeneo pensando en que a la hora de jugar debe haber más juegos comunes que raros y más baratos que caros haciendo una especie de escalera con ellos. No le doy demasiada importancia, no quiero que sea un reflejo de la realidad y siempre podremos ajustarlos (o hacerlos aleatorios) en un futuro.
Para las imágenes usé directamente un scrapper de un frontend y con un pequeño script obtuve las imágenes renombradas y listas en una carpeta. Las guardo en MinIO para usarlas cuando llegue a esa parte y listo.

Y como siempre pensando en el futuro descargué la carátula y el lomo de cada juego. Cuando en nuestro juego vayamos a comprar a una tienda me gustaría mostrar el lomo en una estantería en lugar de la carátula, ya que esto hará que si los desordeno el jugador tenga que distinguirlos y se pueda dejar uno por no revisar bien en lugar de ir a tiro hecho ( lo mismo que en una tienda de verdad, más o menos)
Recapitulando:
- Tenemos los juegos en una tabla, con rareza y precio.
- Tenemos las imágenes preparadas
Para el próximo post detallaré los métodos que he hecho y servirán para interactuar con todo esto: Crear una partida, asignar juegos a la sesión del jugador, etc.