Pular para o conteúdo

Como usar o jogo Pedra, Papel e Tesoura no Python

[

Criando o Seu Primeiro Jogo em Python: Pedra, Papel, Tesoura!

por Chris Wilkerson

Programar um jogo é uma ótima maneira de aprender a programar. Você usa muitas ferramentas que verá no mundo real e ainda tem a oportunidade de jogar para testar seus resultados! Um jogo ideal para começar sua jornada na programação de jogos em Python é o famoso pedra, papel, tesoura.

Neste tutorial, você aprenderá como:

  • Codificar o seu próprio jogo de pedra, papel, tesoura
  • Capturar entrada do usuário com input()
  • Jogar várias partidas seguidas usando um loop while
  • Organizar o seu código com Enum e funções
  • Definir regras mais complexas com um dicionário

O que é o Pedra, Papel, Tesoura?

Você provavelmente já jogou pedra, papel, tesoura antes. Talvez tenha usado para decidir quem paga o jantar ou quem escolhe os jogadores para um time.

Se você não está familiarizado, pedra, papel, tesoura é um jogo de mãos para dois ou mais jogadores. Os participantes dizem “pedra, papel, tesoura” e, simultaneamente, formam suas mãos em uma das seguintes formas: pedra (punho), papel (palma voltada para baixo) ou tesoura (dois dedos estendidos). As regras são simples:

  • A pedra quebra a tesoura.
  • O papel embrulha a pedra.
  • A tesoura corta o papel.

Agora que você conhece as regras, pode começar a pensar em como elas podem ser traduzidas para código Python.

Jogar uma Única Partida de Pedra, Papel, Tesoura em Python

import random

Ótimo! Agora você pode usar as diferentes ferramentas dentro do módulo random para randomizar as ações do computador no jogo. E agora? Como seus usuários também precisarão escolher suas ações, a primeira coisa lógica a fazer é criar um mecanismo para capturar a entrada do usuário.

Capturar a Entrada do Usuário

Capturar a entrada do usuário é bastante simples em Python. O objetivo aqui é perguntar ao usuário qual ação ele gostaria de escolher e, em seguida, atribuir essa escolha a uma variável:

user_action = input("Digite uma escolha (pedra, papel, tesoura): ")

Isso irá solicitar ao usuário que faça uma escolha e salvar essa escolha em uma variável para uso posterior. Agora que o usuário selecionou uma ação, o computador precisa decidir o que fazer.

Fazendo a Escolha do Computador

Um jogo competitivo de pedra, papel, tesoura envolve estratégia. Em vez de tentar desenvolver um modelo para isso, você pode simplesmente fazer com que o computador escolha aleatoriamente uma das opções. Para isso, você pode usar a função choice() do módulo random:

possible_actions = ["pedra", "papel", "tesoura"]
computer_action = random.choice(possible_actions)

Aqui, você criou uma lista com as possíveis ações que o computador pode escolher e usou a função choice() para selecionar aleatoriamente uma delas. Agora que tanto o usuário quanto o computador fizeram suas escolhas, é hora de determinar um vencedor.

Determinando o Vencedor

Aqui está a parte crucial do jogo. Com base nas escolhas do usuário e do computador, você pode determinar quem ganhou. Vamos analisar as possíveis combinações:

  • Se o usuário escolher “pedra” e o computador escolher “tesoura”, o usuário ganha.
  • Se o usuário escolher “papel” e o computador escolher “pedra”, o usuário ganha.
  • Se o usuário escolher “tesoura” e o computador escolher “papel”, o usuário ganha.
  • Se o usuário e o computador escolherem a mesma opção, é considerado um empate.

Vamos implementar isso em código:

if user_action == computer_action:
print(f"Ambos escolheram {user_action}. É um empate!")
elif (
(user_action == "pedra" and computer_action == "tesoura")
or (user_action == "papel" and computer_action == "pedra")
or (user_action == "tesoura" and computer_action == "papel")
):
print(f"Você escolheu {user_action} e o computador escolheu {computer_action}. Você ganhou!")
else:
print(f"Você escolheu {user_action} e o computador escolheu {computer_action}. Você perdeu!")

Este código verifica todas as possíveis combinações e imprime uma mensagem correspondente com base no resultado. Agora você já tem uma única partida de pedra, papel, tesoura funcionando em Python. Mas e se você quiser jogar várias partidas seguidas?

Jogando Várias Partidas em Sequência

Jogar apenas uma partida pode ser divertido, mas vamos expandir um pouco o jogo para permitir que você jogue várias partidas seguidas. Para fazer isso, precisamos de um loop while que continue pedindo ao usuário para fazer escolhas e calcule o resultado de cada rodada. Vamos adicionar o seguinte código:

while True:
user_action = input("Digite uma escolha (pedra, papel, tesoura) ou digite 'sair' para encerrar o jogo: ")
if user_action == "sair":
print("Jogo encerrado. Até a próxima!")
break
computer_action = random.choice(possible_actions)
if user_action == computer_action:
print(f"Ambos escolheram {user_action}. É um empate!")
elif (
(user_action == "pedra" and computer_action == "tesoura")
or (user_action == "papel" and computer_action == "pedra")
or (user_action == "tesoura" and computer_action == "papel")
):
print(f"Você escolheu {user_action} e o computador escolheu {computer_action}. Você ganhou!")
else:
print(f"Você escolheu {user_action} e o computador escolheu {computer_action}. Você perdeu!")

Agora, o jogo continuará rodando até que o usuário digite “sair”. A cada rodada, o usuário terá a oportunidade de fazer uma escolha e o resultado será exibido.

Essas são as etapas básicas para criar um jogo de pedra, papel, tesoura em Python. No entanto, podemos torná-lo mais interessante adicionando mais opções.

Descrevendo uma Ação com enum.IntEnum

Você pode expandir o número de opções do jogo adicionando mais ações, como “lagarto” e “Spock”. Em vez de usar strings para representar as ações, podemos usar uma classe Enum para tornar o código mais legível. Vamos ver como isso pode ser feito:

from enum import IntEnum
class Action(IntEnum):
PEDRA = 1
PAPEL = 2
TESOURA = 3
LAGARTO = 4
SPOCK = 5
possible_actions = list(Action)

Aqui, criamos uma classe Action que herda da classe IntEnum. Cada ação é associada a um número inteiro, o que nos permite realizar comparações diretas entre as ações. Também criamos uma lista possible_actions com todas as opções disponíveis. Agora, vamos atualizar o código existente para usar as novas ações:

while True:
user_action = input("Digite uma escolha (pedra, papel, tesoura, lagarto, Spock) ou digite 'sair' para encerrar o jogo: ")
if user_action == "sair":
print("Jogo encerrado. Até a próxima!")
break
user_action = Action[user_action.upper()]
computer_action = random.choice(possible_actions)
if user_action == computer_action:
print(f"Ambos escolheram {user_action.name}. É um empate!")
elif (
(user_action == Action.PEDRA and computer_action == Action.TESOURA)
or (user_action == Action.PAPEL and computer_action == Action.PEDRA)
or (user_action == Action.TESOURA and computer_action == Action.PAPEL)
or (user_action == Action.LAGARTO and computer_action == Action.PAPEL)
or (user_action == Action.SPOCK and computer_action == Action.TESOURA)
or (user_action == Action.PEDRA and computer_action == Action.LAGARTO)
or (user_action == Action.PAPEL and computer_action == Action.SPOCK)
or (user_action == Action.TESOURA and computer_action == Action.LAGARTO)
or (user_action == Action.LAGARTO and computer_action == Action.SPOCK)
or (user_action == Action.SPOCK and computer_action == Action.PEDRA)
):
print(f"Você escolheu {user_action.name} e o computador escolheu {computer_action.name}. Você ganhou!")
else:
print(f"Você escolheu {user_action.name} e o computador escolheu {computer_action.name}. Você perdeu!")

Agora, o usuário pode fazer escolhas entre “pedra”, “papel”, “tesoura”, “lagarto” e “Spock”. Além disso, atualizamos as condições para determinar o vencedor com base nas ações correspondentes da classe Action.

Conclusão

Parabéns! Você criou seu próprio jogo de pedra, papel, tesoura em Python. Através deste tutorial, você aprendeu a capturar entrada do usuário, randomizar as ações do computador e determinar um vencedor com base nas regras do jogo. Também exploramos como usar a classe Enum para tornar o código mais legível e como adicionar mais opções ao jogo.

Você pode continuar aprimorando seu jogo adicionando regras extras ou até mesmo criando uma interface gráfica para torná-lo mais interativo. Aproveite o processo de aprendizado e divirta-se jogando!