Exemple #1
0
    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,
        }
Exemple #2
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"]))
Exemple #3
0
    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())
Exemple #4
0
    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"])
Exemple #5
0
    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())
Exemple #6
0
    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())
Exemple #7
0
    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())
Exemple #8
0
    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())
Exemple #9
0
    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)
Exemple #10
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]))
Exemple #11
0
    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]))
Exemple #12
0
    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())
Exemple #13
0
    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)
Exemple #14
0
    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]))
Exemple #15
0
    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))