Last active
July 13, 2021 01:08
-
-
Save skatesham/abe4bbf546fdcb909a9e2b3133279d12 to your computer and use it in GitHub Desktop.
Yahtzee Game with Python 3 (command line)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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