semantrix / app_trans.py
Javierss
Add word check
2d20748
raw
history blame
12 kB
import gradio as gr
import json
from Research.semantrix.game_transformer import Semantrix
config_file_path = "config/lang.json"
with open(config_file_path, "r") as file:
Config_full = json.load(file)
lang = 0
if lang == 0:
Config = Config_full["SPA"]["Game"]
elif lang == 1:
Config = Config_full["ENG"]["Game"]
else:
Config = Config_full["SPA"]["Game"]
def convert_to_markdown_centered(text):
# Separar el texto de último intento y el historial
lines = text.strip().split("\n")
if not lines:
return ""
last_attempt = lines[0]
history_attempts = lines[2:12]
# Crear el formato Markdown
markdown = '<div align="center">\n\n'
# Crear la tabla de historial
markdown += "## Mejores intentos\n"
markdown += "<table>\n"
markdown += " <tr>\n"
markdown += " <th>Ranking</th>\n"
markdown += " <th>Palabra</th>\n"
markdown += " <th>Puntuación</th>\n"
markdown += " </tr>\n"
for line in history_attempts:
items = eval(line.strip())
markdown += " <tr>\n"
markdown += f" <td><strong>{items[0]}</strong></td>\n"
markdown += f" <td>{items[1]}</td>\n"
markdown += f" <td>{items[2]}</td>\n"
markdown += " </tr>\n"
markdown += "</table>\n\n"
# Formatear el último intento
last_items = eval(last_attempt)
markdown += f"## Último Intento\n"
markdown += f"**{last_items[0]}:** {last_items[1]} - Score: {last_items[2]}\n\n"
markdown += "---\n\n"
markdown += "</div>"
return markdown
with gr.Blocks() as demo:
state = gr.State(-1)
difficulty = gr.State(-1)
hint = gr.State(False)
hint_path = "config/hint.png"
game = Semantrix()
gr.Markdown(
"""
<p style="text-align:center"> SEMANTRIX: EL JUEGO DE LAS PALABRAS </p>
"""
)
def reset(difficulty):
game.prepare_game(difficulty)
output = [
-1,
gr.Textbox(visible=False),
gr.Textbox(visible=False),
gr.Image(hint_path, visible=True, interactive=False),
gr.Button("Empezar", visible=True, variant="secondary"),
gr.Radio(visible=False),
gr.Textbox(visible=False),
gr.Button(visible=False),
]
return output
def change(state, inp):
state = state + 1
return [state, inp]
def update(state, radio, inp, hint):
global difficulty
dif_state = 4
output = [state]
state_int = state
if state_int == -1:
output.extend(
[
gr.Button("Empezar", visible=True),
gr.Radio(label="", visible=False),
gr.Textbox(
Config[list(Config.keys())[state_int]], visible=False, label=""
),
gr.Button("Rendirse", visible=False),
gr.Textbox(visible=False),
gr.Image(interactive=False, visible=True),
gr.Textbox(visible=False),
gr.Button(visible=False),
gr.Markdown(visible=False),
]
)
if state_int == 1:
output.extend(
[
gr.Button("Si", visible=False),
gr.Radio(["SÍ", "NO"], label="", visible=True),
gr.Textbox(
Config[list(Config.keys())[state_int]], visible=True, label=""
),
gr.Button("Rendirse", visible=False),
gr.Textbox(visible=False),
gr.Image(interactive=False, visible=False),
gr.Textbox(visible=False),
gr.Button(visible=False),
gr.Markdown(visible=False),
]
)
elif state_int == 2:
if radio == "NO":
output = [
dif_state,
gr.Button("Introducir", visible=True),
gr.Radio(visible=False),
gr.Textbox(
Config[list(Config.keys())[state_int]], visible=True, label=""
),
gr.Button("Rendirse", visible=False),
gr.Textbox(visible=False),
gr.Image(interactive=False, visible=False),
gr.Textbox(visible=False),
gr.Button(visible=False),
gr.Markdown(visible=False),
]
else:
output.extend(
[
gr.Button("Siguiente", visible=True),
gr.Radio(visible=False),
gr.Textbox(
Config[list(Config.keys())[state_int]],
visible=True,
label="",
),
gr.Button("Rendirse", visible=False),
gr.Textbox(visible=False),
gr.Image(interactive=False, visible=False),
gr.Textbox(visible=False),
gr.Button(visible=False),
gr.Markdown(visible=False),
]
)
elif state_int == dif_state:
output.extend(
[
gr.Button("Siguiente", visible=False),
gr.Radio(["Fácil", "Normal", "Difícil", "Experto"], visible=True),
gr.Textbox(
Config[list(Config.keys())[state_int]], visible=True, label=""
),
gr.Button("Rendirse", visible=False),
gr.Textbox(visible=False),
gr.Image(interactive=False, visible=False),
gr.Textbox(visible=False),
gr.Button(visible=False),
gr.Markdown(visible=False),
]
)
elif state_int == dif_state + 1:
if radio == "Fácil":
difficulty = 1
elif radio == "Normal":
difficulty = 2
elif radio == "Dificil":
difficulty = 3
else:
difficulty = 4
output.extend(
[
gr.Button("Empezar", visible=True, variant="primary"),
gr.Radio(visible=False),
gr.Textbox(
Config[list(Config.keys())[state_int]], visible=True, label=""
),
gr.Button("Rendirse", visible=False),
gr.Textbox(visible=False),
gr.Image(interactive=False, visible=False),
gr.Textbox(visible=False),
gr.Button(visible=False),
gr.Markdown(visible=False),
]
)
elif state_int == dif_state + 2:
game.prepare_game(difficulty)
# feed = game.play_game(inp)
output.extend(
[
gr.Button("Enviar", visible=True, variant="primary"),
gr.Radio(label="", visible=False),
gr.Textbox(visible=False, label=""),
gr.Button(visible=True, variant="stop"),
gr.Textbox(value="", visible=True, placeholder="Nueva palabra"),
gr.Image(interactive=False, visible=False),
gr.Textbox(visible=False),
gr.Button(visible=False),
gr.Markdown(visible=False),
]
)
elif state_int > dif_state + 2:
feed = game.play_game(inp)
feedback_trim = feed.split("[rank]")
if len(feedback_trim) > 1:
ranking_md = convert_to_markdown_centered(feedback_trim[1])
feedback = feedback_trim[0].split("[hint]")
win = feedback_trim[0].split("[win]")
if len(feedback) > 1:
hint = True
else:
hint = False
if len(win) > 1:
won = True
curiosity = game.curiosity()
output.extend(
[
gr.Button("Enviar", visible=False, variant="primary"),
gr.Radio(label="", visible=False),
gr.Textbox(win[1], visible=True, label=""),
gr.Button(visible=False, variant="stop"),
gr.Textbox(
value="", visible=False, placeholder="Nueva palabra"
),
gr.Image(hint_path, interactive=False, visible=True),
gr.Textbox(curiosity, visible=True, label="Curiosidad"),
gr.Button(visible=True),
gr.Markdown(visible=False),
]
)
return output
output.extend(
[
gr.Button("Enviar", visible=True, variant="primary"),
gr.Radio(label="", visible=False),
gr.Textbox(feedback[0], visible=True, label=""),
gr.Button(visible=True, variant="stop"),
gr.Textbox(value="", visible=True, placeholder="Nueva palabra"),
gr.Image(hint_path, interactive=False, visible=False),
gr.Textbox(
feedback[1] if hint else "", visible=hint, label="Pista"
),
gr.Button(visible=False),
gr.Markdown(ranking_md, visible=True),
]
)
else:
output.extend(
[
gr.Button("Siguiente", visible=True),
gr.Radio(label="", visible=False),
gr.Textbox(
Config[list(Config.keys())[state_int]], visible=True, label=""
),
gr.Button("Pista", visible=False),
gr.Textbox(visible=False),
gr.Image(interactive=False, visible=False),
gr.Textbox(visible=False),
gr.Button(visible=False),
gr.Markdown(visible=False),
]
)
return output
img = gr.Image(hint_path, height=430, interactive=False, visible=True)
ranking = gr.Markdown(visible=False)
with gr.Row():
out = gr.Textbox(visible=False, placeholder=Config[list(Config.keys())[0]])
hint_out = gr.Textbox(visible=False)
radio = gr.Radio(visible=False)
with gr.Row():
inp = gr.Textbox(visible=False, interactive=True, label="")
but = gr.Button("Empezar")
give_up = gr.Button("Pista", visible=False)
reload = gr.Button("Volver a jugar", visible=False)
inp.submit(change, inputs=[state, inp], outputs=[state, inp])
but.click(change, inputs=[state, inp], outputs=[state, inp])
give_up.click(
change,
inputs=[
state,
gr.Textbox("give_up", visible=False, interactive=True, label=""),
],
outputs=[state, inp],
)
reload.click(
reset,
inputs=difficulty,
outputs=[state, out, inp, img, but, radio, hint_out, reload],
)
radio.input(change, inputs=[state, inp], outputs=[state, inp])
demo.load(
reset,
inputs=difficulty,
outputs=[state, out, inp, img, but, radio, hint_out, reload],
)
# out.change(button_name, inputs=radio, outputs=[but, radio, out])
state.change(
update,
inputs=[state, radio, inp, hint],
outputs=[state, but, radio, out, give_up, inp, img, hint_out, reload, ranking],
)
if __name__ == "__main__":
demo.launch()