import gradio as gr import json from game 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 = '
\n\n' # Crear la tabla de historial markdown += "## Mejores intentos\n" markdown += "\n" markdown += " \n" markdown += " \n" markdown += " \n" markdown += " \n" markdown += " \n" for line in history_attempts: items = eval(line.strip()) markdown += " \n" markdown += f" \n" markdown += f" \n" markdown += f" \n" markdown += " \n" markdown += "
RankingPalabraPuntuación
{items[0]}{items[1]}{items[2]}
\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 += "
" 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( """

SEMANTRIX: EL JUEGO DE LAS PALABRAS

""" ) 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(["SÍ", "NO"], 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(["SÍ", "NO"], 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(["SÍ", "NO"], 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(["SÍ", "NO"], 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(["SÍ", "NO"], 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(["SÍ", "NO"], 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(["SÍ", "NO"], 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(["SÍ", "NO"], 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(["SÍ", "NO"], 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(["SÍ", "NO"], 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()