-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathProjetoForca.py
275 lines (249 loc) · 8.91 KB
/
ProjetoForca.py
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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
# Jogo da forca
#Desenhos Ascii
des_forca = ['''
+---+
| |
|
|
|
|
=========''', '''
+---+
| |
O |
|
|
|
=========''', '''
+---+
| |
O |
| |
|
|
=========''', '''
+---+
| |
O |
/| |
|
|
=========''', '''
+---+
| |
O |
/|\ |
|
|
=========''', '''
+---+
| |
O |
/|\ |
/ |
|
=========''', '''
+---+
| |
O |
/|\ |
/ \ |
|
=========
''']
arvores_frutiferas = [
'Macieira',
'Pereira',
'Cerejeira',
'Pessegueiro',
'Ameixeira',
'Videira',
'Morangueiro',
'Limoeiro',
'Laranjeira',
'Abacateiro',
'Mangueira',
'Bananeira',
'Kiwi',
'Romãzeira',
'Coqueiro',
'Nogueira-Pecã',
'Figueira',
'Cajueiro',
'Ameixeira-amarela',
'Framboeseira',
'Amoreira',
'Abacaxizeiro',
'Cerejeira-do-rio-grande',
'Goizeiro',
'Maracujazeiro',
'Figueira-da-índia',
'Nespereira',
'Lichieira',
'Goiabeira',
'Sapote'
]
#Fonte: https://ascii.co.uk/art/tree
arvore_ascii = """
. . .
. . . .. .
. . . .
.
. ..
. . . .
. '., . .
. 'b *
. '$ #. ..
. . $: #: .
.. . .. *# @): . . .
. :@,@): ,.**:' .
. ., :@@*: ..**' . .
'#o. .:(@'.@*"' .
. . 'bq,..:,@@*' ,* . .
,p$q8,:@)' .p*' .
. ' . '@@Pp@@*' . .
. . .. Y7'.' . .
:@):.
.:@:'.
.::(@:.
"""
#Fonte: https://patorjk.com/software/taag/#p=display&f=Graffiti&t=Type%20Something%20
you_win = """
____ ____ ____ ____ _ _
|_ _||_ _| |_ _| |_ _|(_) | |
\ \ / / .--. __ _ \ \ /\ / / __ _ .--. | |
\ \/ // .'`\ \[ | | | \ \/ \/ / [ | [ `.-. | | |
_| |_| \__. | | \_/ |, \ /\ / | | | | | | |_|
|______|'.__.' '.__.'_/ \/ \/ [___][___||__](_)
"""
#Fonte: https://patorjk.com/software/taag/#p=display&f=Graffiti&t=Type%20Something%20
game_over = """
______ ______ __ __ ______ ______ __ __ ______ ______
/\ ___\ /\ __ \ /\ "-./ \ /\ ___\ /\ __ \ /\ \ / / /\ ___\ /\ == \
\ \ \__ \ \ \ __ \ \ \ \-./\ \ \ \ __\ \ \ \/\ \ \ \ \'/ \ \ __\ \ \ __<
\ \_____\ \ \_\ \_\ \ \_\ \ \_\ \ \_____\ \ \_____\ \ \__| \ \_____\ \ \_\ \_\
\/_____/ \/_/\/_/ \/_/ \/_/ \/_____/ \/_____/ \/_/ \/_____/ \/_/ /_/
"""
import random
# Inicio do codigo
# Tamanho das linhas.
largura_linha = 95
# Menu inicial.
print("Bem-vindo ao jogo da forca.".center(largura_linha))
print("O jogo tem como tema árvores frutíferas.".center(largura_linha))
print("Você pode jogar com esse tema ou fornecer sua própria lista de palavras.".center(largura_linha))
print("Deseja iniciar o jogo ou criar uma lista de palavras personalizada?".center(largura_linha))
print("1. Iniciar o jogo.")
print("2. Criar lista.")
# Repetição até que uma opção valida seja digitada.
opcao1_menu = int(input())
while opcao1_menu != 1 and opcao1_menu != 2:
print("Opção invalida, digite novamente!")
opcao1_menu = int(input())
# Caso a opção for 1 sorteia posição aleatoria da lista de arvores, caso contrario faz lista personalizada.
if opcao1_menu == 1:
# Decide um número aleatório e usa como index da lista para para definir palavra aleatória.
pos = random.randint(0, (len(arvores_frutiferas) - 1))
lista_final = arvores_frutiferas[pos]
lista_final = lista_final.lower()
else:
lista_personalizada = []
print("Digite uma palavra seguida de 'Enter' para adicionar a lista, digite 'SAIR' para encerrar.".center(largura_linha))
# Repetição para obter os elementos da lista personalizada.
palavra_inserir = input()
while palavra_inserir != 'SAIR':
lista_personalizada.append(palavra_inserir)
palavra_inserir = input()
# Decide um número aleatório e usa como index da lista para para definir palavra aleatória.
pos = random.randint(0, (len(lista_personalizada) - 1))
lista_final = lista_personalizada[pos]
lista_final = lista_final.lower()
# Inicio do jogo.
print("***** Jogo da Forca *****".center(largura_linha))
# Declara lista com underscores ou hifens baseada na lista final
# para todos os elementos em lista final, se o elemento for um hifem,
# lista chute recebe um hifem,
# se for um espaço recebe um espaço,
# caso contrario recebe underscore.
lista_chute = []
for letra in lista_final:
if letra == " ":
lista_chute.append(" ")
else:
if letra == "-":
lista_chute.append("-")
else:
lista_chute.append("_")
print("A qualquer momento, caso souber a palavra toda, é permitido arriscar e chutar!")
# Imprime lista, se o local for hifem ou underscore imprime os mesmos,
# caso for letra imprime a mesma.
for letra in lista_chute:
if letra == "_":
print("_", end=" ")
elif letra == "-":
print("-", end=" ")
else:
print(letra, end=" ")
print(" ")
cont_erros = 0
vitoria = False
derrota = False
# Enquanto vitória ou derrota não acontecerem execute.
while (not vitoria and not derrota):
# Considera apenas primeiro digito da entrada.
entrada = input("Digite seu chute: ").lower()
if entrada == lista_final:
vitoria = True
continue
else:
chute = entrada[0]
# Caso chute esteja em lista.
if (chute in lista_final):
# Enumerate enumera os valores do index e valores do conteúdo
# para todo index e conteúdo em lista.
for index_lista, valor_lista in enumerate(lista_final):
# Se o valor do conteúdo for igual o chute.
if valor_lista == chute:
# Coloque o chute naquela posição.
lista_chute[index_lista] = valor_lista
# Primeira letra maiúscula.
if index_lista == 0:
lista_chute[index_lista] = valor_lista.upper()
# Retorna true se acabarem os traços.
vitoria = "_" not in lista_chute
# Se acertar imprime a lista atualizada com acerto.
for letra in lista_chute:
if letra == "_":
print("_", end=" ")
elif letra == "-":
print("-", end=" ")
else:
print(letra, end=" ")
print(" ")
else:
# Aumenta o contador de erros, utilizar para indexar o desenho.
cont_erros += 1
# Se o contador chegar no final da forca ativa derrota.
if cont_erros == len(des_forca):
derrota = True
else:
print(des_forca[cont_erros])
# Ao sair da repetição, se vitória imprime mensagens de vitória,
# caso derrota imprime mensagem de derrota e resposta correta.
if vitoria:
# Se vitória e usado a lista padrão mostra desenho de árvore,
# mensagem de vitoria e resposta correta, caso lista for
# personalizada, mostra outro desenho, mensagem de
# vitória e resposta correta.
if opcao1_menu == 1:
print(arvore_ascii)
print("You Win!".center(largura_linha))
print(f"A resposta é: {lista_final.capitalize()}!")
else:
print(you_win)
print(f"Resposta correta: {lista_final.capitalize()}!")
else:
print(game_over)
print(f"Resposta correta: {lista_final.capitalize()}!")
# Pedido de entrada do usuário para finalizar o programa.
input("Press Enter to continue...")