Files
farolero/lib/modelos/partida.dart
ShanaiaBot de2c8ffa18 El Impostor v0.1 — app Flutter completa
Juego de deducción social para 3-20 jugadores.
Modo un solo móvil completamente funcional.
1000 palabras en 10 categorías.
Notas privadas, votación, adivinanza, revancha.
Material 3 dark theme.
Package: es.freetimelab.elimpostor
2026-04-04 00:50:04 +02:00

80 lines
2.0 KiB
Dart

import 'jugador.dart';
/// Configuración de una partida
class ConfigPartida {
final bool modoMultimovil;
final String categoria; // 'todas' o nombre de categoría
final int numImpostores;
final bool pistaImpostor;
final int? tiempoDebateSegundos; // null = sin límite
const ConfigPartida({
this.modoMultimovil = false,
this.categoria = 'todas',
this.numImpostores = 1,
this.pistaImpostor = false,
this.tiempoDebateSegundos,
});
}
/// Fases del juego
enum FaseJuego {
configuracion,
verPalabra,
debate,
votacion,
resultado,
adivinanza, // El impostor intenta adivinar la palabra
finPartida,
}
/// Resultado de una ronda de votación
class ResultadoVotacion {
final String eliminadoId;
final String eliminadoNombre;
final bool eraImpostor;
final Map<String, String> votos; // votante -> votado
const ResultadoVotacion({
required this.eliminadoId,
required this.eliminadoNombre,
required this.eraImpostor,
required this.votos,
});
}
/// Estado completo de una partida
class Partida {
final ConfigPartida config;
final List<Jugador> jugadores;
final String palabraSecreta;
final String categoriaReal;
FaseJuego fase;
int rondaActual;
final List<ResultadoVotacion> historialVotaciones;
String? ganador; // 'jugadores' | 'impostores' | null
Partida({
required this.config,
required this.jugadores,
required this.palabraSecreta,
required this.categoriaReal,
this.fase = FaseJuego.verPalabra,
this.rondaActual = 1,
List<ResultadoVotacion>? historialVotaciones,
this.ganador,
}) : historialVotaciones = historialVotaciones ?? [];
List<Jugador> get jugadoresActivos =>
jugadores.where((j) => !j.eliminado).toList();
List<Jugador> get impostoresActivos =>
jugadoresActivos.where((j) => j.esImpostor).toList();
List<Jugador> get jugadoresNormalesActivos =>
jugadoresActivos.where((j) => !j.esImpostor).toList();
int get impostoresTotales =>
jugadores.where((j) => j.esImpostor).length;
}