예제 #1
0
def actualizar_tablero(window, tablero, parametros, jugador):
    """
    Función para actualizar la ventana del tablero con el cambio de fichas.

    Parámetros:
        - window (sg.Window): ventana del tablero.
        - tablero (dict): diccionario con la información del tablero.
        - parametros (dict): diccionario con párametros que controlan la lógica del juego.
        - jugador (Jugador): instancia de la clase Jugador que representa al usuario.
    """

    jugador.cambios_restantes -= 1
    actualizar_tabla(jugador, tablero["computadora"], window)
    
    if not jugador.cambios_restantes:
        window["cambiar"].Update(disabled=True)
        
    tablero["turno"] = "Computadora"
    window["turno"].Update("Computadora")
    
    if parametros["letra_seleccionada"]:
        window[parametros["letra"]].Update(button_color=("white", "green"))
        parametros["letra"] = -1
        
    reiniciar_parametros(parametros)
예제 #2
0
def finalizar_partida(window, tablero, parametros):
    """
    Función que muestra el mensaje de fin de la partida.

    Se informa el ganador o si hubo un empate.

    Parámetros:
        - window (sg.Window): ventana del tablero.
        - tablero (dict): diccionario con la información del tablero.
        - parametros (dict): diccionario con párametros que controlan la lógica del juego.

    Retorna:
        - (bool): siempre devuelve False, indica que la partida terminó.
    """

    parametros["fin_juego"] = True

    if parametros["jugada"]:
        reproducir_sonido_palabra(False)

    jugador = tablero["jugador"]
    computadora = tablero["computadora"]
    bolsa_de_fichas = tablero["bolsa_de_fichas"]

    for usuario in (jugador, computadora):
        for letra in usuario.fichas:
            usuario.puntaje -= bolsa_de_fichas[letra]["puntaje"]

    actualizar_tabla(jugador, computadora, window)

    fichas_reales_pc = parametros[
        "fichas_reales_pc"] if "fichas_reales_pc" in parametros else computadora.fichas
    for i, letra in zip(range(8, 15), fichas_reales_pc):
        window[i].Update(letra)

    for key in ("Posponer", "Pausa", "confirmar", "cambiar", "Pasar"):
        window[key].Update(button_color=sg.DEFAULT_BUTTON_COLOR, disabled=True)

    aux = "el jugador" if jugador.nick == "Jugador" else jugador.nick
    mensaje = "¡Fin de la partida! "
    if jugador.puntaje > computadora.puntaje:
        mensaje += f"Ganó {aux} con {jugador.puntaje} puntos."
    elif jugador.puntaje < computadora.puntaje:
        mensaje += f"Ganó la computadora con {computadora.puntaje} puntos."
    else:
        mensaje += "Hubo un empate."
    sg.Popup(mensaje + "\n",
             title=" Fin de la partida",
             custom_text=(" Aceptar ", None))

    historial = parametros["historial"]
    historial += "\n\n - " + mensaje
    window["historial"].Update(historial)
    window["Salir"].Update(visible=True)
    window["Terminar"].Update(visible=False)

    return False
def confirmar_palabra(window, parametros, tablero):
    """
    Función usada para confirmar la palabra ingresada por el jugador.

    Parámetros:
        - window (sg.Window): ventana del tablero.
        - parametros (dict): diccionario con párametros que controlan la lógica del juego.
        - tablero (dict): diccionario con la información del tablero.
    """

    jugador = tablero["jugador"]
    jugada = parametros["jugada"]
    quedan_fichas = len(fichas_totales(tablero["bolsa_de_fichas"])) >= len(jugada)
    letras_jugador = jugador.fichas
    es_correcta = verificar_palabra(parametros, tablero)
    if parametros["letra_seleccionada"]:
        window[parametros["letra"]].Update(button_color=("white", "green"))
        parametros["letra_seleccionada"] = False
    if es_correcta:
        tablero["primer_jugada"] = False
        palabra = palabra_formada(letras_jugador, jugada)
        puntos_jugada = contar_jugada(
            window, palabra, list(jugada.keys()), tablero, parametros["casillas_especiales"], jugador
        )[1]
        finalizar_jugada(window, parametros, tablero, palabra, puntos_jugada, jugador, "El jugador")
        reiniciar_parametros(parametros)
        if quedan_fichas:
            for posicion in jugada:
                letra = letra_random(tablero["bolsa_de_fichas"])
                letras_jugador[jugada[posicion]] = letra
                window[jugada[posicion]].Update(letra, disabled=False, button_color=("white", "green"))
            tablero["turno"] = "Computadora"
            window["turno"].Update("Computadora")
        else:
            for letra in palabra:
                letras_jugador.remove(letra)
            parametros["fin_juego"] = True
            parametros["historial"] += "\n\n - Fin de la partida. No quedan suficientes fichas para repartir."
            window["historial"].Update(parametros["historial"])
        actualizar_tabla(jugador, tablero["computadora"], window)
    reproducir_sonido_palabra(es_correcta)
