Untitled
unknown
python
a year ago
8.5 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: tablero[i] = letra 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: 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]: 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 print('Ganaste, te sobraron ' + str(vidasActuales) + ' vidas!') return True