Contents

Como criar um jogo da forca usando Python

Tenho o prazer de o informar que se encontra num local apropriado para participar num jogo personalizado da sua própria criação. A popularidade do jogo de adivinhação conhecido como “Hangman” requer apenas um esforço mínimo para a sua personalização.

O jogo acima mencionado ganhou reconhecimento através das suas aparições em programas e séries de televisão bem conhecidos, incluindo Wheel of Fortune, Letterbox e Party Time. Além disso, pode ser construído utilizando Python como um meio eficiente para desenvolver um clone do Hangman.

Como jogar o jogo da forca

O jogo da forca envolve dois jogadores, com uma parte a pensar numa palavra secreta enquanto a outra tenta deduzi-la através de uma série de adivinhações de letras. O jogador inicial revela a palavra mistério revelando uma sequência de espaços em branco, acompanhados por um carácter inicial designado. O segundo participante faz então suposições com base nas letras que acredita estarem contidas na palavra.

Se a letra adivinhada estiver presente na palavra-alvo, o programa preencherá o traço com o carácter correspondente. Por outro lado, se o jogador não conseguir dar a resposta correcta nas tentativas seguintes, o programa reduzirá o número de oportunidades restantes em uma unidade e gerará um segmento de um boneco como marca de contagem. Com um máximo de sete oportunidades, se o utilizador conseguir identificar a palavra mistério, ganha o jogo. Caso contrário, o programa completará a ilustração do boneco, independentemente de todas as oportunidades terem sido esgotadas ou não.

Pode criar uma lista das suas palavras favoritas ou descarregar uma como a lista de mais de 58 000 palavras inglesas de Mieliestronk . Também pode explorar e construir outros jogos divertidos baseados em texto, como um jogo de perguntas interativo

ou um jogo de aventura baseado em texto

em Python.

Como construir o jogo da forca

O código fonte do jogo da forca acima mencionado, juntamente com o seu ficheiro de lista de palavras, pode ser encontrado no repositório GitHub especificado, e a sua utilização é permitida sem quaisquer taxas ou encargos.

Por favor, importe o módulo random e defina uma função chamada “get\_random\_word\_from\_wordlist()” que irá selecionar uma palavra aleatória de uma lista de palavras especificada presente num ficheiro de texto. Esta lista de palavras pode incluir substantivos comuns, nomes de lugares, nomes de animais, títulos de filmes, etc., dependendo da preferência de cada um. Para criar a lista de palavras, utilize a notação de parêntesis rectos no código Python.

Por favor, abra o ficheiro utilizando a instrução com , especificando 'r' como modo para indicar o acesso só de leitura. A instrução com garante que o ficheiro será fechado corretamente, mesmo que ocorra um erro durante a execução. Neste caso, consideremos o

Por favor, passe o carácter de escape para uma nova linha (\n) à função split(), para que esta possa dividir o texto de entrada em palavras e armazená-las na lista previamente definida. Depois, utilize o método random.choice() para selecionar uma palavra aleatoriamente da lista.

 import random
 
def get_random_word_from_wordlist():
    wordlist = []
 
    with open("hangman_wordlist.txt", 'r') as file:
        wordlist = file.read().split("\n")
 
    word = random.choice(wordlist)
    return word
 

De seguida, introduzimos uma função, designada por get\_some\_letters() , que recebe como argumento a palavra escolhida arbitrariamente. O objetivo desta função é apresentar ao utilizador final uma série de hífenes ( - ) e caracteres alfabéticos.

Uma lista vazia é designada por “letras”. Esta lista servirá para manter o registo de todos os caracteres constituintes de uma dada palavra. Para o efeito, é criada uma variável temporária que contém uma representação em cadeia do número de espaços em branco igual ao comprimento da palavra. A string é então convertida numa lista de caracteres utilizando a função “list()”, após o que cada carácter é adicionado à lista original através da utilização do método “append()”, desde que ainda não exista na lista.

Seleccione uma palavra das opções dadas e introduza a sua resposta no prazo de 60 segundos (o tempo limite será apresentado no ecrã). A opção correcta será revelada após a sua apresentação, juntamente com o tempo restante, se este for inferior a 15 segundos.

Ao descobrir o carácter escolhido aleatoriamente, por favor insira o símbolo em vez do traço anterior. Além disso, utilizar a metodologia “join()” para consolidar os caracteres variados numa entidade singular e devolvê-los imediatamente.

 def get_some_letters(word):
    letters = []
    temp = '_' * len(word)
 
    for char in list(word):
        if char not in letters:
            letters.append(char)
 
    character = random.choice(letters)
 
    for num, char in enumerate(list(word)):
        if char == character:
            templist = list(temp)
            templist[num] = char
            temp = ''.join(templist)
 
    return temp 

