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?

Share this post

Subscribe to our newsletter

Keep up with the latest blog posts by staying updated. No spamming: we promise.