Ahorcado v1

mail@pastecode.io avatar
unknown
python
2 years ago
8.6 kB
2
Indexable
Never
from copy import *
def tablerosModeloEXPANDIR():
    # TABLERO DEFAULT (con 5 vidas)
    # ╔╦════════╗
    # ║║        
    # ║║
    # ║║
    # ║║
    # ╠╩═══════╗
    # ╚════════╝
    # TABLERO (con 4 vidas)
    # ╔╦════════╗
    # ║║        ☺
    # ║║
    # ║║
    # ║║
    # ╠╩═══════╗
    # ╚════════╝
    # TABLERO (con 3 vidas)
    # ╔╦════════╗
    # ║║        ☺
    # ║║        |
    # ║║
    # ║║
    # ╠╩═══════╗
    # ╚════════╝
    # TABLERO (con 2 vidas)
    # ╔╦════════╗
    # ║║        ☺
    # ║║       /|\
    # ║║
    # ║║
    # ╠╩═══════╗
    # ╚════════╝
    # TABLERO (con 1 vida)
    # ╔╦════════╗
    # ║║        ☺
    # ║║       /|\
    # ║║       / \
    # ║║
    # ╠╩═══════╗
    # ╚════════╝
    # TABLERO perdedor
    # ╔╦════════╗
    # ║║        ☺
    # ║║       ---
    # ║║       /|\
    # ║║       / \
    # ║║
    # ╠╩═══════╗
    # ╚════════╝
    return

# Defino la cantidad de vidas como una constante global.
VIDAS = 5

# creaTablero: String ---> Tablero
# creaTablero recibe el String que representa la clave y devuelve un tablero vacio del tamanio de la clave.
def creaTablero(clave):
    return ([' _ '] * len(clave))

# actualizaTablero: String Char Tablero ---> Tablero
# actualizaTablero recibe la palabra clave, la letra que queremos ver si pertenecer a la clave y el Tablero actual
# y devuelve el nuevo estado del tablero.
def actualizaTablero(clave, letra, tablero):
    i = 0
    for caracter in clave:
        if caracter == letra.lower() or caracter == letra.upper():
            tablero[i] = letra.upper()
        i += 1
    return tablero

# tableroAString: Tablero ---> String
# tableroAString recibe el tablero, que es una lista de caracteres, y lo vuelve un string.
def tableroAString(tablero):
    aux = ''
    for i in tablero:
        aux = aux + i
    return aux

# agregaEspacios: String ---> String
# agregaEspacios recibe un String y devuelve el String resultante de agregar un espacio despues de cada char
# del String original.
def agregaEspacios(historial):
    aux = ''
    for i in historial:
        aux = aux + i + ' '
    return aux 

