top of page
Pro Marcelo Tecnologia
33115a_f1dcca52232f4594be596437292befb9~mv2.png

🚀 Crie uma Inteligência Artificial para Jogar Tamagotchi em Python! 🐣💻

  • Foto do escritor: Marcelo Póvoa
    Marcelo Póvoa
  • 29 de dez. de 2024
  • 4 min de leitura


Introdução:


Quem lembra do clássico Tamagotchi dos anos 90? 🐾 Aqueles bichinhos virtuais que precisavam de comida, carinho e atenção conquistaram o coração de uma geração. Mas que tal trazer essa ideia para os tempos modernos? Neste post, você vai aprender a criar um jogo estilo Tamagotchi em Python, implementar uma IA para jogar por você e até explorar como integrá-lo a projetos com Arduino ou ESP32. 🤖

Além disso, daremos dicas para turbinar o projeto, como criar uma interface gráfica em Python com a biblioteca Tkinter ou PyQt. Vamos transformar nostalgia em inovação?



 

Acessando o Google Colab


Vamos acessar o site do Google Colab, coloque o nome para o arquivo de "Jogo Tamagotchi com IA"



Passo 1: Criando o Tamagotchi no Python


Para começar, precisamos de uma base simples que simule as interações com o bichinho virtual: alimentar, brincar e monitorar seu estado (felicidade, energia, fome, etc.).


  • Definir os atributos do Tamagotchi:

    • fome (0 a 100)

    • felicidade (0 a 100)

    • energia (0 a 100)

  • Definir o estado do Tamagotchi:

    • vivo (true/false)


# Atributos
atributos = {
    "fome": 50,
    "energia": 50,
    "felicidade": 50
}
vivo = True

Observe a lógica do game, aqui iniciamos o nosso bichinho com tudo em 50 por estar na média.


Definir as ações possíveis:

  • Alimentar, brincar, dormir e nada.


# Ações
# Alimentar
def alimentar():
  atributos["fome"] = atributos["fome"]-20
  atributos["energia"] = atributos["energia"]-10
  atributos["felicidade"] = atributos["felicidade"]+5
  maximo()

# Dormir
def dormir():
  atributos["fome"] = atributos["fome"]+10
  atributos["energia"] = atributos["energia"]+10
  atributos["felicidade"] = atributos["felicidade"]+5
  maximo()

# Brincar
def brincar():
  atributos["fome"] = atributos["fome"]+20
  atributos["energia"] = atributos["energia"]-20
  atributos["felicidade"] = atributos["felicidade"]+20
  maximo()

# Nada
def nada():
  atributos["fome"] = atributos["fome"]+10
  atributos["energia"] = atributos["energia"]-5
  atributos["felicidade"] = atributos["felicidade"]-20
  maximo()

# máximo
def maximo():
  if atributos["fome"] < 0:
    atributos["fome"] = 0
  if atributos["energia"] > 100:
    atributos["energia"] = 100
  if atributos["felicidade"] > 100:
    atributos["felicidade"] = 100

Definido emoções:

  • Morto: quando a fome chega em 100 e ou energia/felicidade a 0.

  • Feliz: quando a fome menor de 50 e ou energia/felicidade maior 50.

  • Fome: a fome maior 50.

  • Cansado:  a energia menor 50

  • Triste:  a felicidade menor 50


# Exibir estado emoção
def exibir_estado_emocao():
  global vivo

  mensagem = ""
  # converter o fome 0 mais baixo e 100
  necessidades = {k: (100 - v if k == "fome" else v) for k, v in atributos.items()}
  # Encontrar a necessidade mais crítica
  necessidade_mais_critica = min(necessidades, key=necessidades.get)

  # Checar vida
  for (atributo, valor) in necessidades.items():
    if valor <= 0:
      mensagem = "Seu Tamagoshi morreu! *_*"
      vivo = False
      return mensagem
      break

  if all(valor > 49 for valor in necessidades.values()):
    mensagem = "Seu Tamagoshi está feliz! º_º"
  else:
    # Identificar o atributo critico
    #atributos_criticos = [ atributos for atributo, valor in necessidades.items() if atributo == necessidade_mais_critica ]
    #print(atributos_criticos)
    atributos_criticos = []
    for atributo, valor in necessidades.items():
      if atributo == necessidade_mais_critica:
        atributos_criticos = [atributo]
    atributo_critico = random.choice(atributos_criticos)


    # Mensagem
    if atributo_critico == "fome":
      mensagem = "Seu Tamagoshi está com fome! @_@"
    elif atributo_critico == "energia":
      mensagem = "Seu Tamagoshi está cansado! -_-"
    elif atributo_critico == "felicidade":
      mensagem = "Seu Tamagoshi está triste! '_'"

  return mensagem

Menu de Interação:


