01.
def
fich_to_dict(ficheiro):
02.
"""Transforma os dados de um ficheiro para um dicionário."""
03.
linhas
=
ficheiro.readlines()
04.
dicio
=
{}
05.
for
linha
in
linhas:
06.
nome,jogos,vitorias
=
linha.split()
07.
dicio.update({nome:[int(jogos),int(vitorias)]})
08.
return
dicio
09.
10.
def
dict_to_fich(dicio, ficheiro):
11.
"""Transforma os dados de um dicionário para um ficheiro."""
12.
f_out
=
open(ficheiro,
'w'
)
13.
for
chave,valor
in
dicio.items():
14.
linha
=
chave
+
'\t\t'
+
str(dicio[chave][
0
])
+
'\t'
+
str(dicio[chave][
1
])
+
'\n'
15.
f_out.write(linha)
16.
f_out.close()
17.
return
dicio
Por outro lado, a parte inicial do programa também deve ser alterada, de modo a identificar o jogador e saber como actualizar os dados no final de cada jogo. Vejamos como.
01.
def
hang810a(fich_dados):
02.
# Mensagem inicial
03.
print
'Bem Vindo ao Jogo do Enforcado!!!'
04.
print
'Vamos jogar!'
05.
# recupera informação estatística
06.
f_in
=
open(fich_dados,
'r'
)
07.
dicio_jogadores
=
fich_to_dict(f_in)
08.
f_in.close()
09.
# identificação do jogador
10.
nome
=
raw_input(
'O seu nome por favor: '
)
11.
if
nome
in
dicio_jogadores:
12.
print
'Olá de novo!'
13.
print
'O seu desempenho actual é:'
14.
print
'Jogos efectuados: %d \nVitórias: %d'
%
(dicio_jogadores[nome][
0
], dicio_jogadores[nome][
1
])
15.
else
:
16.
print
'Bem Vindo pela primeira vez!'
17.
dicio_jogadores[nome]
=
[
0
,
0
]
18.
19.
# jogar
20.
jogar
=
True
21.
while
jogar:
22.
hang810(nome,dicio_jogadores)
23.
jogar
=
continuar(jogar,dicio_jogadores, fich_dados)
24.
25.
26.
def
continuar(jogar,dicio_jogadores,fich_dados):
27.
# Jogar mais??
28.
mais
=
raw_input(
'mais? [S/N]: '
)
29.
while
mais
not
in
[
'S'
,
'N'
,
's'
,
'n'
,
'sim'
,
'não'
]:
30.
mais
=
raw_input(
'A resposta tem que ser [S/N]. A sua resposta: '
)
31.
if
mais
in
[
'N'
,
'n'
,
'não'
]:
32.
# Actualiza estatística
33.
dict_to_fich(dicio_jogadores,fich_dados)
34.
print
'Adeus, até à vista...'
35.
jogar
=
False
36.
return
jogar
Como se pode ver o programa depois de fazer a inicialização necessária, chama o programa que efectivamente joga. Aqui tivemos que fazer as alterações que envolvem a actualização da parte estatística no final de cada jogo. Por outro lado, mantivemos a parte do programa que permite jogar mais do que uma vez.
01.
def
hang810(nome,dicio_jogadores):
02.
03.
# --- palavra secreta
04.
palavras
=
open(
'/tempo/data/palavras.txt'
,
'r'
).read().split()
05.
secreta
=
list(random.choice(palavras))
06.
dicio
=
seq_to_dict(secreta)
07.
08.
# --- parâmetros
09.
tentativas
=
len(secreta)
10.
acertou
=
False
11.
estado
=
cria_estado(list(
'_'
*
len(secreta)), [],tentativas)
12.
13.
# Começa o jogo
14.
for
tentativa
in
range(tentativas):
15.
# Estado actual
16.
mostra_estado(estado)
17.
# joga
18.
letra
=
adivinha(estado)
19.
# analisa resposta
20.
if
letra
in
dicio:
21.
# --- Acertou na letra!
22.
indices
=
dicio[letra]
23.
pal_utilizador
=
get_palavra(estado)
24.
for
ind
in
indices:
25.
pal_utilizador[ind]
=
letra
26.
estado
=
set_palavra(estado,pal_utilizador)
27.
# --- Acertou na palavra??
28.
if
fim(secreta,pal_utilizador):
29.
acertou
=
True
30.
mensagem_sim(secreta)
31.
break
32.
# Actualiza estado
33.
estado
=
actualiza_estado(estado, estado[
'palavra'
],letra, get_tentativas(estado)
-
1
)
34.
# actualiza estatística
35.
dicio_jogadores[nome][
0
]
=
dicio_jogadores[nome][
0
]
+
1
36.
if
acertou:
37.
dicio_jogadores[nome][
1
]
=
dicio_jogadores[nome][
1
]
+
1
38.
# mensagem final
39.
mensagem_fim(acertou,secreta)
Falta apenas incluir as definições auxiliares introduzidas nas versões anteriores.
Sem comentários:
Enviar um comentário