5.1 Exercícios: Jogo Da Forca
Neste exercício, vamos aproveitar nosso novo conhecimento em listas para fazer com que o jogo da forca se lembre das letras acertadas pelo jogador.
- Crie um arquivo chamado forca.py na pasta jogos:
|_ home
|_ jogos
|_ adivinhacao.py
|_ forca.py
- Primeiro, precisamos mostrar para o jogador a mensagem de abertura, similar ao que foi feito no jogo da adivinhação:
print('\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*') print('\*\*\*Bem vindo ao jogo da Forca!\*\*\*') print('\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*')- Crie a variável palavra_secreta, que será iniciada com o valor ‘banana’, e uma lista para representar as letras acertadas.
palavra_secreta = ‘banana’
letras_acertadas = ['', '', '', '', '', '']
- Crie as variáveis booleanas acertou e errou , que vamos utilizar no laço while . Além disso, crie a variável erros , que armazenará o numero de erros do usuário:
acertou = False enforcou = False erros =
while(not acertou and not enforcou): # código
- Crie a variável chute , que vai guardar entrada do usuário.
while(not acertou and not enforcou): chute = input(‘Qual letra? ’)
- Dentro do while , crie um loop for para checar se a letra existe na palavra secreta. Se o chute for igual a letra digitada pelo jogador, adicione a letra na lista letras_acertadas na posição correta
while(not acertou and not enforcou): chute = input(‘Qual letra? ’)
posicao =
for letra in palavra_secreta: if (chute == letra):letras_acertadas[posicao] = letra posicao +=
- Modifique a condição do if para considerarmos apenas letras maiúsculas utilizando a função
upper de strings. Atualize também a variável chute .
if (chute.upper() == letra.upper()):- Agora precisamos incrementar a variável erros caso o jogador não acerte a letra. Se o chute é uma letra dentro de palavra_secreta, quer dizer que o jogador acertou, e caso contrário, incrementamos a variável erros. Para isso, teremos mais um bloco if/else :
if(chute in palavra_secreta): posicao =
for letra in palavra_secreta: if(chute.upper() == letra.upper()):letras_acertadas[posicao] = letra posicao +=
else:
erros += 1
9. Atualize a variável acertou . Se todas as letras ainda não foram acertadas, quer dizer que o usuário ainda não finalizou o jogo, ou seja, letras*acertas ainda contém espaços vazios ('*'). Dentro do *loop* while , após o comando for , vamos atualizar a variável *acertou* e utilizar o operador not in :
acertou = '_' not in letras_acertadas.
Podemos ler o código acima como ”’_’ não está contido em letras_acertadas”.
- Vamos também atualizar a variável enforcou . Vamos considerar que se o jogador errar 7 vezes ele perde o jogo. Como a variável inicia com 0 (zero), quer dizer que quando ela for igual a 6, ele se enforca. Atualize a variável dentro do loop while após a variável acertou :
acertou = ”_” not in letras_acertadas enforcou = erros ==
- Para que o jogador acompanhe o resultado a cada chute que ele der, ao final do laço while , imprima também a lista letras_acertadas para que ele veja como ele está indo no jogo:
while(not enforcou and not acertou): código omitido print(letras_acertadas)
- E claro, para dar uma dica ao nosso jogador de quantas letras a palavra tem, vamos colocar acima do while um print inicial para que ele veja de início qual o tamanho da palavra:
print(letras_acertadas)while (not acertou and not enforcou):
…
- Por fim, vamos imprimir uma mensagem de “Você ganhou!” se o usuário adivinhar a letra e “Você perdeu” caso tenha cometido 6 erros. Após o laço while , fora dele, acrescente:
if(acertou):
print('Você ganhou!!') else:print('Você perdeu!!') print('Fim do jogo')- Faça o teste e veja na resposta se seu código funcionando.
$ python3 jogos/forca.py
No final, seu código deve estar parecido com este:
def jogar():print('\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*') print('\*\*\*Bem vindo ao jogo da Forca!\*\*\*') print('\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*')palavra_secreta = ‘banana’
letras_acertadas = ['', '', '', '', '', '']
enforcou = False acertou = False erros =
print(letras_acertadas)while(not enforcou and not acertou): chute = input(“Qual letra? ”) if(chute in palavra_secreta):
posicao =
for letra in palavra_secreta: if(chute.upper() == letra.upper()):letras_acertadas[posicao] = letra posicao = posicao +
else:
erros += 1
enforcou = erros == 6
acertou = '_' not in letras_acertadas print(letras_acertadas)
if(acertou):
print('Você ganhou!!') else:print('Você perdeu!!') print('Fim do jogo')