Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

O meu Jogo da Forca Não funciona como deveria.

import random


def jogar():

    imprime_mensagem_abertura()
    palavra_secreta = carrega_palavra_secreta()

    letras_acertadas = inicializa_letras_acertadas(palavra_secreta)
    print(letras_acertadas)

    enforcou = False
    acertou = False
    erros = 0

    while(not acertou and not enforcou):

        chute = pede_chute()

        if(chute in palavra_secreta):
            marca_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)

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() #desenho da forca.


def imprime_mensagem_vencedor():
    print("Parabéns, você ganhou!")
    print("       ___________      ")
    print("      '._==_==_=_.'     ")
    print("      .-\\:      /-.    ")
    print("     | (|:.     |) |    ")
    print("      '-|:.     |-'     ")
    print("        \\::.    /      ")
    print("         '::. .'        ")
    print("           ) (          ")
    print("         _.' '._        ")
    print("        '-------'       ") #desenho do troféu

def imprime_mensagem_perdedor(palavra_secreta):
    print("Puxa, você foi enforcado!")
    print("A palavra era {}".format(palavra_secreta))
    print("    _______________         ")
    print("   /               \       ")
    print("  /                 \      ")
    print("//                   \/\  ")
    print("\|   XXXX     XXXX   | /   ")
    print(" |   XXXX     XXXX   |/     ")
    print(" |   XXX       XXX   |      ")
    print(" |                   |      ")
    print(" \__      XXX      __/     ")
    print("   |\     XXX     /|       ")
    print("   | |           | |        ")
    print("   | I I I I I I I |        ")
    print("   |  I I I I I I  |        ")
    print("   \_             _/       ")
    print("     \_         _/         ")
    print("       \_______/           ")  #desenho da caveira

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

def pede_chute():
        chute = input("Qual Letra? ")
        chute = chute.strip().upper()
        return chute

def inicializa_letras_acertadas(palavra):
    return ["_" for letra in palavra]

def imprime_mensagem_abertura():
        print("*********************************")
        print("***Bem vindo ao jogo da Forca!***")
        print("*********************************")

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

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

A SEGUIR ESTOU RESPONDENDO MINHA PRÓPRIA PERGUNTA, COMO CONTINUAÇÃO DESTA!

3 respostas
no entanto o jogo se comportou dessa maneira:
*********************************
***Bem vindo ao jogo da Forca!***
*********************************
['_', '_', '_', '_', '_']
Qual Letra? b
  _______     
 |/      |    
 |      (_)   
 |            
 |            
 |            
 |            
_|___         

['_', '_', '_', '_', '_']
Qual Letra? a
['A', '_', '_', '_', '_']
Qual Letra? n
  _______     
 |/      |    
 |      (_)   
 |      \     
 |            
 |            
 |            
_|___         

['A', '_', '_', '_', '_']
Qual Letra? m
['M', '_', '_', '_', '_']
Qual Letra? e
['E', '_', '_', '_', '_']
Qual Letra? i
  _______     
 |/      |    
 |      (_)   
 |      \|    
 |            
 |            
 |            
_|___         

['E', '_', '_', '_', '_']
Qual Letra? s
  _______     
 |/      |    
 |      (_)   
 |      \|/   
 |            
 |            
 |            
_|___         

['E', '_', '_', '_', '_']
Qual Letra? w
  _______     
 |/      |    
 |      (_)   
 |      \|/   
 |       |    
 |            
 |            
_|___         

['E', '_', '_', '_', '_']
Qual Letra? e
['E', '_', '_', '_', '_']
Qual Letra? u
  _______     
 |/      |    
 |      (_)   
 |      \|/   
 |       |    
 |      /     
 |            
_|___         

['E', '_', '_', '_', '_']
Qual Letra? j
  _______     
 |/      |    
 |      (_)   
 |      \|/   
 |       |    
 |      / \   
 |            
_|___         

['E', '_', '_', '_', '_']
Puxa, você foi enforcado!
A palavra era MELAO
    _______________         
   /               \       
  /                 \      
//                   \/\  
\|   XXXX     XXXX   | /   
 |   XXXX     XXXX   |/     
 |   XXX       XXX   |      
 |                   |      
 \__      XXX      __/     
   |\     XXX     /|       
   | |           | |        
   | I I I I I I I |        
   |  I I I I I I  |        
   \_             _/       
     \_         _/         
       \_______/           

observem que a palavra era pra ser melao, porém o jogo não seguiu a ordem correta de letras, além de ter excedido o limite de tentativas!

nesse outro exemplo:


Bem vindo ao jogo da Forca!


['', '', '', '', '', '']

Qual Letra? b

['B', '', '', '', '', '_']

Qual Letra? a

['A', 'A', 'A', '', '', '_']

Qual Letra?

A palavra é Banana! porém, ao invés de após o B vim o A de forma ordenada, o A é substitui o B e adiciona mais dois A´s logo em seguida, evidentemente banana possui três A´s.

Qual Letra? n

['N', 'N', 'A', '', '', '_']

Qual Letra?

novamente quando o n é selecionada vemos os dois N´s da palavra banana, tomando conta do dois primeiros lugares, as letras acabaram e o jogo continua dessa forma, inclusive excedendo o limite de tentativas, desde já Obrigado!

solução!

Olá Lucas,

Trata-se de uma falha na posição da soma do index, o correto é estar dentro do "for" e fora do "if", abaixo o código corrigido.

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

Muito Obrigado! funcionou!, :)