El día de hoy vamos a resolver un ejercicio de programación en Python utilizando Programación orientada a objetos, también conocida como POO o como OOP.
Se trata de simular un Tamagotchi, la mascota virtual (o algo así, nunca tuve uno) en donde el mismo se debe alimentar, jugar, etcétera. El ejercicio dice así:
Elaborar una aplicación de línea de comandos en Python cuyo objetivo es emular un Tamagotchi usando Programación Orientada a Objetos. Todo personaje de Tamagotchi se basa es un animal y debe tener un nombre y género.
El nombre lo determina el usuario, y el género lo determina el sistema. El Tamagotchi tendrá una medición de hambre, de felicidad, y de salud. Las mediciones de hambre y de felicidad inician en 10, mientras que el de salud inicia en 0. Por cada turno que pase, se disminuye las mediciones de hambre y de felicidad en 1.
En cada evento se deben ejecutar una de las siguientes acciones: alimentar (incrementa medición de hambre 2 unidades), jugar (incrementa medición de felicidad 3 unidades), nada.
Si sobre alimentas a Tamagotchi, se incrementa la medición de salud en 2. No existe manera de decrementar la medición de salud. No existe manera de sobreexceder la medición de felicidad.
Cuando la medición de salud esté en 10, o la medición de felicidad esté en 0, o la medición de hambre esté en 0, el Tamagotchi muere y el juego termina.
Veamos entonces cómo simular esto usando clases y objetos en Python.
Explicación general
Lo que haremos será una clase con varios métodos que van a manejarse de acuerdo al planteamiento. Es cuestión de leer cuidadosamente lo que se solicita y hacer que el Tamagotchi en Python se comporte de esa manera.
Diseño de la clase
La clase queda como se ve a continuación. Fíjate en el constructor, pues en el mismo elegimos el género del Tamagotchi:
class Tamagotchi:
def __init__(self, nombre):
genero = random.choice(["Masculino", "Femenino"])
print("Tu Tamagotchi es " + genero)
self.genero = genero
self.nombre = nombre
self.hambre = 10
self.felicidad = 10
self.salud = 0
def evento(self, accion):
self.hambre -= 1
self.felicidad -= 1
if accion == "alimentar":
self.alimentar()
elif accion == "jugar":
self.jugar()
def alimentar(self):
print("Has alimentado a " + self.nombre)
self.hambre += 2
if self.hambre > 10:
# Sobrealimentado
self.salud += 2
pass
def jugar(self):
print("Juegas con " + self.nombre)
self.felicidad += 3
# Evitar sobrepasar
if self.felicidad > 10:
self.felicidad = 10
def muere(self):
if self.salud >= 10 or self.felicidad <= 0 or self.hambre <= 0:
return True
else:
return False
def imprimir_estado(self):
print("Hambre: " + str(self.hambre))
print("Felicidad: " + str(self.felicidad))
print("Salud: " + str(self.salud))
Vemos varios métodos. Por ejemplo, la función evento
resta el hambre y la felicidad; y dependiendo de la acción invoca a jugar
o alimentar
. Estas funciones a su vez suben el nivel felicidad o de hambre, respectivamente.
También vemos la función muere
, que regresa un booleano indicando si el Tamagotchi muere por alguna causa, ya sea salud, felicidad o hambre. Además, tenemos otra función que imprime el estado del Tamagotchi, es decir, sus niveles de hambre, felicidad y salud (así el jugador puede elegir lo que hace).
En el apartado del constructor vemos que se inician los valores y se elige el género, además de imprimirlo. Por cierto, este método recibe el nombre del Tamagotchi y lo guarda para usarlo más tarde.
Lo que falta ahora es crear un objeto a partir de la clase, y darle al usuario la posibilidad de interactuar con su mascota virtual.
Menú para Tamagotchi en Python
En el menú simplemente solicitamos al usuario el nombre de su mascota y hacemos un ciclo while que se traduce a algo como: mientras el Tamagotchi no muera, pregúntale al usuario lo que quiere hacer con él.
El código en Python queda así:
def main():
nombre = input("Ingresa el nombre de tu Tamagotchi: ")
tamagotchi = Tamagotchi(nombre)
while not tamagotchi.muere():
tamagotchi.imprimir_estado()
eleccion = ""
while not eleccion in ["1", "2", "3"]:
eleccion = input("""
1. Alimentar
2. Jugar
3. Nada
Elige: """)
if eleccion == "1":
tamagotchi.evento("alimentar")
elif eleccion == "2":
tamagotchi.evento("jugar")
elif eleccion == "3":
tamagotchi.evento("")
print(tamagotchi.nombre + " ha muerto")
Al terminar el ciclo (Que es cuando el Tamagotchi ha muerto) simplemente imprimimos lo que ha pasado. Lo que ahora sí nos resta es invocar a la función main
.
Poniendo todo junto
El código completo de esta simulación de Tamagotchi usando Python y la programación orientada a objetos queda así:
"""
____ _____ _ _ _
| _ \ | __ \ (_) | | |
| |_) |_ _ | |__) |_ _ _ __ _____| |__ _ _| |_ ___
| _ <| | | | | ___/ _` | '__|_ / | '_ \| | | | __/ _ \
| |_) | |_| | | | | (_| | | / /| | |_) | |_| | || __/
|____/ \__, | |_| \__,_|_| /___|_|_.__/ \__, |\__\___|
__/ | __/ |
|___/ |___/
____________________________________
/ Si necesitas ayuda, contáctame en \
\ https://parzibyte.me /
------------------------------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
Creado por Parzibyte (https://parzibyte.me). Este encabezado debe mantenerse intacto,
excepto si este es un proyecto de un estudiante.
"""
import random
class Tamagotchi:
def __init__(self, nombre):
genero = random.choice(["Masculino", "Femenino"])
print("Tu Tamagotchi es " + genero)
self.genero = genero
self.nombre = nombre
self.hambre = 10
self.felicidad = 10
self.salud = 0
def evento(self, accion):
self.hambre -= 1
self.felicidad -= 1
if accion == "alimentar":
self.alimentar()
elif accion == "jugar":
self.jugar()
def alimentar(self):
print("Has alimentado a " + self.nombre)
self.hambre += 2
if self.hambre > 10:
# Sobrealimentado
self.salud += 2
pass
def jugar(self):
print("Juegas con " + self.nombre)
self.felicidad += 3
# Evitar sobrepasar
if self.felicidad > 10:
self.felicidad = 10
def muere(self):
if self.salud >= 10 or self.felicidad <= 0 or self.hambre <= 0:
return True
else:
return False
def imprimir_estado(self):
print("Hambre: " + str(self.hambre))
print("Felicidad: " + str(self.felicidad))
print("Salud: " + str(self.salud))
def main():
nombre = input("Ingresa el nombre de tu Tamagotchi: ")
tamagotchi = Tamagotchi(nombre)
while not tamagotchi.muere():
tamagotchi.imprimir_estado()
eleccion = ""
while not eleccion in ["1", "2", "3"]:
eleccion = input("""
1. Alimentar
2. Jugar
3. Nada
Elige: """)
if eleccion == "1":
tamagotchi.evento("alimentar")
elif eleccion == "2":
tamagotchi.evento("jugar")
elif eleccion == "3":
tamagotchi.evento("")
print(tamagotchi.nombre + " ha muerto")
main()
Yo estuve probando, se ve así:
Te dejo otro enlace para que explores más sobre Python.