-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathmain.py
More file actions
139 lines (97 loc) · 5.85 KB
/
Copy pathmain.py
File metadata and controls
139 lines (97 loc) · 5.85 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
import random
from guerreiro import Guerreiro
from mago import Mago
from arqueiro import Arqueiro
class Jogo:
#-----------------Construtor da classe Jogo-----------------------------
def __init__(self):
self.jogador = None # Personagem do jogador
self.inimigo = None # Personagem do inimigo
#-----------------Função para criar o personagem do jogo-------------------
def criar_jogador(self):
print("=== CRIAR PERSONAGEM ===")
nome = input("Digite seu nome: ") #Solicita o nome do jogador
#------------Menu de escolha da classe do personagem----------------
print("\nEscolha sua classe:") #Opções
print("1 - Guerreiro (Vida: 100, Força: 15)")
print("2 - Mago (Vida: 70, Força: 8, Mana: 30)")
print("3 - Arqueiro (Vida: 85, Força: 12, Flechas: 5)")
escolha = input("Sua escolha (1, 2 ou 3): ") #Recebe a escolha do jogador
if escolha == "1": #escolha do guerreiro
return Guerreiro(nome)
elif escolha == "2": #escolha do mago
return Mago(nome)
else: #escolha do arqueiro
return Arqueiro(nome)
#---------------------Função para criar o inimigo---------------------------------------
def criar_inimigo(self):
classes = [Guerreiro, Mago, Arqueiro]
nomes = ["Orc", "Goblin", "Esqueleto", "Bruxo", "Bandido"]
classe = random.choice(classes) #Escolhe uma classe aleatória para o inimigo
nome = random.choice(nomes) #Escolhe um nome aleatório para o inimigo
return classe(nome) #Retorna o inimigo criado
#---------------------Funções para mostrar e executar ações------------------------
def mostrar_acoes(self, personagem):
#Mostra o turno do personagem
print(f"\n--- TURNO DE {personagem.nome.upper()} ---") #Mostra o nome do personagem em maiúsculas
print(f"Status: {personagem.mostrar_status()}") #Mostra o status do personagem
if isinstance(personagem, Guerreiro): #Verifica se o personagem é um guerreiro
print("1 - Ataque Normal")
print("2 - Golpe Pesado")
elif isinstance(personagem, Mago): #Verifica se o personagem é um mago
print("1 - Ataque Normal (+5 mana)")
print("2 - Lançar Feitiço (-15 mana)")
elif isinstance(personagem, Arqueiro): #Verifica se o personagem é um arqueiro
print("1 - Tiro Normal")
print("2 - Tiro Preciso (usa 1 flecha)")
return input("Escolha ação (1 ou 2): ") #Retorna a ação escolhida pelo jogador
#---------------------Função para executar a ação escolhida------------------------
def executar_acao(self, personagem, alvo, acao):
if acao == "1": # Ação 1 é sempre o ataque normal
return personagem.atacar(alvo, "normal")
else:
if isinstance(personagem, Guerreiro):
return personagem.atacar(alvo, "pesado") # Golpe pesado do guerreiro
elif isinstance(personagem, Mago):
return personagem.atacar(alvo, "feitico") # Feitiço do mago
elif isinstance(personagem, Arqueiro):
return personagem.atacar(alvo, "preciso") # Tiro preciso do arqueiro
#---------------------Funções dos turnos do jogador e do inimigo------------------------
def turno_jogador(self): #Turno do jogador
acao = self.mostrar_acoes(self.jogador) #Mostra as ações do jogador e recebe a escolha
resultado = self.executar_acao(self.jogador, self.inimigo, acao) #Executa a ação escolhida
print(resultado)
def turno_inimigo(self): #Turno do inimigo
print(f"\n--- TURNO DO INIMIGO ---")
acao = random.choice(["1", "2"]) #Escolhe aleatoriamente entre ataque normal ou especial
resultado = self.executar_acao(self.inimigo, self.jogador, acao) #Executa a ação escolhida
print(resultado)
#---------------------Função principal do jogo----------------------------
def jogar(self):
print("=== MINI RPG ===")
self.jogador = self.criar_jogador() #Chama a função que cria o personagem do jogador
self.inimigo = self.criar_inimigo() #Chama a função que cria o personagem do inimigo
print(f"\nSeu inimigo é: {self.inimigo.nome}") #Mostra o nome do inimigo
while self.jogador.esta_vivo() and self.inimigo.esta_vivo(): #Enquanto ambos estiverem vivos
print(f"\n{self.jogador.mostrar_status()} | {self.inimigo.mostrar_status()}") #Mostra o status de ambos
self.turno_jogador() #Chama a função do turno do jogador
if not self.inimigo.esta_vivo(): # Se o inimigo morrer, sai do loop
break
self.turno_inimigo() #Chama a função do turno do inimigo
print("\n=== FIM DO JOGO ===") #Mostra o fim do jogo
if self.jogador.esta_vivo(): #Verifica quem venceu
print(f" {self.jogador.nome} VENCEU!") #Imprime se o jogador vencer
else:
print(f" {self.inimigo.nome} VENCEU!") #Imprime se o jogador perder
#---------------------Loop para reiniciar o jogo----------------------------
def main(): # Função principal
while True:
jogo = Jogo() #Cria uma instância do jogo
jogo.jogar() #Inicia o jogo
jogar_novamente = input("\nJogar novamente? (s/n): ").lower() #Pergunta se o jogador quer jogar novamente
if jogar_novamente != 's': #Se a resposta for diferente de 's', sai do loop
print("Obrigado por jogar!")
break
#---------------------Início do programa----------------------------
if __name__ == "__main__":
main() #Chama a função principal