1
resposta

[Dúvida] Projeto final e descrição do código

Para o melhor entender o código elaborado, escrevi um texto, de forma resumida, explicando ele . Vou deixar abaixo, junto com meu código. Aceito correções e demais sugestões para o código/texto:

import random

def jogar():

    imprime_mensagem_abertura()
    palavra_secreta = carrega_palavra_secreta()
    letras_acertadas = inicia_letrasacertadas(palavra_secreta)

    enforcou = False
    acertou = False
    erros = 0

    print(letras_acertadas)

    while(not enforcou and not acertou):

        chute = chama_chute()

        if(chute in palavra_secreta):
            seleciona_chute_correto(chute, letras_acertadas, palavra_secreta)
        else:
            erros += 1
            desenha_forca(erros)

        enforcou = erros == 7
        acertou = "_" not in letras_acertadas
        print(letras_acertadas)


    if(acertou):
        imprime_mensagem_vencedor()
    else:
        imprime_mensagem_perdedor(palavra_secreta)


    print("Fim do jogo")

def desenha_forca(erros):
    print("  _______     ")
    print(" |/      |    ")

    if(erros == 1):
        print(" |      (_)   ")
        print(" |            ")
        print(" |            ")
        print(" |            ")

    if(erros == 2):
        print(" |      (_)   ")
        print(" |      \     ")
        print(" |            ")
        print(" |            ")

    if(erros == 3):
        print(" |      (_)   ")
        print(" |      \|    ")
        print(" |            ")
        print(" |            ")

    if(erros == 4):
        print(" |      (_)   ")
        print(" |      \|/   ")
        print(" |            ")
        print(" |            ")

    if(erros == 5):
        print(" |      (_)   ")
        print(" |      \|/   ")
        print(" |       |    ")
        print(" |            ")

    if(erros == 6):
        print(" |      (_)   ")
        print(" |      \|/   ")
        print(" |       |    ")
        print(" |      /     ")

    if (erros == 7):
        print(" |      (_)   ")
        print(" |      \|/   ")
        print(" |       |    ")
        print(" |      / \   ")

    print(" |            ")
    print("_|___         ")
    print()

def imprime_mensagem_vencedor():
    print('Você ganhou!')


def imprime_mensagem_perdedor():
    print('Você perdeu!')

def imprime_mensagem_abertura():
    print('*' * 25)
    print('Bem vindo ao jogo da forca!')
    print('*' * 25)

def chama_chute():
    chute = input("Qual letra? ")
    chute = chute.strip().upper()
    return chute

def carrega_palavra_secreta():
    arquivo = open("palavras.txt", "r")
    palavras = []

    for linha in arquivo:
        linha = linha.strip()
        palavras.append(linha)

    arquivo.close()

    numero = random.randrange(0, len(palavras))
    palavra_secreta = palavras[numero].upper()
    return palavra_secreta

def seleciona_chute_correto(chute, letras_acertadas, palavra_secreta):
    index = 0
    for letra in palavra_secreta:
        if (chute == letra):
            letras_acertadas[index] = letra
        index += 1

def inicia_letrasacertadas(palavra):
    return ['_' for letra in palavra]

if(__name__ == "__main__"):
    jogar()

A escrita do jogo foi simplificada criando diversas funções para (função DEF) deixar o código mais legível e mais organizado, também, tendo em vista o grande número de comandos escritos.

Foi importada a biblioteca random, pois é necessário para escolha aleatória da palavra_secreta

As funções mais simples criadas foram para a impressão da mensagem de boas vindas ao jogador, a impressão para o jogador chutar alguma letra da palavra secreta e a impressão da mensagem afirmando se o jogador teria perdido ou ganhado, que apareceria ao término do jogo.

Depois deles, foi definido a função para a palavra secreta que será carregada diretamente do arquivo “palavras.txt” criado no terminal do PYCHARM, por meio da função built-in OPEN (recebe o parâmetro de qual arquivo queremos abrir e o modo de trabalho do arquivo, nesse caso o r → read) e CLOSE (que fecha o arquivo). A partir dele foi carregada uma palavra aleatória retirada do arquivo “palavras.txt”

Também está definido o que aconteceria se o chute da letra, para a palavra secreta, fosse correto. Para isso, nessa função, foi criado um laço FOR para achar a letra dentro da palavra secreta (FOR letra IN palavra_secreta), onde foi identada uma condição IF para essa função.

Por fim, aparece definida a função inicia_letrasacertadas que funciona para tirar o “_” do lugar de onde as letras foram acertadas, para assim o espaço ficar preenchido apenas pela letra digitada corretamente.

Com isso, o jogo da forca foi elaborado, de forma a levar em conta diversas funções built-in, a importação de biblioteca e a definição de diversas funções.

1 resposta

Olá, Federico! Tudo joia?

Seu código está ótimo - apresenta boa estrutura e endentação correta. Parabéns! Isso é super importante para que a leitura seja de fácil entendimento. Isso sem contar o seu texto explicativo, ficou muito bem escrito.

Os pontos de melhoria que poderia passar seriam mais por uma questão de capricho, além de envolver algumas estruturas que talvez você ainda não conheça. Então, não darei spoilers.

No mais, continue praticando e aplicando seus conhecimentos e caso tenha dúvidas, saiba que sempre pode recorrer ao fórum.

Abraços e bons estudos!