Rust Generator¶
El generador de sobres es un binario independiente escrito en Rust. Su responsabilidad es única: dado un pool de cartas y una semilla, sortear las cartas del sobre aplicando los pesos de rareza y devolver el resultado por stdout como JSON.
Crates¶
| Crate | Uso |
|---|---|
serde + serde_json |
Parsear el pool de entrada y generar el JSON de salida |
rand |
RNG base — traits y distribuciones |
rand_chacha |
Implementación de ChaCha8Rng con semilla fija |
assert_json_diff |
Comparar JSONs en tests de forma legible |
Interfaz¶
Java llama al binario vía ProcessBuilder pasando el input por stdin como JSON.
El pool llega por stdin y no por argumentos de línea de comandos para evitar límites
de longitud del sistema cuando el pool es grande.
Input (stdin):
{
"seed": 8472918374,
"slots": [
{ "rarity": "COMMON", "count": 3 },
{ "rarity": "UNCOMMON", "count": 1 },
{ "rarity": "RARE", "count": 1 }
],
"pool": [
{ "id": "uuid-1", "rarity": "COMMON", "stat_hp_base": 50, "stat_hp_range": 10, "stat_atk_base": 40, "stat_atk_range": 8, "stat_def_base": 45, "stat_def_range": 5, "stat_spd_base": 60, "stat_spd_range": 12 },
{ "id": "uuid-2", "rarity": "UNCOMMON", "stat_hp_base": 65, "stat_hp_range": 12, "stat_atk_base": 55, "stat_atk_range": 10, "stat_def_base": 50, "stat_def_range": 8, "stat_spd_base": 70, "stat_spd_range": 10 },
{ "id": "uuid-3", "rarity": "RARE", "stat_hp_base": 80, "stat_hp_range": 15, "stat_atk_base": 70, "stat_atk_range": 12, "stat_def_base": 65, "stat_def_range": 10, "stat_spd_base": 85, "stat_spd_range": 8 }
]
}
Output (stdout):
{
"seed": 8472918374,
"cards": [
{ "base_card_id": "uuid-1", "rarity": "COMMON", "stat_hp": 54, "stat_atk": 43, "stat_def": 47, "stat_spd": 66 },
{ "base_card_id": "uuid-1", "rarity": "COMMON", "stat_hp": 52, "stat_atk": 41, "stat_def": 45, "stat_spd": 68 },
{ "base_card_id": "uuid-1", "rarity": "COMMON", "stat_hp": 55, "stat_atk": 44, "stat_def": 49, "stat_spd": 63 },
{ "base_card_id": "uuid-2", "rarity": "UNCOMMON", "stat_hp": 71, "stat_atk": 59, "stat_def": 55, "stat_spd": 76 },
{ "base_card_id": "uuid-3", "rarity": "RARE", "stat_hp": 88, "stat_atk": 74, "stat_def": 69, "stat_spd": 89 }
]
}
Lógica de generación¶
- Inicializar
ChaCha8Rngcon el seed recibido - Para cada slot del sobre:
- Filtrar el pool por la rareza del slot
- Elegir una carta aleatoria del pool filtrado
- Para cada stat: sortear entre
stat_baseystat_base + stat_range
- Devolver las cartas generadas por stdout