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