JoKenPô em Python de forma diferente...
Estava aplicando uma teste para o pessoal novo na área, que era fazer um joguinho basico de JoKenPô...
Em todos os casos, a solução final se resumiu a alguns if's... do tipo...
if pc.escolha == jg.escolha:
print('empatou!!!')
elif pc.escolha == 'PEDRA':
if jg.escolha == 'PAPEL':
print('Você ganhou!!')
else:
print('PC ganhou!!!')
elif pc.escolha == 'PAPEL':
...
Por ai vai, vcs devem ter entendido a idéia, houveram obviamente diferença de implementação, mas todos se resumem a esses if's.
O problema disso, é que o segundo passo do desafio era implentar o Pedra-Papel-Tesoura-Lagarto-Spock wikipedia que é basicamente uma expansão do JoKenPô. Ai vieram os problemas de entender as diferenças... entender quem ganha de quem, algo que o Sheldon Cooper explica... Youtube.
Mas após o entendimento, voltando para o código... atualizar os if's do texto ai vem a complicação... de estrutura do software!
Após toda essa histórinha... queria trazer resumidamente, minha sugestão de implementação, pois não achei, e eu pesquisei, uma forma fugindo de todos os if's.
from random import choice
from time import sleep
import os
import emoji
class Jokenpo():
# Chave: [nome, sobre_oq_ganha{chave: acao_para_ganhar}, emoji_para_ficar_fofinho]
jkp = {'j': ['pedra', {'p': 'quebra'}, ':oncoming_fist:'],
'k': ['papel', {'j': 'cobre'}, ':raised_back_of_hand:'],
'p': ['tesoura', {'k': 'corta'}, ':victory_hand:']
}
def jokenpo(self):
# Resumo da implementação
# O jg escolhe a chave do dict jkp - se por igual empata
if jg == pc:
print('Empatou!!!!!')
return (self.pontuacao)
# Verifica se a chave que o pc escolheu está dentro das chaves que o jg vence
elif pc in self.jkp[jg][1].keys():
print(self.jkp[jg][0].capitalize(), #Imprime o Nome do que o jogador jogou,
self.jkp[jg][1][pc].upper(), #Imprime o como o jogador vence o PC,
self.jkp[pc][0].capitalize() #Imprime o Nome do que o PC jogou
) # Saida possivel: Pedra quebra Tesoura
print('Você Ganhou!!!')
self.pontuacao += 1
return self.pontuacao
else:
# Caso o PC ganhe
print(self.jkp[pc][0].capitalize(),
self.jkp[pc][1][jg].upper(),
self.jkp[jg][0].capitalize()
)
print('Você Perdeu!!!')
self.pontuacao -= 1
return self.pontuacao
...
A grande diferença é que para inserir qualquer expansão é somente alterar o objeto jkp
como segue:
jkp = {'j': ['pedra', {'p': 'quebra', 'l': 'esmaga'}, ':oncoming_fist:'],
'k': ['papel', {'j': 'cobre', 's': 'refuta'}, ':raised_back_of_hand:'],
'p': ['tesoura', {'k': 'corta', 'l': 'decapita'}, ':victory_hand:'],
'l': ['lagarto', {'s': 'envenena', 'k': 'come'}, ':pinching_hand:'],
's': ['spock', {'j': 'destroi', 'p': 'quebra'}, ':vulcan_salute:']
}
Só adicionando dentro do dict quem ele ganhar! E todo o if posterior, continua o mesmo!
Resolvi trazer para cá, pois foi uma solução interresante, e pode ajudar a turma, principalmente quem tá começando!
Aceito todos os comentários sobre como melhorar isso!
Posteriormente, deixo o link para meu GitHub com a implementação completa.
Abs,