python

Python: Tamagotchi con POO

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í:

Tamagotchi en Python – Simulación de mascota virtual con POO

Te dejo otro enlace para que explores más sobre Python.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

3 días hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

3 días hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

3 días hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

3 días hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

3 días hace

Solución: Apache – Server unable to read htaccess file

Ayer estaba editando unos archivos que son servidos con el servidor Apache y al visitarlos…

3 días hace

Esta web usa cookies.