A função draw\_hangman() foi concebida para receber um parâmetro que representa o número de hipóteses restantes. A referida função gera uma imagem de um carrasco, com o número de linhas a representar o estado atual do jogo. À medida que as oportunidades disponíveis diminuem, a probabilidade de sucesso diminui em conformidade. Quando todas as opções estiverem esgotadas, o jogo termina.

 def draw_hangman(chances):
    if chances == 6:
        print("________ ")
        print("| | ")
        print("| ")
        print("| ")
        print("| ")
        print("| ")
    elif chances == 5:
        print("________ ")
        print("| | ")
        print("| 0 ")
        print("| ")
        print("| ")
        print("| ")
    elif chances == 4:
        print("________ ")
        print("| | ")
        print("| 0 ")
        print("| / ")
        print("| ")
        print("| ")
    elif chances == 3:
        print("________ ")
        print("| | ")
        print("| 0 ")
        print("| /| ")
        print("| ")
        print("| ")
    elif chances == 2:
        print("________ ")
        print("| | ")
        print("| 0 ")
        print("| /|\ ")
        print("| ")
        print("| ")
    elif chances == 1:
        print("________ ")
        print("| | ")
        print("| 0 ")
        print("| /|\ ")
        print("| / ")
        print("| ")
    elif chances == 0:
        print("________ ")
        print("| | ")
        print("| 0 ")
        print("| /|\ ")
        print("| / \ ")
        print("| ") 

A função start\_hangman\_game() é responsável pela implementação da função primária

Vamos estabelecer uma contraparte conhecida como “found” e inicializar o seu valor como false. Esta contraparte será considerada verdadeira se o carácter adivinhado aparecer na palavra designada.

 def start_hangman_game():
    word = get_random_word_from_wordlist()
    temp = get_some_letters(word)
    chances = 7
    found = False 

Será implementado um processo iterativo, que termina quando o utilizador adivinhar com precisão a palavra secreta ou esgotar as suas oportunidades. O jogo começa com a apresentação da sequência, do número de caracteres da palavra e das hipóteses restantes. Pedir ao utilizador para especificar uma letra utilizando a função input() e validar a entrada verificando o seu comprimento e se pertence ao alfabeto.

     while True:
        if chances == 0:
            print(f"Sorry! You Lost, the word was: {word}")
            print("Better luck next time")
            break
 
        print("=== Guess the word ===")
        print(temp, end='')
        print(f"\t(word has {len(word)} letters)")
        print(f"Chances left: {chances}")
        character = input("Enter the character you think the word may have: ")
 
        if len(character) > 1 or not character.isalpha():
            print("Please enter a single alphabet only")
            continue 

Se a entrada for considerada válida, vamos verificar se o carácter aparece dentro da palavra. Se aparecer, usamos a técnica adoptada anteriormente para substituir o carácter por outro, ao mesmo tempo que actualizamos o valor de “encontrado” em conformidade. Se o carácter não aparecer na palavra, diminuímos a contagem de oportunidades restantes. Pelo contrário, se o carácter estiver presente, o valor de “encontrado” volta ao seu estado original, que é falso.

Se todos os espaços em branco tiverem sido corretamente adivinhados, então mostra uma mensagem indicando que o jogador ganhou, juntamente com o número total de tentativas de adivinhação. Por outro lado, se algum espaço ficar por adivinhar, mostra um gráfico da forca que representa as hipóteses restantes.

         else:
            for num, char in enumerate(list(word)):
                if char == character:
                    templist = list(temp)
                    templist[num] = char
                    temp = ''.join(templist)
                    found = True
 
        if found:
            found = False
        else:
            chances -= 1
 
        if '_' not in temp:
            print(f"\nYou Won! The word was: {word}")
            print(f"You got it in {7 - chances} guess")
            break
        else:
            draw_hangman(chances)
 
        print() 

Vamos dar eloquência e sofisticação ao presente fragmento de código, empregando uma forma elegante de expressão, utilizando vocabulário refinado e incorporando nuances subtis que acrescentam profundidade e complexidade à linguagem. Assim, vamos transformar esta afirmação numa forma mais sofisticada:Incorporar uma função para iniciar o jogo da forca, em que, se o utilizador optar por prosseguir através da introdução de “sim”, invoca a função start\_hangman\_game(). Em alternativa, se o utilizador optar por não participar no jogo ou introduzir uma resposta inválida, apresentar uma mensagem adequada indicando o fim do jogo e solicitar ao utilizador que volte a entrar.

 print("===== Welcome to the Hangman Game =====")
 
while True:
    choice = input("Do you wanna play hangman? (yes/no): ")
 
    if 'yes' in choice.lower():
        start_hangman_game()
    elif 'no' in choice.lower():
        print('Quitting the game...')
        break
    else:
        print("Please enter a valid choice.")
 
    print("\n") 

O resultado do jogo da forca

A seguinte mensagem será apresentada quando o jogo for ganho:

/pt/images/Hangman-Output-if-you-win.jpg

Se alguém fosse derrotado no concurso, observaria o seguinte ecrã.

/pt/images/Hangman-Output-if-you-lose.jpg

Use Python para construir jogos

Python é capaz de ser utilizado no desenvolvimento de jogos gráficos e de linha de comando. Uma variedade de jogos de linha de comandos intrigantes pode ser construída utilizando Python, incluindo o jogo de adivinhação de números, o jogo Magic 8 Ball, Mad Libs, Rock/Paper/Scissors, e um jogo de aventura baseado em texto.

Alguns jogos gráficos divertidos que podem ser construídos usando Python são Tic Tac Toe, Maze, Snake, Pacman e Memory.O aspeto mais apelativo destes jogos é o facto de poderem ser criados utilizando apenas a Biblioteca Padrão Python.