def repartir_nuevas_fichas(tablero, parametros, window):
    """
    Función usada para repartir nuevas fichas a la computadora.

    Parámetros:
        - tablero (dict): diccionario con la información del tablero.
        - parametros (dict): diccionario con párametros que controlan la lógica del juego.
        - window (sg.Window): ventana del tablero.
    """

    bolsa_de_fichas = tablero["bolsa_de_fichas"]
    computadora = tablero["computadora"]
    if len(fichas_totales(bolsa_de_fichas)) >= 7:
        if computadora.cambios_restantes:
            computadora.cambios_restantes -= 1
            for letra in computadora.fichas:
                bolsa_de_fichas[letra]["cantidad_fichas"] += 1
            computadora.fichas.clear()
            for posicion_atril in range(8, 15):
                window[posicion_atril].Update(button_color=("white", "green"))
            repartir_fichas(bolsa_de_fichas, computadora.fichas)
            parametros[
                "historial"] += "\n\n - La computadora no pudo formar ninguna palabra, se le repartieron nuevas fichas."
            window["historial"].Update(parametros["historial"])
            actualizar_tabla(tablero["jugador"], tablero["computadora"],
                             window)
        else:
            parametros["fin_juego"] = True
            parametros[
                "historial"] += "\n\n - La computadora no pudo formar ninguna palabra y no dispone de cambios suficientes."
            window["historial"].Update(parametros["historial"])
    else:
        parametros[
            "historial"] += "\n\n - La computadora no pudo formar ninguna palabra y no hay fichas suficientes para repartir."
        window["historial"].Update(parametros["historial"])
        parametros["fin_juego"] = True
예제 #5
0
def crear_ventana_tablero(tablero, parametros, partida_anterior):
    """
    Función usada para crear la ventana del tablero.

    Parámetros:
        - tablero (dict): diccionario que contiene información del tablero.
        - parametros (dict): diccionario que contiene párametros usados para controlar la lógica del juego.
        - partida_anterior (dict): diccionario que contiene información de la partida anterior.

    Retorna:
        - window (sg.Window): ventana del tablero.
    """

    tablero_juego = [[
        sg.Button("",
                  size=(3, 1),
                  key=(i, j),
                  pad=(0.5, 0.5),
                  button_color=("white", "green"))
        for j in range(tablero["tamanio"])
    ] for i in range(tablero["tamanio"])]

    fichas_jugador = [
        sg.Button(tablero["jugador"].fichas[i],
                  size=(3, 1),
                  key=i,
                  pad=(0.5, 0.5),
                  button_color=("white", "green")) for i in range(7)
    ]

    fichas_pc = [
        sg.Button("?",
                  size=(3, 1),
                  key=i + 8,
                  pad=(0.5, 0.5),
                  button_color=("white", "green")) for i in range(7)
    ]

    columna1 = ([[sg.Text("Fichas de la computadora")]] + [fichas_pc] +
                [[sg.Text(" ")]] + [x for x in tablero_juego])
    columna1 += [[sg.Text("")]] + [[sg.Text("Fichas del jugador")]
                                   ] + [fichas_jugador] + [[sg.Text("")]]
    columna1 += [[
        sg.Button(" Iniciar ", key="Iniciar"),
        sg.Button(" Posponer ", key="Posponer"),
        sg.Button(" Pausa ", key="Pausa", disabled=True),
        sg.Button(" Palabras ingresadas ",
                  key="palabras_ingresadas",
                  disabled=True),
        sg.Button(" Terminar ", key="Terminar", visible=False),
        sg.Button(" Salir ", key="Salir")
    ]]

    fuente = ("Helvetica", 11)
    nivel = tablero["nivel"]
    tamanio = (35, 1)

    columna2 = [[sg.Text("Tiempo restante", **titulos, size=tamanio)],
                [
                    sg.Text(datetime.timedelta(seconds=tablero["contador"]),
                            key="tiempo",
                            font=fuente)
                ], [sg.Text("Nivel", **titulos, size=tamanio)],
                [sg.Text(nivel.capitalize(), font=fuente)],
                [sg.Text("Palabras válidas", **titulos, size=tamanio)],
                [sg.Text(tablero["palabras_validas"], font=fuente)],
                [
                    sg.Text("Cantidad de fichas en la bolsa",
                            **titulos,
                            size=tamanio)
                ],
                [
                    sg.Text(len(fichas_totales(tablero["bolsa_de_fichas"])),
                            key="cantidad_fichas",
                            font=fuente)
                ], [sg.Text("Turno", **titulos, size=tamanio)],
                [sg.Text("                       ", key="turno", font=fuente)],
                [sg.Text("")],
                [
                    sg.Table(actualizar_tabla(tablero["jugador"],
                                              tablero["computadora"]),
                             ["", "Puntaje", "Cambios restantes"],
                             key="tabla",
                             justification="center",
                             num_rows=2,
                             hide_vertical_scroll=True)
                ], [sg.Text("")],
                [
                    sg.Multiline(parametros["historial"],
                                 size=(42, 10),
                                 key="historial",
                                 disabled=True,
                                 autoscroll=True)
                ], [sg.Text("")],
                [
                    sg.Button(" Confirmar palabra ",
                              key="confirmar",
                              disabled=True),
                    sg.Button(" Cambiar fichas ", key="cambiar",
                              disabled=True),
                    sg.Button("Pasar", visible=False)
                ]]

    layout = [[
        sg.Column(columna1, **parametros_columna),
        sg.Column(columna2, pad=((25, 0), (0, 0)), **parametros_columna)
    ]]

    window = sg.Window(" Tablero",
                       layout,
                       disable_close=True,
                       **parametros_ventana)

    window["turno"].Update(tablero["turno"])

    parametros["casillas_especiales"] = colocar_posiciones_especiales(
        window, tablero)

    if partida_anterior:
        restaurar_tablero(window, tablero["posiciones_ocupadas"])

    return window