Skip to content

Instantly share code, notes, and snippets.

@skatesham
Last active July 13, 2021 01:08
Show Gist options
  • Select an option

  • Save skatesham/abe4bbf546fdcb909a9e2b3133279d12 to your computer and use it in GitHub Desktop.

Select an option

Save skatesham/abe4bbf546fdcb909a9e2b3133279d12 to your computer and use it in GitHub Desktop.
Yahtzee Game with Python 3 (command line)
import random
# Para versão 2, auxilia na pontução
pontuacao = {
'G': 50,
'Q': 40,
'S+': 30,
'S-': 40,
'T': 20,
'A': "SOMA",
'F': 30,
'6': "SOMA 6",
'5': "SOMA 5",
'4': "SOMA 4",
'3': "SOMA 3",
'2': "SOMA 2",
'1': "SOMA 1"
}
class General():
def rodar_jogo(self):
print('Jogo General')
jogadores = self.selecionar_jogadores()
for i in range(13):
print("RODADA " + str(i + 1))
for jogador in jogadores:
print("Vez de " + jogador.nome)
self.iniciar_rodada(jogador)
print(jogador)
print("----------------------------------------------------------------------------")
for jogador in jogadores:
print(jogador)
def selecionar_jogadores(self):
quantidadeJogadores = int(input ('Quantos jogadores? '))
jogadores = list()
for valor in range(quantidadeJogadores):
nome = input('Nome do jogador ' + str(valor + 1) + "? ")
jogador = Jogador(nome)
jogadores.append(jogador)
return jogadores
def iniciar_rodada(self, jogador):
copo = Copo()
# RODADA 1
copo.rodar_dados(5)
# RODADA 2, 3
for i in range(2):
paraTirar = self.selecionar_para_tirar(copo.dados)
if(paraTirar == "P"):
return self.finalizar(jogador)
copo.rodar_novamente(paraTirar)
return self.finalizar(jogador)
def finalizar(self, jogador):
opcao = self.selecionar_opcao(jogador)
while(True):
pontos = input("Quantos pontos?")
if(pontos.isnumeric()):
return jogador.jogar(opcao, int(pontos))
def selecionar_para_tirar(self, dados):
while(True):
sucesso = True
paraTirar = input("Tirar ou Parar (ex: 1, 2, 3 ou P): ")
if(paraTirar.upper() == "P"):
return "P"
for valor in paraTirar.split(','):
valor = valor.strip()
if(not valor.isnumeric()):
sucesso = False
break
valor = int(valor)
if(valor not in dados):
sucesso = False
break
if(sucesso):
return paraTirar
def selecionar_opcao(self, jogador):
print("Disponível: " + str(jogador.opcoes))
while(True):
opcao = input("Aonde colocar?").upper().strip()
if(opcao in jogador.opcoes):
return opcao
class Copo():
def __init__(self):
self.dados = []
def rodar_dados(self, vezes):
for vez in range(vezes):
dado = self.__rodar_dado()
self.dados.append(dado)
print(self.dados)
def rodar_novamente(self, paraTirar):
quantidadeValores = self.__tirar_valores(paraTirar)
self.rodar_dados(quantidadeValores)
def __tirar_valores(self, paraTirar):
paraTirar = paraTirar.split(',')
for valor in paraTirar:
valor = valor.strip()
self.dados.remove(int(valor))
return len(paraTirar)
def __rodar_dado(self):
valor = random.randint(1,6)
return valor
class Jogador():
def __init__(self, nome):
self.nome = nome
self.total = 0
self.opcoes = ['G', 'Q','S+', 'S-', 'T', 'A', 'F', '6', '5', '4', '3', '2', '1']
def __str__(self):
return self.nome + ": " + str(self.total)
def jogar(self, opcao, pontos):
self.opcoes.remove(opcao)
self.total = self.total + pontos
general = General()
general.rodar_jogo()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment