Vamos criar um **joguinho simples com sistema de bônus** em Python, usando o terminal como interface.
O jogo terá:
– Um personagem com vida, ataque e moedas.
– Inimigos para enfrentar.
– Bônus que podem ser comprados ou encontrados (vida extra, ataque melhorado, etc.).
—
## **1. Estrutura básica**
“`python
import random
class Jogador:
def __init__(self, nome):
self.nome = nome
self.vida = 100
self.vida_max = 100
self.ataque = 10
self.moedas = 50
self.bonus_ataque = 0
self.pocoes = 1
def atacar(self):
return self.ataque + self.bonus_ataque
def receber_dano(self, dano):
self.vida -= dano
if self.vida < 0:
self.vida = 0
def curar(self, quantidade):
self.vida += quantidade
if self.vida > self.vida_max:
self.vida = self.vida_max
def comprar_bonus(self, tipo):
if tipo == “ataque”:
if self.moedas >= 30:
self.moedas -= 30
self.bonus_ataque += 5
print(“Você comprou +5 de ataque permanente!”)
return True
else:
print(“Moedas insuficientes.”)
return False
elif tipo == “vida”:
if self.moedas >= 40:
self.moedas -= 40
self.vida_max += 20
self.curar(20)
print(“Você comprou +20 de vida máxima e cura!”)
return True
else:
print(“Moedas insuficientes.”)
return False
elif tipo == “pocao”:
if self.moedas >= 15:
self.moedas -= 15
self.pocoes += 1
print(“Você comprou uma poção de cura!”)
return True
else:
print(“Moedas insuficientes.”)
return False
def usar_pocao(self):
if self.pocoes > 0:
self.pocoes -= 1
cura = 30
self.curar(cura)
print(f”Você usou uma poção e recuperou {cura} de vida.”)
return True
else:
print(“Você não tem poções.”)
return False
def status(self):
print(f”\n— Status de {self.nome} —“)
print(f”Vida: {self.vida}/{self.vida_max}”)
print(f”Ataque base: {self.ataque} (+{self.bonus_ataque} bônus)”)
print(f”Moedas: {self.moedas}”)
print(f”Poções: {self.pocoes}”)
print(“————————“)
class Inimigo:
def __init__(self, nome, vida, ataque, recompensa):
self.nome = nome
self.vida = vida
self.ataque = ataque
self.recompensa = recompensa
def atacar(self):
return self.ataque
def receber_dano(self, dano):
self.vida -= dano
if self.vida < 0:
self.vida = 0
def vivo(self):
return self.vida > 0
def status(self):
print(f”{self.nome} – Vida: {self.vida} | Ataque: {self.ataque}”)
def batalha(jogador, inimigo):
print(f”\n⚔️ Batalha contra {inimigo.nome}! ⚔️”)
while inimigo.vivo() and jogador.vida > 0:
print(“\n— Turno —“)
jogador.status()
inimigo.status()
print(“1. Atacar”)
print(“2. Usar poção”)
print(“3. Fugir”)
escolha = input(“Escolha: “)
if escolha == “1”:
dano_jogador = jogador.atacar()
inimigo.receber_dano(dano_jogador)
print(f”Você causou {dano_jogador} de dano!”)
if not inimigo.vivo():
print(f”Você derrotou {inimigo.nome}!”)
jogador.moedas += inimigo.recompensa
print(f”Ganhou {inimigo.recompensa} moedas!”)
break
elif escolha == “2”:
jogador.usar_pocao()
continue
elif escolha == “3”:
print(“Você fugiu da batalha!”)
return False
# Turno do inimigo
if inimigo.vivo():
dano_inimigo = inimigo.atacar()
jogador.receber_dano(dano_inimigo)
print(f”{inimigo.nome} causou {dano_inimigo} de dano!”)
if jogador.vida <= 0:
print("Você foi derrotado...")
return False
return True
def loja(jogador):
print("\n🏪 Bem-vindo à Loja de Bônus! 🏪")
while True:
jogador.status()
print("\nO que deseja comprar?")
print("1. Bônus de Ataque (+5) - 30 moedas")
print("2. Bônus de Vida (+20 máxima) - 40 moedas")
print("3. Poção de Cura (+30 vida) - 15 moedas")
print("4. Sair da loja")
escolha = input("Escolha: ")
if escolha == "1":
jogador.comprar_bonus("ataque")
elif escolha == "2":
jogador.comprar_bonus("vida")
elif escolha == "3":
jogador.comprar_bonus("pocao")
elif escolha == "4":
print("Saindo da loja...")
break
else:
print("Opção inválida.")
def evento_aleatorio(jogador):
eventos = [
("Você encontrou um baú com 20 moedas!", lambda: (print("+20 moedas!"), setattr(jogador, 'moedas', jogador.moedas + 20))),
("Você achou uma poção perdida!", lambda: (print("+1 poção!"), setattr(jogador, 'pocoes', jogador.pocoes + 1))),
("Um espírito amigável te abençoou com +10 de vida!", lambda: (print("+10 vida!"), jogador.curar(10))),
("Nada interessante aconteceu.", lambda: print("...")),
]
evento = random.choice(eventos)
print(f"\n🎁 Evento aleatório: {evento[0]}")
evento[1]()
def main():
print("=== JOGO DE RPG COM BÔNUS ===")
nome = input("Digite seu nome: ")
jogador = Jogador(nome)
inimigos = [
Inimigo("Goblin", 30, 5, 10),
Inimigo("Orc", 50, 8, 20),
Inimigo("Troll", 80, 12, 35),
Inimigo("Dragão", 120, 18, 60),
]
while jogador.vida > 0:
print(“\n” + “=”*40)
jogador.status()
print(“\nO que deseja fazer?”)
print(“1. Procurar batalha”)
print(“2. Visitar a loja”)
print(“3. Descansar (cura 20% da vida)”)
print(“4. Sair do jogo”)
escolha = input(“Escolha: “)
if escolha == “1”:
inimigo = random.choice(inimigos)
if batalha(jogador, inimigo):
# Chance de evento após vitória
if random.random() < 0.4:
evento_aleatorio(jogador)
elif escolha == "2":
loja(jogador)
elif escolha == "3":
cura = jogador.vida_max // 5
jogador.curar(cura)
print(f"Você descansou e recuperou {cura} de vida.")
elif escolha == "4":
print("Até mais!")
break
else:
print("Opção inválida.")
print("\n=== Fim do Jogo ===")
jogador.status()
if __name__ == "__main__":
main()
```
---
## **2. Explicação do sistema de bônus**
1. **Bônus de ataque permanente**
Comprado na loja, aumenta o dano do jogador permanentemente.
2. **Bônus de vida máxima**
Aumenta a vida total e cura a mesma quantidade.
3. **Poções de cura**
Itens consumíveis que recuperam vida durante a batalha.
4. **Eventos aleatórios**
Após algumas batalhas, o jogador pode encontrar baús, poções ou cura extra.
---
## **3. Como rodar**
1. Salve o código em um arquivo `jogo_bonus.py`.
2. Execute no terminal:
```bash
python jogo_bonus.py
```
---
## **4. Possíveis expansões**
- Adicionar mais tipos de bônus (defesa, crítico, roubo de vida).
- Implementar níveis e experiência para o jogador.
- Criar equipamentos (armas, armaduras) como bônus.
- Salvar o progresso em arquivo.
Quer que eu explique alguma parte com mais detalhes ou crie uma versão com gráficos simples?