# imprimeTablero: Tablero String Number ---> None 
# imprimeTablero recibe el estado del tablero, las letras usadas y la cantidad de vidas e
# imprime la imagen del tablero
def imprimeTablero(tablero, historial, vidas):
    if vidas == 5:
        print('Letras ya usadas: ' + agregaEspacios(historial))
        print('VIDAS RESTANTES: ' + str(vidas))
        print('╔╦════════╗')
        print('║║         ')
        print('║║         ')
        print('║║         ')
        print('║║         ')
        print('╠╩═══════╗')
        print('╚════════╝')
        print('Estado del tablero: ' + tableroAString(tablero))
    if vidas == 4:
        print('Letras ya usadas: ' + agregaEspacios(historial))
        print('VIDAS RESTANTES: ' + str(vidas))
        print('╔╦════════╗')
        print('║║        ☺')
        print('║║         ')
        print('║║         ')
        print('║║         ')
        print('╠╩═══════╗')
        print('╚════════╝')
        print('Estado del tablero: ' + tableroAString(tablero))
    if vidas == 3:
        print('Letras ya usadas: ' + agregaEspacios(historial))
        print('VIDAS RESTANTES: ' + str(vidas))
        print('╔╦════════╗')
        print('║║        ☺')
        print('║║        |')
        print('║║         ')
        print('║║         ')
        print('╠╩═══════╗')
        print('╚════════╝')
        print('Estado del tablero: ' + tableroAString(tablero)) 
    if vidas == 2:
        print('Letras ya usadas: ' + agregaEspacios(historial))
        print('VIDAS RESTANTES: ' + str(vidas))
        print('╔╦════════╗')
        print('║║        ☺')
        print('║║       /|\ ')
        print("║║         ")
        print('║║        ')
        print('╠╩═══════╗')
        print('╚════════╝')
        print('Estado del tablero: ' + tableroAString(tablero)) 
    if vidas == 1:
        print('Letras ya usadas: ' + agregaEspacios(historial))
        print('VIDAS RESTANTES: ' + str(vidas))
        print('╔╦════════╗')
        print('║║        ☺')
        print('║║       /|\ ')
        print("║║       / \ ")
        print('║║        ')
        print('╠╩═══════╗')
        print('╚════════╝')
        print('Estado del tablero: ' + tableroAString(tablero))
    if vidas == 0:
        print('Letras ya usadas: ' + agregaEspacios(historial))
        print('TE QUEDASTE SIN VIDAS!')
        print('╔╦════════╗')
        print('║║        ☺')
        print('║║       ---')
        print('║║       /|\ ')
        print("║║       / \ ")
        print('║║        ')
        print('╠╩═══════╗')
        print('╚════════╝')
        print('Estado del tablero: ' + tableroAString(tablero))
    return

# letraValida: String Char ---> Boolean
# letraValida recibe el historial de letras usadas y la letra que queremos utilizar, y devuelve un boolean
# que representa si es una letra valida o no.
def letraValida(historial, letra):
    if (len(letra) == 1):
        for i in historial:
            if i == letra:
                return False
        return True
    return False

# intentoExitoso: String Char ---> Boolean
# intentoExitoso recibe el String que representa la clave, el String\Char que representa la letra a buscar
# y devuelve un booleano que representa si esa letra forma parte de la clave (al menos 1 vez).
def intentoExitoso(clave, letra):
    for caracter in clave:
        if caracter == letra.lower() or caracter == letra.upper():
            return True
    return False

# termina: Tablero String ---> Boolean
# termina recibe el estado actual del Tablero y la palabra clave y devuelve un booleano que representa si
# el estado del tablero es exactamente la palabra clave.    
def termina(tablero, clave):
    i = 0
    for letra in tablero:
        if letra != clave[i].upper():
            return False
        i += 1
    return True

# ahorcado: String ---> Boolean
# ahorcado recibe un String que representa la palabra a adivinar, y devuelve un boolean que representa si
# tras terminada la ejecucion de la funcion, se logro adivinar la palabra.
def ahorcado(clave):
    historial = ''                  #Inicializo el historial en el string
    tablero = creaTablero(clave)
    vidasActuales = copy(VIDAS)     #Creo la variable que representa las vidas del jugador en base a la variable global
    while vidasActuales > 0 and not(termina(tablero, clave)):
        imprimeTablero(tablero, historial, vidasActuales)
        letra = input('Ingresa la letra para adivinar: ')
        if letraValida(historial, letra):   #Si la letra no esta en el historial y es un unico caracter entonces
            if intentoExitoso(clave, letra):    #Si la letra forma parte de la clave
                tablero = actualizaTablero(clave, letra, tablero)   #Actualizo el tablero
            else:                               #Si no,
                vidasActuales = vidasActuales - 1                   #El jugador pierde una vida
            historial = historial + letra       #Sea exitoso o no, se agrega la letra al historial.
        else:
            print('ERROR LETRA INVALIDA, INTENTE DE NUEVO')
        
    if vidasActuales == 0:
        print('Perdiste, te quedaste sin vidas! La palabra secreta era ' + clave)
        return False
    imprimeTablero(tablero, historial, vidasActuales)
    print('Ganaste, te sobraron ' + str(vidasActuales) + ' vidas!')
    return True