def __init__( self, jugadores: List[str] = [], vidas_iniciales: int = 3, repartidor: 'Repartidor' = Repartidor(), ) -> None: self.validar_jugadores(jugadores) self._terminado: bool = False self._jugadores: List[str] = jugadores self._turno_de: int = 0 self._puntaje: int = 0 self._pistas_restantes: int = 7 self._vidas: int = vidas_iniciales self._repartidor: 'Repartidor' = repartidor tamanio_mano = 5 if len(jugadores) < 4 else 4 self._cartas_por_jugador: Dict[str, List[Tuple[int, str]]] = {} self._pistas_por_jugador: Dict[str, List[Set[Union[str, int]]]] = {} for jugador in self._jugadores: self._cartas_por_jugador[jugador] = self._repartidor.repartir( tamanio_mano) self._pistas_por_jugador[jugador] = [ set() for _ in range(tamanio_mano) ] self._tablero = { "Rojo": 0, "Verde": 0, "Azul": 0, "Blanco": 0, "Amarillo": 0, }
def test_juego_no_se_agregan_pistas_si_no_se_agrega_carta(self) -> None: jugadores = ["Román", "Ramón"] juego = Juego(jugadores, 3, Repartidor(self.mezclar_mazo_minimal)) juego.descartar(0) pistas_de = juego.pistas_por_jugador() self.assertEqual(4, len(pistas_de["Román"]))
def test_juego_cambia_el_turno_al_dar_pista(self) -> None: jugadores = ["Román", "Ramón"] juego = Juego(jugadores, 3, Repartidor(self.mezclar_mazo_minimal_mezcladito)) juego.dar_pista("Número", 1, "Ramón") self.assertEqual("Ramón", juego.turno_de())
def test_juego_descartar_carta_no_recupera_con_mazo_vacio(self) -> None: jugadores = ["Román", "Ramón"] juego = Juego(jugadores, 3, Repartidor(self.mezclar_mazo_minimal)) juego.descartar(0) cartas_de = juego.cartas_por_jugador() self.assertEqual(4, len(cartas_de["Román"])) self.assertFalse((1, "Azul") in cartas_de["Román"])
def test_juego_no_se_puede_dar_pista_a_si_mismo(self) -> None: jugadores = ["Román", "Ramón"] juego = Juego(jugadores, 3, Repartidor(self.mezclar_mazo_minimal_mezcladito)) self.assertRaises(JuegoPistaASiMismoException, juego.dar_pista, "Número", 1, "Román") self.assertEqual(7, juego.pistas_restantes()) self.assertEqual("Román", juego.turno_de())
def test_juego_pista_tiene_que_ser_de_alguien_en_partida(self) -> None: jugadores = ["Román", "Ramón"] juego = Juego(jugadores, 3, Repartidor(self.mezclar_mazo_minimal_mezcladito)) self.assertRaises(JuegoPistaSinDestinatarioException, juego.dar_pista, "Color", "Blanco", "Mirtha") self.assertEqual(7, juego.pistas_restantes()) self.assertEqual("Román", juego.turno_de())
def test_juego_tipo_de_pista_invalida(self) -> None: jugadores = ["Román", "Ramón"] juego = Juego(jugadores, 3, Repartidor(self.mezclar_mazo_minimal_mezcladito)) self.assertRaises(JuegoTipoDePistaInvalidoException, juego.dar_pista, "Sonamos", 1, "Ramón") self.assertEqual(7, juego.pistas_restantes()) self.assertEqual("Román", juego.turno_de())
def test_juego_descartar_carta_recupera_pista(self) -> None: jugadores = ["Román", "Ramón"] juego = Juego(jugadores, 3, Repartidor(self.mezclar_mazo_minimal_mezcladito)) juego.dar_pista("Número", 1, "Ramón") self.assertEqual(6, juego.pistas_restantes()) juego.descartar(0) self.assertEqual(7, juego.pistas_restantes())
def test_juego_se_descartan_las_pistas_junto_con_la_carta(self) -> None: jugadores = ["Román", "Ramón"] juego = Juego(jugadores, 3, Repartidor(self.mezclar_mazo_minimal_mezcladito)) juego.dar_pista("Número", 1, "Ramón") juego.descartar(0) pistas_de = juego.pistas_por_jugador() self.assertTrue(len(pistas_de["Ramón"][-1]) == 0)
def test_juego_dar_pista_sobre_color(self) -> None: jugadores = ["Román", "Ramón"] juego = Juego(jugadores, 3, Repartidor(self.mezclar_mazo_minimal_mezcladito)) juego.dar_pista("Color", "Amarillo", "Ramón") pistas_de = juego.pistas_por_jugador() self.assertTrue( all("Amarillo" in pistas_de["Ramón"][i] for i in [0, 2, 4])) self.assertTrue(all(len(pistas_de["Ramón"][i]) == 0 for i in [1, 3]))
def test_juego_dar_pista_sobre_numero(self) -> None: jugadores = ["Román", "Ramón"] juego = Juego(jugadores, 3, Repartidor(self.mezclar_mazo_minimal_mezcladito)) juego.dar_pista("Número", 1, "Ramón") pistas_de = juego.pistas_por_jugador() self.assertTrue(all("1" in pistas_de["Ramón"][i] for i in [0, 1])) self.assertTrue(all( len(pistas_de["Ramón"][i]) == 0 for i in [2, 3, 4]))
def test_juego_tienen_que_haber_pistas_disponibles(self) -> None: jugadores = ["Román", "Ramón"] juego = Juego(jugadores, 3, Repartidor(self.mezclar_mazo_minimal_mezcladito)) for _ in range(3): juego.dar_pista("Número", 1, "Ramón") juego.dar_pista("Número", 1, "Román") juego.dar_pista("Número", 1, "Ramón") self.assertRaises(JuegoSinPistasDisponiblesException, juego.dar_pista, "Número", 1, "Román") self.assertEqual(0, juego.pistas_restantes()) self.assertEqual("Ramón", juego.turno_de())
def repartidor_rojo_verde(self) -> 'Repartidor': def mezclar(mazo: List[Tuple[int, str]]) -> None: self.mezclar_mazo_minimal(mazo) mazo.append((1, "Rojo")) mazo.append((2, "Rojo")) mazo.append((3, "Rojo")) mazo.append((4, "Rojo")) mazo.append((5, "Rojo")) mazo.append((1, "Verde")) mazo.append((2, "Verde")) mazo.append((3, "Verde")) mazo.append((4, "Verde")) mazo.append((5, "Verde")) return Repartidor(mezclar)
def test_juego_tomar_accion_de_dar_pista(self) -> None: jugadores = ["Román", "Ramón"] juego = Juego(jugadores, 3, Repartidor(self.mezclar_mazo_minimal_mezcladito)) accion = { 'jugador': "Román", 'accion': 'PISTA', 'pista_a': "Ramón", 'tipo': "Color", 'valor': "Amarillo" } juego.tomar_accion(accion) pistas_de = juego.pistas_por_jugador() self.assertTrue( all("Amarillo" in pistas_de["Ramón"][i] for i in [0, 2, 4])) self.assertTrue(all(len(pistas_de["Ramón"][i]) == 0 for i in [1, 3]))
def iniciar_juego_en(self, lobby_id: str) -> None: self._validar_lobby_existente(lobby_id) self._validar_partida_no_iniciada(lobby_id) jugadores = self._lobbies_por_id[lobby_id].jugadores() self._juegos_por_id[lobby_id] = Juego(jugadores, 3, Repartidor(self._mezcladora))