{"id":10526,"date":"2021-01-27T10:05:32","date_gmt":"2021-01-27T09:05:32","guid":{"rendered":"https:\/\/perdiendo.org\/museodemetralla\/?p=10526"},"modified":"2021-01-27T10:18:03","modified_gmt":"2021-01-27T09:18:03","slug":"super-ahorcado","status":"publish","type":"post","link":"https:\/\/perdiendo.org\/museodemetralla\/?p=10526","title":{"rendered":"s\u00faper ahorcado"},"content":{"rendered":"<p>Termin\u00e9 el super ahorcado, lo pod\u00e9is ver en <a href=\"https:\/\/pastebin.com\/NG80cb54\">pastebin<\/a> o en <a href=\"?p=10526#more-10526\">contin\u00faa leyendo<\/a>. Me queda pendiente decidir qu\u00e9 hacer con las palabras acentuadas en el modo pvp y si voy a dar como opci\u00f3n insertar frases. Me produce curiosidad c\u00f3mo convertir los espacios en alg\u00fan tipo de bloque. Ha sido s\u00faper divertido, aunque creo que me he empantanado ah\u00ed dentro algo de m\u00e1s. Ahora toca seguir hacia delante.<\/p>\n<p><!--more--><\/p>\n<pre><code>import random\r\n\r\n'''\r\nObjetivos:\r\n1. Introducir la eleci\u00f3n dentro del bucle while\r\n2. modo pve, con dos opciones:\r\n    1.1. f\u00e1cil: una palabra random en una lista elegida\r\n    1.2. dif\u00edcil: una palabra random en una lista tb random\r\n3. modo pvp, permitiendo introducir una palabra y en un futuro tambi\u00e9n una frase\r\n'''\r\n\r\n'''\r\nDiagrama de Flujo:\r\n1. Presentaci\u00f3n.\r\n2. Elige un modo.\r\n    2.1. Pve\r\n        2.1.1. Palabra random en una lista elegida.\r\n        2.1.2. Palabra random en una lista random.\r\n    2.2. Pvp\r\n3. Introducir una letra.\r\n    3.1. La letra est\u00e1 en la palabra, marcarla en las letras_descubiertas\r\n    3.2. La letra no est\u00e1 en la palabra, marcarla en letras letras_incorrectas\r\n    3.3. \u00bfLe quedan intentos y no ha descubierto la palabra? Sigue jugando.\r\n4. Resoluci\u00f3n.\r\n    4.1. \u00bfHa descubierto todas las letras? Ha ganado.\r\n    4.2. \u00bfHa terminado con los intentos disponibles? Ha perdido.\r\n5. Volver a jugar.\r\n    5.1. \u00bfS\u00ed? Reiniciar, poner a cero letras_descubiertas y letrasIncorrectas\r\n    5.2. \u00bfNo? Salir.\r\n'''\r\n\r\n# introducimos los estados del cadalso\r\nIM\u00c1GENES_AHORCADO = ['''\r\n\r\n  +---+\r\n  |   |\r\n      |\r\n      |\r\n      |\r\n      |\r\n=========''', '''\r\n\r\n  +---+\r\n  |   |\r\n  O   |\r\n      |\r\n      |\r\n      |\r\n=========''', '''\r\n\r\n  +---+\r\n  |   |\r\n  O   |\r\n  |   |\r\n      |\r\n      |\r\n=========''', '''\r\n\r\n  +---+\r\n  |   |\r\n  O   |\r\n \/|   |\r\n      |\r\n      |\r\n=========''', '''\r\n\r\n  +---+\r\n  |   |\r\n  O   |\r\n \/|\\  |\r\n      |\r\n      |\r\n=========''', '''\r\n\r\n  +---+\r\n  |   |\r\n  O   |\r\n \/|\\  |\r\n \/    |\r\n      |\r\n=========''', '''\r\n\r\n  +---+\r\n  |   |\r\n  O   |\r\n \/|\\  |\r\n \/ \\  |\r\n      |\r\n=========''']\r\n\r\n# listas de palabras\r\n\r\nANIMALES = 'hormiga babuino tejon murcielago oso castor camello gato almeja cobra pantera coyote cuervo ciervo perro burro pato aguila huron zorro rana cabra ganso halcon leon lagarto llama topo mono alce raton mula salamandra nutria buho panda loro paloma piton conejo carnero rata cuervo rinoceronte salmon foca tiburon oveja mofeta perezoso serpiente ara\u00f1a cig\u00fce\u00f1a cisne tigre sapo trucha pavo tortuga comadreja ballena lobo wombat cebra'.split()\r\nCOLORES = 'rojo amarillo azul naranja violeta verde marron ambar a\u00f1il beige bermellon blanco burdeos cafe caoba caqui carmesi casta\u00f1o celeste cereza champan cartujo cian cobre coral crema fucsia granate gris hueso lavanda negro ocre oro pardo plata purpura rosa salmon turquesa aguamarina vino'.split()\r\nPAISES = 'afganistan albania alemania andorra argelia armenia australia austria azerbaiyan banglades barbados bareain belgica bielorusia belice belarus benin bolivia bulgaria burundi butan camboya canada chad chequia chile china chipre colombia congo corea croacia cuba dinamarca ecuador egipto eslovaquia eritrea eslovenia espa\u00f1a usa filipinas etiopia finlandia fiyi francia gambia gabon georgia ghana grecia guatemala guinea guyana haiti honduras hungria india indonesia iran irlanda islandia israel italia jamaica japon jordania kazakistan kenia kirguistan kuwait laos lesoto letonia libano liberia libia liechtenstein lituania luxemburgo macedonia madagascar malasia malaui maldivas mali malta marruecos mauricio mauritania mejico micronesia moldavia monaco mongolia montenegro mozambique namibia nauru nepal nicaragua niger nigeria noruega oman pakistan palaos palestina papua peru polonia portugal uk ruanda rumania rusia samoa senegal serbia seychelles singapur siria somalia sudafrica sudan suecia suiza surinam tailandia tanzania taykistan timor togo tonga tunez turkmenistan turquia tuvalu ucrania uganda uruguay uzbekistan vanuatu venezuela vietnam yibuti zambia zimbaue'.split()\r\n\r\n# lista global para el modo dif\u00edcil\r\n\r\nlistas = ANIMALES + COLORES + PAISES # +, si haces una lista de listas con [] el random abarcara la totalidad de una lista, ojo\r\n\r\n# funci\u00f3n de elecci\u00f3n pve\r\n\r\ndef lista_pve():\r\n    while True:\r\n        lista = input('''\r\n    1. Animales 2. Colores 3. Paises\r\n    ''')\r\n\r\n        if lista == '1':\r\n            lista_elegida = ANIMALES\r\n            return lista_elegida\r\n\r\n        elif lista == '2':\r\n            lista_elegida = COLORES\r\n            return lista_elegida\r\n\r\n        elif lista == '3':\r\n            lista_elegida = PAISES\r\n            return lista_elegida\r\n\r\n        else:\r\n            print('no es una opci\u00f3n v\u00e1lida')\r\n\r\n# funci\u00f3n de elecci\u00f3n general\r\n\r\ndef eleccion_lista():\r\n    while True:\r\n        modo = input('''\r\nSUPER AHORCADO\r\n\r\n1. Pve f\u00e1cil 2. Pve dif\u00edcil 3. Pvp\r\n''')\r\n\r\n        if modo == '1':\r\n            lista_elegida = lista_pve() # te lleva a la funci\u00f3n anterior para no enguarrinar el texto aqu\u00ed\r\n            return lista_elegida\r\n\r\n        if modo == '2':\r\n            lista_elegida = listas\r\n            return lista_elegida\r\n\r\n        if modo == '3':\r\n            lista_elegida = [input('''\r\nEscribe una palabra, sin acentos en esta versi\u00f3n del juego: ''')]\r\n            return lista_elegida\r\n\r\n        else: \r\n            print('Elige una opci\u00f3n correcta')\r\n\r\n# random de la palabra en 1 y 2\r\n\r\ndef obtenerPalabraAlAzar(lista_de_palabras):\r\n    \u00edndice_de_palabras = random.randint(0, len(lista_de_palabras) - 1)\r\n    return lista_de_palabras[\u00edndice_de_palabras]\r\n\r\n# presentaci\u00f3n del tablero\r\n\r\ndef mostrarTablero(IM\u00c1GENES_AHORCADO, letras_incorrectas, letras_correctas, palabra_secreta):\r\n    print(IM\u00c1GENES_AHORCADO[len(letras_incorrectas)])\r\n    print('Letras incorrectas:', end=' ')\r\n    for letra in letras_incorrectas:\r\n        print(letra, end=' ')\r\n    print()\r\n    espacios_vac\u00edos = '_' * len(palabra_secreta)\r\n    for i in range(len(palabra_secreta)):\r\n        if palabra_secreta[i] in letras_correctas: # hace dos lineas ha convertido todo en _, as\u00ed que ahora comprueba todas las de la variable letrasCorrectas\r\n            espacios_vac\u00edos = espacios_vac\u00edos[:i] + palabra_secreta[i] + espacios_vac\u00edos[i+1:]\r\n    for letra in espacios_vac\u00edos:\r\n        print(letra, end=' ')\r\n    print()\r\n\r\n# funci\u00f3n para preguntarle una letra\r\n\r\ndef obtener_intento(letras_probadas):\r\n    while True:\r\n        print('Adivina una letra.')\r\n        intento = input()\r\n        intento = intento.lower()\r\n        if len(intento) != 1:\r\n            print('Por favor, introduce una sola letra.')\r\n        elif intento in letras_probadas:\r\n            print('Ya has probado esa letra, elige otra.')\r\n        elif intento not in 'abcdefghi\u00edjklmn\u00f1opqrstuvwxyz': # puedes meter \u00e1\u00e9\u00ed\u00f3\u00fa, pero ser\u00e1n letras diferentes\r\n            print('Por favor, ingresa una LETRA.')\r\n        else: # en cualquier otro caso\r\n            return intento\r\n\r\n# funci\u00f3n para jugar de nuevo\r\n\r\ndef jugar_de_nuevo(): \r\n    print('\u00bfQuieres jugar de nuevo (s\u00ed o no)') # imprimimos la pregunta\r\n    return input().lower().startswith('s')\r\n\r\n# empieza el juego\r\n\r\nwhile True:\r\n    lista_elegida = eleccion_lista()\r\n    palabra_secreta = obtenerPalabraAlAzar(lista_elegida)\r\n    letras_correctas = ''\r\n    letras_incorrectas = ''\r\n\r\n# bucle de comprobaci\u00f3n\r\n\r\n    while True: \r\n        mostrarTablero(IM\u00c1GENES_AHORCADO, letras_incorrectas, letras_correctas, palabra_secreta)\r\n        intento = obtener_intento(letras_incorrectas + letras_correctas)\r\n        if intento in palabra_secreta:\r\n            letras_correctas = letras_correctas + intento\r\n            encontradoTodasLasLetras = True\r\n            for i in range(len(palabra_secreta)):\r\n                if palabra_secreta[i] not in letras_correctas: \r\n                    encontradoTodasLasLetras = False \r\n\r\n            if encontradoTodasLasLetras: \r\n                print('\u00a1S\u00ed! \u00a1La palabra secreta es \"' + palabra_secreta + '\"! \u00a1Has ganado!')\r\n                break          \r\n\r\n        else:\r\n            letras_incorrectas = letras_incorrectas + intento \r\n\r\n            if len(letras_incorrectas) == len(IM\u00c1GENES_AHORCADO) - 1: # depende de else: porque s\u00f3lo puede suceder si la letra introducida es incorrecta, un indent menos y pasar\u00e1 por aqu\u00ed siempre\r\n                mostrarTablero(IM\u00c1GENES_AHORCADO, letras_incorrectas, letras_correctas, palabra_secreta) \r\n                print('\u00a1Te has quedado sin intentos!\\nDespu\u00e9s de ' + str(len(letras_incorrectas)) + ' intentos fallidos y ' + str(len(letras_correctas)) + ' aciertos, la palabra era \"' + palabra_secreta + '\"')\r\n                break\r\n\r\n    if jugar_de_nuevo():\r\n        continue\r\n    else:\r\n        break<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Termin\u00e9 el super ahorcado, lo pod\u00e9is ver en pastebin o en contin\u00faa leyendo. Me queda pendiente decidir qu\u00e9 hacer con las palabras acentuadas en el modo pvp y si voy a dar como opci\u00f3n insertar frases. Me produce curiosidad c\u00f3mo convertir los espacios en alg\u00fan tipo de bloque. Ha sido s\u00faper divertido, aunque creo que [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[43],"tags":[],"class_list":["post-10526","post","type-post","status-publish","format-standard","hentry","category-python"],"_links":{"self":[{"href":"https:\/\/perdiendo.org\/museodemetralla\/index.php?rest_route=\/wp\/v2\/posts\/10526","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/perdiendo.org\/museodemetralla\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/perdiendo.org\/museodemetralla\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/perdiendo.org\/museodemetralla\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/perdiendo.org\/museodemetralla\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=10526"}],"version-history":[{"count":0,"href":"https:\/\/perdiendo.org\/museodemetralla\/index.php?rest_route=\/wp\/v2\/posts\/10526\/revisions"}],"wp:attachment":[{"href":"https:\/\/perdiendo.org\/museodemetralla\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=10526"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/perdiendo.org\/museodemetralla\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=10526"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/perdiendo.org\/museodemetralla\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=10526"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}