# Menu
def menu():
  print("Bem-vindo criador de Tamagoshi!")

  while True:
    print("1. Alimentar")
    print("2. Dormir")
    print("3. Brincar")
    print("4. Nada")
    print("5. Modo Automatico [IA]")
    print("6. Sair")

    escolha = input("Escolha uma ação: ")

    # ação
    if escolha == "1":
      alimentar()
    elif escolha == "2":
      dormir()
    elif escolha == "3":
      brincar()
    elif escolha == "4":
      nada()
    elif escolha == "5":
      modoautomatico()
    elif escolha == "6":
      print("Obrigado por criar um Tamagoshi!")
      break
    else:
      print("Opção inválida. Tente novamente.")

    print(f"fome: {atributos['fome']} / energia: {atributos['energia']} / fecilidade: {atributos['felicidade']}")
    print(exibir_estado_emocao())
    if not vivo:
      break

# Execução
menu()

Rodando o Jogo:

Agora é a hora de dar Play, e festejar, caso haja erros leia sempre o erro que ele sempre indica aonde está.


Passo 2: Criando uma IA - Modo Automático

Agora vamos implementar uma IA que monitore o estado do bichinho e tome decisões automaticamente.


import random #aleatorio

def modoautomatico():
  global vivo, atributos
  print("Modo Automatico IA ativado!")
  contador = 1

  while True:
    print(f"Rodada: {contador}")
    print(f"fome: {atributos['fome']} / energia: {atributos['energia']} / felicidade: {atributos['felicidade']}")

    mensagem = exibir_estado_emocao()
    print(f"[IA] Analizando mensagem: {mensagem}")
    if not vivo:
      break

    # Tomada de decisao
    if "fome" in mensagem:
      alimentar()
      print("[IA] Alimentando...")
    elif "cansado" in mensagem:
      dormir()
      print("[IA] Dormindo...")
    elif "triste" in mensagem:
      brincar()
      print("[IA] Brincando...")
    else:
      nada()
      print("[IA] Nada...")

    contador += 1

Ficou bom, né!?

Agora é contigo, melhore aumente o nível de dificuldade, explore novas regras, ações aleatórias... Dica por onde começar, mude os atributos e adicione regras como se por 2 turnos a fome estiver em 0 ele morre de indigestão... Use a criatividade!



 


Passo 3: Expandindo para Arduino/ESP32


Se você quiser dar um passo além, pode usar Arduino ou ESP32 para adicionar um display LCD ou LEDs ao seu Tamagotchi.


Componentes Necessários:

  • Arduino Uno ou ESP32

  • Display LCD (16x2 ou OLED) ou Matriz de Led

  • Botões para interagir (alimentar, brincar, etc.)


Use a comunicação serial para que o Python envie dados para o Arduino:

#include <LiquidCrystal.h>

LiquidCrystal lcd(7, 8, 9, 10, 11, 12);

void setup() {
  Serial.begin(9600);
  lcd.begin(16, 2);
}

void loop() {
  if (Serial.available() > 0) {
    String comando = Serial.readString();
    if (comando == "ALIMENTAR") {
      lcd.print("Alimentando...");
    }
    // Outras ações...
  }
}


 


Passo 4: Melhorando a Interface Gráfica no Python


Você pode criar uma interface gráfica usando Tkinter ou PyQt.


Exemplo com Tkinter:

import tkinter as tk

class TamagotchiApp:
    def __init__(self, root):
        self.tamagotchi = Tamagotchi("Tama")
        self.root = root
        self.root.title("Tamagotchi Virtual")

        self.status_label = tk.Label(root, text="Status do Tamagotchi")
        self.status_label.pack()

        self.fome_label = tk.Label(root, text="Fome: 50")
        self.fome_label.pack()

        self.energia_label = tk.Label(root, text="Energia: 50")
        self.energia_label.pack()

        self.felicidade_label = tk.Label(root, text="Felicidade: 50")
        self.felicidade_label.pack()

        tk.Button(root, text="Alimentar", command=self.alimentar).pack()
        tk.Button(root, text="Brincar", command=self.brincar).pack()
        tk.Button(root, text="Descansar", command=self.descansar).pack()

...

root = tk.Tk()
app = TamagotchiApp(root)
root.mainloop()


 


Dicas para Melhorias


  1. Adicionar Emoções: Crie estados emocionais para o Tamagotchi com base em interações e níveis de felicidade.

  2. Gráficos: Substitua o Tkinter por Pygame para criar uma interface visual com sprites e animações.

  3. Sistema de Níveis: Adicione evolução ao bichinho conforme o tempo e as interações.

  4. Persistência: Salve o progresso do Tamagotchi em um arquivo para continuar de onde parou.


Vou ficar super feliz se mandarem seu projetos feitos!!!

Yorumlar


bottom of page