def desistir(estado_jogo, nome1, nome2=" "): if (not mod.game_inprogress(estado_jogo)): print("Não existe jogo em curso.") elif (nome1 not in mod.jogadores_cadastrados(estado_jogo)) or ( nome2 != " " and nome2 not in mod.jogadores_cadastrados(estado_jogo)): print("Jogador não registado.") elif (nome1 not in mod.jogo_jogadores(estado_jogo)) or ( nome2 != " " and nome2 not in mod.jogo_jogadores(estado_jogo)): print("Jogador não participa do jogo em curso.") else: if (nome2 == " "): if (nome1 == estado_jogo["estado"]["jogador1"]): estado_jogo = terminar_jogo(estado_jogo, estado_jogo["estado"]["jogador2"], estado_jogo["estado"]["jogador1"]) else: estado_jogo = terminar_jogo(estado_jogo, estado_jogo["estado"]["jogador1"], estado_jogo["estado"]["jogador2"]) else: estado_jogo = terminar_jogo(estado_jogo, estado_jogo["estado"]["jogador1"], estado_jogo["estado"]["jogador2"], True) estado_jogo["estado"]["em_curso"] = False print("Desistência com sucesso. Jogo terminado.") return estado_jogo
def mostra_resultado(estado_jogo): if (mod.game_inprogress(estado_jogo)): tabuleiro = mod.obter_tabuleiro(estado_jogo) for linha in range(0, len(tabuleiro)): for coluna in range(0, len(tabuleiro[0])): print(linha + 1, coluna + 1, tabuleiro[linha][coluna], sep=" ") else: print("Não existe jogo em curso.")
def iniciar_jogo(estado_jogo, nome1, nome2, comprimento, altura, tamanho_sequencia, tamanho_pecas): if (mod.game_inprogress(estado_jogo)): print("Existe jogo em curso.") elif (nome1 not in mod.jogadores_cadastrados(estado_jogo)) or ( nome2 not in mod.jogadores_cadastrados(estado_jogo)): print("Jogador não registado.") elif (comprimento <= 0) or (altura <= 0) or (altura < (comprimento / 2)) or (altura > comprimento): print("Dimensões de grelha inválidas.") elif (tamanho_sequencia <= 0) or (tamanho_sequencia > comprimento): print("Tamanho de sequência inválido.") else: c_peca_invalida = 0 if (tamanho_pecas[0] == ""): tamanho_pecas[0] = 0 for peca in tamanho_pecas: if ((int(peca) < 0) or (int(peca) >= tamanho_sequencia)): c_peca_invalida += 1 if (c_peca_invalida > 0): print("Dimensões de peças especiais inválidas.") else: pecas_esp = dict( (i, tamanho_pecas.count(i)) for i in tamanho_pecas) estado_jogo["estado"]["em_curso"] = True estado_jogo["estado"]["comprimento"] = comprimento estado_jogo["estado"]["altura"] = altura estado_jogo["estado"]["tamanho_sequencia"] = tamanho_sequencia estado_jogo["estado"]["jogador1"] = nome1 estado_jogo["estado"]["jogador2"] = nome2 estado_jogo["estado"]["tabuleiro"] = [ ["Vazio" for _ in range(comprimento)] for _ in range(altura) ] dicionario = {"nome": nome1, "pecas_especiais": pecas_esp} estado_jogo["estado"]["tamanho_pecas_especiais"].append(dicionario) dicionario = {"nome": nome2, "pecas_especiais": pecas_esp.copy()} estado_jogo["estado"]["tamanho_pecas_especiais"].append(dicionario) estado_jogo["estado"]["tamanho_pecas_especiais"] = ordena_nome( estado_jogo["estado"]["tamanho_pecas_especiais"]) print( "Jogo iniciado entre", estado_jogo["estado"]["tamanho_pecas_especiais"][0]["nome"], "e", estado_jogo["estado"]["tamanho_pecas_especiais"][1]["nome"] + ".") return estado_jogo
def detalhes_jogo(estado_jogo): if (not mod.game_inprogress(estado_jogo)): print("Não existe jogo em curso.") else: print(str(estado_jogo["estado"]["comprimento"]), str(estado_jogo["estado"]["altura"])) for jogador in estado_jogo["estado"]["tamanho_pecas_especiais"]: print(jogador["nome"]) c_pecas = 0 for item in estado_jogo["estado"]["tamanho_pecas_especiais"]: while c_pecas < len(item["pecas_especiais"]): if (item["nome"] == jogador["nome"]): key = list(item["pecas_especiais"].keys())[c_pecas] value = list(item["pecas_especiais"].values())[c_pecas] print(f"{key} {value}") c_pecas += 1 c_pecas = 0
def coloca_peca(estado_jogo, nome, tamanho_peca, posicao, sentido="E"): tabuleiro = mod.obter_tabuleiro(estado_jogo) if (not mod.game_inprogress(estado_jogo)): print("Não existe jogo em curso.") elif (nome not in mod.jogo_jogadores(estado_jogo)): print("Jogador não participa no jogo em curso.") elif (not validar_pecas_especiais(estado_jogo, nome, tamanho_peca)): print("Tamanho de peça não disponível.") elif (not validar_posicao(estado_jogo, tamanho_peca, posicao, sentido)): print("Posição irregular.") else: if (tamanho_peca == 1): tabuleiro = insere_peca(tabuleiro, nome, tamanho_peca, posicao, posicao) elif (sentido == "E"): tabuleiro = insere_peca(tabuleiro, nome, tamanho_peca, (posicao - tamanho_peca) + 1, posicao) estado_jogo = retira_pecas_especiais(estado_jogo, nome, tamanho_peca) else: tabuleiro = insere_peca(tabuleiro, nome, tamanho_peca, posicao, (tamanho_peca + posicao) - 1) estado_jogo = retira_pecas_especiais(estado_jogo, nome, tamanho_peca) if (sequencia_vencedora(tabuleiro, nome, estado_jogo["estado"]["tamanho_sequencia"])): if (estado_jogo["estado"]["jogador1"] == nome): estado_jogo = terminar_jogo(estado_jogo, nome, estado_jogo["estado"]["jogador2"]) else: estado_jogo = terminar_jogo(estado_jogo, nome, estado_jogo["estado"]["jogador1"]) print("Sequência conseguida. Jogo terminado.") else: estado_jogo["tabuleiro"] = tabuleiro print("Peça colocada.") return estado_jogo