def __init__(self, gameTree=None): self.tabuleiro = Tabuleiro('Misere') self.nomeJogo = 'Misere' self.arvore = gameTree self.ultimaJogada = ( 0, 0 ) # Ultima jogada serve para checar se o jogo encerrou no método fimDeJogo
def ValidarJogada(l, c, cont): global trava try: l = int(l) c = int(c) except ValueError: os.system('cls') print() print( Fore.YELLOW + " Posição invalida, informe um número inteiro para as posições!" + Fore.RESET) Tabuleiro.tabuleiro() return FALSE cont = int(cont) if (l >= 0 and l <= 2) and (c >= 0 and c <= 2): if (Tabuleiro.tab[l][c] == " "): trava = FALSE return ValidarPeca(cont) else: return MovimentarPeca(l, c, cont) else: os.system('cls') print() print(Fore.YELLOW + " JOGADA INVÁLIDA, FAVOR REALIZAR UM MOVIMENTO VALIDO!" + Fore.RESET) Tabuleiro.tabuleiro() return FALSE
def jogo_do_galo(): print('Vamos jogar ao jogo do galo!') primeiro = input("Se pretender que o computador seja o primeiro a jogar\ introduza 'p': ") tab = Tabuleiro() if primeiro == 'p': PCplay = jogaGalo(tab) flag = True else: flag = False k = 0 while not tab.isFinished(): if k % 2 == 0: valor = 'X' else: valor = 'O' if (k % 2 == 0 and not flag) or (k%2 != 0 and flag): time.sleep(2) coord = askForPlay() while not (coord in tab.emptyPositions()): print('Jogada invalida.') coord = askForPlay() else: time.sleep(2) print('O computador joga: ') if (k == 0 and flag) or (k == 1 and not flag): coord = PCplay.nextPlay(None) else: coord = PCplay.nextPlay(coord) tab.setPosition(coord, valor) if k == 0 and not flag: PCplay = jogaGalo(tab) print(tab) k += 1 return None
def forcaBruta(n_linhas, n_colunas, n_bombas): vitorias = 0 derrotas = 0 jogos = 1 while vitorias == 0: print('Jogo', jogos) print('Placar') print('Vitorias', vitorias, "x", derrotas, 'Derrotas') tabuleiro = Tabuleiro.montarTabuleiroCompleto(qtdLinhasTabela, qtdColunasTabela, qtdBombas) Tabuleiro.imprimirTabuleiro(qtdLinhasTabela, tabuleiro) for reps in range((n_linhas * n_colunas) - n_bombas): lista = ManipulacaoTabuleiro.listarQuadradosInativos(n_linhas, n_colunas, tabuleiro) print(lista) numQuadradoSorteado = random.choice(lista) quadradoSorteado = ManipulacaoTabuleiro.encontrarQuadradoPeloNumero(numQuadradoSorteado, n_linhas, n_colunas, tabuleiro) print("Clique -", reps, "|Posição -", numQuadradoSorteado, "|Quadrado-", quadradoSorteado) status = ManipulacaoTabuleiro.click(quadradoSorteado[0], quadradoSorteado[1], tabuleiro, n_linhas, n_colunas) if status == 'interromper': print('Game Over') Tabuleiro.imprimirTabuleiro(qtdLinhasTabela, tabuleiro) derrotas = derrotas + 1 break if (reps + 1) == ((n_linhas * n_colunas) - n_bombas): vitorias = 1 jogos = jogos + 1 print('Vitorias', vitorias, "x", derrotas, 'Derrotas') Tabuleiro.imprimirTabuleiro(qtdLinhasTabela, tabuleiro)
def testeTabuleirosDiferentes(): if qtdLinhasTabela <= 9 and qtdColunasTabela <= 9 and qtdBombas <= 10: nivel = 'Iniciante' if qtdLinhasTabela <= 16 and qtdColunasTabela <= 16 and qtdBombas <= 40: nivel = 'Intermediario' if qtdLinhasTabela <= 30 and qtdColunasTabela <= 16 and qtdBombas <= 99: nivel = 'Avancado' tabuleiros1 = [] tabuleiros2 = [] tabuleiros3 = [] i = 0 while i < qtdTabuleiros: tabuleiros1.append(Tabuleiro.montarTabuleiroCompleto(qtdLinhasTabela, qtdColunasTabela, qtdBombas)) i = i + 1 i = 0 while i < qtdTabuleiros: tabuleiros2.append(Tabuleiro.montarTabuleiroCompleto(qtdLinhasTabela, qtdColunasTabela, qtdBombas)) i = i + 1 i = 0 while i < qtdTabuleiros: tabuleiros3.append(Tabuleiro.montarTabuleiroCompleto(qtdLinhasTabela, qtdColunasTabela, qtdBombas)) i = i + 1 resutadoForcaBruta = forcaBrutaLogTab(qtdLinhasTabela, qtdColunasTabela, qtdBombas, tabuleiros1) resultadoRegrasBasicasForcaBruta = rotinaRegrasBasicasLogTab(qtdLinhasTabela, qtdColunasTabela, qtdBombas, tabuleiros2) resultadoRegrasBasicasProbabilidade = rotinaRegrasBasicasProbabilidadeLogTab(qtdLinhasTabela, qtdColunasTabela, qtdBombas, tabuleiros3) infosGerais = 'Tabuleiro: ' + str(qtdLinhasTabela) + ' x ' + str(qtdColunasTabela) + '\nNumero de Bombas ' + str(qtdBombas) arquivo = open('LogResultados.txt', 'w', encoding="cp1252") arquivo.write(infosGerais) arquivo.write('\n\n') arquivo.write('Resultado Forca Bruta \n') arquivo.write(resutadoForcaBruta) arquivo.write('\n') arquivo.write('Resultado Regras Basicas + Forca Bruta \n') arquivo.write(resultadoRegrasBasicasForcaBruta) arquivo.write('\n') arquivo.write('Resultado Regras Basicas + Probabilidade nos clicks \n') arquivo.write(resultadoRegrasBasicasProbabilidade) arquivo.close()
def forcaBrutaLog(n_linhas, n_colunas, n_bombas): vitorias = 0 derrotas = 0 jogos = 1 mediaAcertos = 0.00 end_time = time.time() + tempoExecucao while time.time() < end_time: print('Jogo', jogos) print('Placar') print('Vitorias', vitorias, "x", derrotas, 'Derrotas') tabuleiro = Tabuleiro.montarTabuleiroCompleto(qtdLinhasTabela, qtdColunasTabela, qtdBombas) Tabuleiro.imprimirTabuleiro(qtdLinhasTabela, tabuleiro) for reps in range((n_linhas * n_colunas) - n_bombas): lista = ManipulacaoTabuleiro.listarQuadradosInativos(n_linhas, n_colunas, tabuleiro) print(lista) numQuadradoSorteado = random.choice(lista) quadradoSorteado = ManipulacaoTabuleiro.encontrarQuadradoPeloNumero(numQuadradoSorteado, n_linhas, n_colunas, tabuleiro) print("Clique -", reps, "|Posição -", numQuadradoSorteado, "|Quadrado-", quadradoSorteado) status = ManipulacaoTabuleiro.click(quadradoSorteado[0], quadradoSorteado[1], tabuleiro, n_linhas, n_colunas) if status == 'interromper': print('Game Over') Tabuleiro.imprimirTabuleiro(qtdLinhasTabela, tabuleiro) derrotas = derrotas + 1 mediaAcertos = mediaAcertos + (reps / ((n_linhas * n_colunas) - n_bombas)) break if (reps + 1) == ((n_linhas * n_colunas) - n_bombas): vitorias = 1 mediaAcertos = mediaAcertos + 1 jogos = jogos + 1 print('Vitorias', vitorias, "x", derrotas, 'Derrotas') Tabuleiro.imprimirTabuleiro(qtdLinhasTabela, tabuleiro) tempo = 'Tempo de Execucao: ' + str(tempoExecucao) + ' segundos\n' rodadas = 'Rodadas: ' + str((vitorias + derrotas)) + '\n' tempoMedioRodada = 'Tempo Medio por Rodada: ' + str( round(tempoExecucao / (vitorias + derrotas), 4)) + ' milisegundos\n' qtdVitorias = 'Quantidade de Vitorias: ' + str(vitorias) + '\n' qtdDerrotas = 'Quantidade de Derrotas: ' + str(derrotas) + '\n' acertosMedios = 'Media de Acertos por Rodadas:' + str( round((mediaAcertos / (vitorias + derrotas)) * 100, 2)) + '%\n' return tempo + rodadas + tempoMedioRodada + qtdVitorias + qtdDerrotas + acertosMedios
else: maxValue = -inf cell_text = '' for action in actions.keys(): next = tabuleiro.next(current, action) if next in tabuleiro.sucessors( current) and value[next[0], next[1]] > maxValue: maxValue = value[next[0], next[1]] cell_text = action cell_text = cell_text.center(9) print(cell_text, end='') if j < sz[1] - 1: print(',', end='') print(']\n') def print_values(value): for i in range(len(value)): for j in range(len(value[i])): print('{:8.2f}'.format(value[i][j]), end=' ') print('\n') print('--------------------------------------------------------------') if __name__ == '__main__': world = Tabuleiro(board) value = value_iteration(world) print('') print_values(value) print('') best_policy(world, value)
def ValidarPeca(cont): global PecaSelect global Peca1Blue global Peca2Blue global Peca3Blue global Peca1Red global Peca2Red global Peca3Red PecaSelect = input( ' Selecione qual o tamanho da peça da jogada (1 - 2 - 3): ') try: PecaSelect = int(PecaSelect) except ValueError: os.system('cls') print() print(Fore.YELLOW + " Peça invalida, favor refazer a jogada!" + Fore.RESET) Tabuleiro.tabuleiro() return FALSE if (PecaSelect > 0 and PecaSelect < 4): if (cont % 2 == 0): teste = QuantPecasBlue() if (teste == TRUE): return TRUE else: os.system('cls') print() print(Fore.YELLOW + " Peça Selecionada já acabou, favor refazer a jogada!" + Fore.RESET) Tabuleiro.tabuleiro() if (PecaSelect == 1): if (Peca1Blue > 0): Peca1Blue = Peca1Blue + 1 elif (PecaSelect == 2): if (Peca2Blue > 0): Peca2Blue = Peca2Blue + 1 else: if (Peca3Blue > 0): Peca3Blue = Peca3Blue + 1 return FALSE else: teste = QuantPecasRed() if (teste == TRUE): return TRUE else: os.system('cls') print() print(Fore.YELLOW + " Peça Selecionada já acabou, favor refazer a jogada!" + Fore.RESET) Tabuleiro.tabuleiro() if (PecaSelect == 1): if (Peca1Red > 0): Peca1Red = Peca1Red + 1 elif (PecaSelect == 2): if (Peca2Red > 0): Peca2Red = Peca2Red + 1 else: if (Peca3Red > 0): Peca3Red = Peca3Red + 1 return FALSE else: os.system('cls') print() print(Fore.YELLOW + " Peça invalida, favor refazer a jogada!" + Fore.RESET) Tabuleiro.tabuleiro() return FALSE
def MovimentarPeca(l, c, cont): i = int(cont) global trava global PecaSelect global Peca1Blue global Peca2Blue global Peca3Blue global Peca1Red global Peca2Red global Peca3Red if (i % 2 == 0): if ((Tabuleiro.tab[l][c] == Pecas.PecaRed0) or (Tabuleiro.tab[l][c] == Pecas.PecaRed1) or (Tabuleiro.tab[l][c] == Pecas.PecaRed2)): PecaSelect = input( ' Selecione qual o tamanho da peça da jogada (1 - 2 - 3): ') try: PecaSelect = int(PecaSelect) except ValueError: os.system('cls') print() print(Fore.YELLOW + " Peça invalida, favor refazer a jogada!" + Fore.RESET) Tabuleiro.tabuleiro() return FALSE if (PecaSelect > 0 and PecaSelect < 4): #teste de se ainda a peca selecionada esta disponivel para jogar teste = QuantPecasBlue() if (teste == TRUE): if (Tabuleiro.tab[l][c] == Pecas.PecaRed0): PecaAntiga = int(1) elif (Tabuleiro.tab[l][c] == Pecas.PecaRed1): PecaAntiga = int(2) else: PecaAntiga = int(3) if (PecaSelect > PecaAntiga): aux = Tabuleiro.tab[l][c] if (PecaSelect == 1): Tabuleiro.tab[l][c] = Pecas.PecaBlue0 elif (PecaSelect == 2): Tabuleiro.tab[l][c] = Pecas.PecaBlue1 else: Tabuleiro.tab[l][c] = Pecas.PecaBlue2 #passar a peca comida para o outro tabuleiro if (Tabuleiro.tab1[l][c] == " "): Tabuleiro.tab1[l][c] = aux else: Tabuleiro.tab2[l][c] = Tabuleiro.tab1[l][c] Tabuleiro.tab1[l][c] = aux return TRUE else: os.system('cls') print() print( Fore.YELLOW + "JOGADA INVÁLIDA, VOCÊ NÃO PODE COMER ESTA PEÇA!" + Fore.RESET) Tabuleiro.tabuleiro() if (PecaSelect == 1): Peca1Blue = Peca1Blue + 1 elif (PecaSelect == 2): Peca2Blue = Peca2Blue + 1 else: Peca3Blue = Peca3Blue + 1 return FALSE else: os.system('cls') print() print( Fore.YELLOW + " Peça Selecionada já acabou, favor refazer a jogada!" + Fore.RESET) Tabuleiro.tabuleiro() if (PecaSelect == 1): if (Peca1Blue > 0): Peca1Blue = Peca1Blue + 1 elif (PecaSelect == 2): if (Peca2Blue > 0): Peca2Blue = Peca2Blue + 1 else: if (Peca3Blue > 0): Peca3Blue = Peca3Blue + 1 return FALSE else: os.system('cls') print() print(Fore.YELLOW + " Peça invalida, favor refazer a jogada!" + Fore.RESET) Tabuleiro.tabuleiro() return FALSE else: if ((Tabuleiro.tab[l][c] == Pecas.PecaBlue0) or (Tabuleiro.tab[l][c] == Pecas.PecaBlue1) or (Tabuleiro.tab[l][c] == Pecas.PecaBlue2)): PecaSelect = input( ' Selecione qual o tamanho da peça da jogada (1 - 2 - 3): ') try: PecaSelect = int(PecaSelect) except ValueError: os.system('cls') print() print(Fore.YELLOW + " Peça invalida, favor refazer a jogada!" + Fore.RESET) Tabuleiro.tabuleiro() return FALSE if (PecaSelect > 0 and PecaSelect < 4): #teste de se ainda a peca selecionada esta disponivel para jogar teste = QuantPecasRed() if (teste == TRUE): if (Tabuleiro.tab[l][c] == Pecas.PecaBlue0): PecaAntiga = int(1) elif (Tabuleiro.tab[l][c] == Pecas.PecaBlue1): PecaAntiga = int(2) else: PecaAntiga = int(3) if (PecaSelect > PecaAntiga): aux = Tabuleiro.tab[l][c] if (PecaSelect == 1): Tabuleiro.tab[l][c] = Pecas.PecaRed0 elif (PecaSelect == 2): Tabuleiro.tab[l][c] = Pecas.PecaRed1 else: Tabuleiro.tab[l][c] = Pecas.PecaRed2 #passar a peca comida para o outro tabuleiro if (Tabuleiro.tab1[l][c] == " "): Tabuleiro.tab1[l][c] = aux else: Tabuleiro.tab2[l][c] = Tabuleiro.tab1[l][c] Tabuleiro.tab1[l][c] = aux return TRUE else: os.system('cls') print() print( Fore.YELLOW + " JOGADA INVÁLIDA, VOCÊ NÃO PODE COMER ESTA PEÇA!" + Fore.RESET) Tabuleiro.tabuleiro() if (PecaSelect == 1): Peca1Red = Peca1Red + 1 elif (PecaSelect == 2): Peca2Red = Peca2Red + 1 else: Peca3Red = Peca3Red + 1 return FALSE else: os.system('cls') print() print( Fore.YELLOW + " Peça Selecionada já acabou, favor refazer a jogada!" + Fore.RESET) Tabuleiro.tabuleiro() if (PecaSelect == 1): if (Peca1Red > 0): Peca1Red = Peca1Red + 1 elif (PecaSelect == 2): if (Peca2Red > 0): Peca2Red = Peca2Red + 1 else: if (Peca3Red > 0): Peca3Red = Peca3Red + 1 return FALSE l1 = input(' Informe a linha da nova posição da peça:') c1 = input(' Informe a coluna da nova posição da peça: ') try: l1 = int(l1) c1 = int(c1) except ValueError: os.system('cls') print() print( Fore.YELLOW + " Posição invalida, informe um número inteiro para as posições!" + Fore.RESET) Tabuleiro.tabuleiro() return FALSE if ((l1 >= 0 and l1 <= 2) and (c1 >= 0 and c1 <= 2)): if (Tabuleiro.tab[l1][c1] == " "): Tabuleiro.tab[l1][c1] = Tabuleiro.tab[l][c] if (Tabuleiro.tab1[l][c] != " "): Tabuleiro.tab[l][c] = Tabuleiro.tab1[l][c] if (Tabuleiro.tab2[l][c] != " "): Tabuleiro.tab1[l][c] = Tabuleiro.tab2[l][c] Tabuleiro.tab2[l][c] = " " else: Tabuleiro.tab1[l][c] = " " else: Tabuleiro.tab[l][c] = " " trava = TRUE return TRUE else: if ((Tabuleiro.tab[l][c] == Pecas.PecaBlue0) or (Tabuleiro.tab[l][c] == Pecas.PecaRed0)): PecaAntiga = 1 elif ((Tabuleiro.tab[l][c] == Pecas.PecaBlue1) or (Tabuleiro.tab[l][c] == Pecas.PecaRed1)): PecaAntiga = 2 else: PecaAntiga = 3 if ((Tabuleiro.tab[l1][c1] == Pecas.PecaBlue0) or (Tabuleiro.tab[l1][c1] == Pecas.PecaRed0)): PecaNova = 1 elif ((Tabuleiro.tab[l1][c1] == Pecas.PecaBlue1) or (Tabuleiro.tab[l1][c1] == Pecas.PecaRed1)): PecaNova = 2 else: PecaNova = 3 if (PecaNova < PecaAntiga): aux = Tabuleiro.tab[l1][c1] Tabuleiro.tab[l1][c1] = Tabuleiro.tab[l][c] #passar a peca comida para o outro tabuleiro if (Tabuleiro.tab1[l1][c1] == " "): Tabuleiro.tab1[l1][c1] = aux else: Tabuleiro.tab2[l1][c1] = Tabuleiro.tab1[l1][c1] Tabuleiro.tab1[l1][c1] = aux #passar a peca do outro tabuleiro para o principal if (Tabuleiro.tab1[l][c] != " "): Tabuleiro.tab[l][c] = Tabuleiro.tab1[l][c] if (Tabuleiro.tab2[l][c] != " "): Tabuleiro.tab1[l][c] = Tabuleiro.tab2[l][c] Tabuleiro.tab2 = " " else: Tabuleiro.tab1[l][c] = " " else: Tabuleiro.tab[l][c] = " " trava = TRUE return TRUE else: os.system('cls') print() print(Fore.YELLOW + " JOGADA INVÁLIDA, VOCÊ NÃO PODE COMER ESTA PEÇA!" + Fore.RESET) Tabuleiro.tabuleiro() return FALSE else: os.system('cls') print() print(Fore.YELLOW + " JOGADA INVÁLIDA, FAVOR REALIZAR UM MOVIMENTO VALIDO!" + Fore.RESET) Tabuleiro.tabuleiro() return FALSE
def rotinaRegrasBasicas(n_linhas, n_colunas, n_bombas): vitorias = 0 derrotas = 0 jogos = 1 while vitorias == 0: print('Jogo', jogos) print('Placar') print('Vitorias', vitorias, "x", derrotas, 'Derrotas') tabuleiro = Tabuleiro.montarTabuleiroCompleto(qtdLinhasTabela, qtdColunasTabela, qtdBombas) Tabuleiro.imprimirTabuleiro(qtdLinhasTabela, tabuleiro) resultado = "continuar" reps = 1 while resultado == "continuar" and reps !=0: resultado = simularClickAleatorio(n_linhas, n_colunas, tabuleiro) if resultado == "continuar": rule11 = Regra_1_1.verificarPosicoes(n_linhas, n_colunas, tabuleiro) if len(rule11) != 0: r = 0 while r <= len(rule11) - 1: ManipulacaoTabuleiro.click(rule11[r][0], rule11[r][1], tabuleiro, n_linhas, n_colunas) r = r + 1 rule12 = Regra_1_2.verificarPosicoes(n_linhas, n_colunas, tabuleiro) if len(rule12) != 0: r = 0 while r <= len(rule12)-1: ManipulacaoTabuleiro.click(rule12[r][0], rule12[r][1], tabuleiro, n_linhas, n_colunas) r = r + 1 rule121 = Regra_1_2_1.verificarPosicoes(n_linhas, n_colunas, tabuleiro) if len(rule121) != 0: r = 0 while r <= len(rule121) - 1: ManipulacaoTabuleiro.click(rule121[r][0], rule121[r][1], tabuleiro, n_linhas, n_colunas) r = r + 1 rule131 = Regra_1_3_1.verificarPosicoes(n_linhas, n_colunas, tabuleiro) if len(rule131) != 0: r = 0 while r <= len(rule131) - 1: ManipulacaoTabuleiro.click(rule131[r][0], rule131[r][1], tabuleiro, n_linhas, n_colunas) r = r + 1 rule1221 = Regra_1_2_2_1.verificarPosicoes(n_linhas, n_colunas, tabuleiro) if len(rule1221) != 0: r = 0 while r <= len(rule1221) - 1: ManipulacaoTabuleiro.click(rule1221[r][0], rule1221[r][1], tabuleiro, n_linhas, n_colunas) r = r + 1 reps = len(ManipulacaoTabuleiro.listarQuadradosInativos(n_linhas, n_colunas, tabuleiro)) if reps == 0: vitorias = vitorias + 1 else: derrotas = derrotas + 1 print('Jogo', jogos) print('Placar') print('Vitorias', vitorias, "x", derrotas, 'Derrotas') Tabuleiro.imprimirTabuleiro(qtdLinhasTabela, tabuleiro)
def rotinaRegrasBasicasProbabilidadeLogTab(n_linhas, n_colunas, n_bombas, tabuleiros3): tempoIni = time.time() vitorias = 0 derrotas = 0 jogos = 1 mediaAcertos = 0.00 # print(tabuleiros3) i = 0 while i < len(tabuleiros3): print('-------------------- INICIO DO JOGO --------------------') print('Jogo', jogos) print('Placar') print('Vitorias', vitorias, "x", derrotas, 'Derrotas') #print(i) tabuleiro = tabuleiros3[i] Tabuleiro.imprimirTabuleiro(qtdLinhasTabela, tabuleiro) resultado = "continuar" reps = 0 while resultado == "continuar" and reps != qtdBombas: if reps == 1: resultado = simularClickAleatorio(n_linhas, n_colunas, tabuleiro) Tabuleiro.imprimirTabuleiro(qtdLinhasTabela, tabuleiro) else: probabilidades = RegraProbabilidade.listarQuadradosProbabilidade(n_linhas, n_colunas, n_bombas, tabuleiro) resultado = RegraProbabilidade.simularClickProbabilistico(n_linhas, n_colunas, tabuleiro, probabilidades) Tabuleiro.imprimirTabuleiro(qtdLinhasTabela, tabuleiro) if resultado == "continuar": parada = True while parada: rule11 = Regra_1_1.verificarPosicoes(n_linhas, n_colunas, tabuleiro) if len(rule11) != 0: r = 0 while r <= len(rule11) - 1: ManipulacaoTabuleiro.click(rule11[r][0], rule11[r][1], tabuleiro, n_linhas, n_colunas) Tabuleiro.imprimirTabuleiro(qtdLinhasTabela, tabuleiro) r = r + 1 rule12 = Regra_1_2.verificarPosicoes(n_linhas, n_colunas, tabuleiro) if len(rule12) != 0: r = 0 while r <= len(rule12)-1: ManipulacaoTabuleiro.click(rule12[r][0], rule12[r][1], tabuleiro, n_linhas, n_colunas) Tabuleiro.imprimirTabuleiro(qtdLinhasTabela, tabuleiro) r = r + 1 rule121 = Regra_1_2_1.verificarPosicoes(n_linhas, n_colunas, tabuleiro) if len(rule121) != 0: r = 0 while r <= len(rule121) - 1: ManipulacaoTabuleiro.click(rule121[r][0], rule121[r][1], tabuleiro, n_linhas, n_colunas) Tabuleiro.imprimirTabuleiro(qtdLinhasTabela, tabuleiro) r = r + 1 rule131 = Regra_1_3_1.verificarPosicoes(n_linhas, n_colunas, tabuleiro) if len(rule131) != 0: r = 0 while r <= len(rule131) - 1: ManipulacaoTabuleiro.click(rule131[r][0], rule131[r][1], tabuleiro, n_linhas, n_colunas) Tabuleiro.imprimirTabuleiro(qtdLinhasTabela, tabuleiro) r = r + 1 rule1221 = Regra_1_2_2_1.verificarPosicoes(n_linhas, n_colunas, tabuleiro) if len(rule1221) != 0: r = 0 while r <= len(rule1221) - 1: ManipulacaoTabuleiro.click(rule1221[r][0], rule1221[r][1], tabuleiro, n_linhas, n_colunas) Tabuleiro.imprimirTabuleiro(qtdLinhasTabela, tabuleiro) r = r + 1 rule14Combo = Regra_1_4_Combo.verificarPosicoes(n_linhas, n_colunas, tabuleiro) if len(rule14Combo) != 0: r = 0 while r <= len(rule14Combo) - 1: ManipulacaoTabuleiro.click(rule14Combo[r][0], rule14Combo[r][1], tabuleiro, n_linhas, n_colunas) Tabuleiro.imprimirTabuleiro(qtdLinhasTabela, tabuleiro) r = r + 1 rule25Combo = Regra_2_5_Combo.verificarPosicoes(n_linhas, n_colunas, tabuleiro) if len(rule25Combo) != 0: r = 0 while r <= len(rule25Combo) - 1: ManipulacaoTabuleiro.click(rule25Combo[r][0], rule25Combo[r][1], tabuleiro, n_linhas, n_colunas) Tabuleiro.imprimirTabuleiro(qtdLinhasTabela, tabuleiro) r = r + 1 rule36Combo = Regra_3_6_Combo.verificarPosicoes(n_linhas, n_colunas, tabuleiro) if len(rule36Combo) != 0: r = 0 while r <= len(rule36Combo) - 1: ManipulacaoTabuleiro.click(rule36Combo[r][0], rule36Combo[r][1], tabuleiro, n_linhas, n_colunas) Tabuleiro.imprimirTabuleiro(qtdLinhasTabela, tabuleiro) r = r + 1 rule121Combo = Regra_1_2_1_Combo.verificarPosicoes(n_linhas, n_colunas, tabuleiro) if len(rule121Combo) != 0: r = 0 while r <= len(rule121Combo) - 1: ManipulacaoTabuleiro.click(rule121Combo[r][0], rule121Combo[r][1], tabuleiro, n_linhas, n_colunas) Tabuleiro.imprimirTabuleiro(qtdLinhasTabela, tabuleiro) r = r + 1 rule132Combo = Regra_1_3_2_Combo.verificarPosicoes(n_linhas, n_colunas, tabuleiro) if len(rule132Combo) != 0: r = 0 while r <= len(rule132Combo) - 1: ManipulacaoTabuleiro.click(rule132Combo[r][0], rule132Combo[r][1], tabuleiro, n_linhas, n_colunas) Tabuleiro.imprimirTabuleiro(qtdLinhasTabela, tabuleiro) r = r + 1 if len(rule11) == 0 and len(rule12) == 0 and len(rule131) == 0 and len(rule121) == 0 and len( rule1221) == 0 and len(rule14Combo) == 0 and len(rule25Combo) == 0 and len(rule36Combo) == 0 and len(rule121Combo) == 0 and len(rule132Combo) == 0: parada = False reps = len(ManipulacaoTabuleiro.listarQuadradosInativos(n_linhas, n_colunas, tabuleiro)) bombasMacardas = ManipulacaoTabuleiro.contarBombasMarcadas(n_linhas, n_colunas, tabuleiro) if reps == qtdBombas or bombasMacardas == qtdBombas: vitorias = vitorias + 1 mediaAcertos = mediaAcertos + 1 break else: derrotas = derrotas + 1 mediaAcertos = mediaAcertos + (((n_linhas * n_colunas) -reps) / ((n_linhas * n_colunas))) Tabuleiro.imprimirTabuleiro(qtdLinhasTabela, tabuleiro) jogos = jogos + 1 i = i + 1 print('-------------------- FIM DO JOGO --------------------') tempoFim = time.time() print('-------------------- RESUMO DOS JOGOS --------------------') print('Jogos:', jogos-1) print('Placar') print('Vitorias', vitorias, "x", derrotas, 'Derrotas') tempo = 'Tempo de Execucao: ' + str(round(tempoFim-tempoIni, 4)) + ' segundos\n' rodadas = 'Rodadas: ' + str((vitorias+derrotas)) + '\n' tempoMedioRodada = 'Tempo Medio por Rodada: ' + str(round((tempoFim-tempoIni)/(vitorias+derrotas), 4)) + ' milisegundos\n' qtdVitorias = 'Quantidade de Vitorias: ' + str(vitorias) + '\n' qtdDerrotas = 'Quantidade de Derrotas: ' + str(derrotas) + '\n' acertosMedios = 'Media de Acertos por Rodadas:' + str(round((mediaAcertos/(vitorias+derrotas)) * 100, 2)) + '%\n' return tempo+rodadas+tempoMedioRodada+qtdVitorias+qtdDerrotas+acertosMedios
def rotinaRegrasBasicasProbabilidadeLog(n_linhas, n_colunas, n_bombas): vitorias = 0 derrotas = 0 jogos = 1 mediaAcertos = 0.00 end_time = time.time() + tempoExecucao while time.time() < end_time: print('Jogo', jogos) print('Placar') print('Vitorias', vitorias, "x", derrotas, 'Derrotas') tabuleiro = Tabuleiro.montarTabuleiroCompleto(qtdLinhasTabela, qtdColunasTabela, qtdBombas) Tabuleiro.imprimirTabuleiro(qtdLinhasTabela, tabuleiro) resultado = simularClickAleatorio(5, 5, tabuleiro) reps = 1 while resultado == "continuar" and reps !=0: probabilidades = RegraProbabilidade.listarQuadradosProbabilidade(n_linhas, n_colunas, n_bombas, tabuleiro) resultado = RegraProbabilidade.simularClickProbabilistico(n_linhas, n_colunas, tabuleiro, probabilidades) if resultado == "continuar": parada = True while parada: rule11 = Regra_1_1.verificarPosicoes(n_linhas, n_colunas, tabuleiro) if len(rule11) != 0: r = 0 while r <= len(rule11) - 1: ManipulacaoTabuleiro.click(rule11[r][0], rule11[r][1], tabuleiro, n_linhas, n_colunas) r = r + 1 rule12 = Regra_1_2.verificarPosicoes(n_linhas, n_colunas, tabuleiro) if len(rule12) != 0: r = 0 while r <= len(rule12)-1: ManipulacaoTabuleiro.click(rule12[r][0], rule12[r][1], tabuleiro, n_linhas, n_colunas) r = r + 1 rule121 = Regra_1_2_1.verificarPosicoes(n_linhas, n_colunas, tabuleiro) if len(rule121) != 0: r = 0 while r <= len(rule121) - 1: ManipulacaoTabuleiro.click(rule121[r][0], rule121[r][1], tabuleiro, n_linhas, n_colunas) r = r + 1 rule131 = Regra_1_3_1.verificarPosicoes(n_linhas, n_colunas, tabuleiro) if len(rule131) != 0: r = 0 while r <= len(rule131) - 1: ManipulacaoTabuleiro.click(rule131[r][0], rule131[r][1], tabuleiro, n_linhas, n_colunas) r = r + 1 rule1221 = Regra_1_2_2_1.verificarPosicoes(n_linhas, n_colunas, tabuleiro) if len(rule1221) != 0: r = 0 while r <= len(rule1221) - 1: ManipulacaoTabuleiro.click(rule1221[r][0], rule1221[r][1], tabuleiro, n_linhas, n_colunas) r = r + 1 if len(rule11) == 0 and len(rule12) == 0 and len(rule131) == 0 and len(rule121) == 0 and len( rule1221) == 0: parada = False reps = len(ManipulacaoTabuleiro.listarQuadradosInativos(n_linhas, n_colunas, tabuleiro)) if reps == 0: vitorias = vitorias + 1 mediaAcertos = mediaAcertos + 1 else: derrotas = derrotas + 1 mediaAcertos = mediaAcertos + (((n_linhas * n_colunas) - n_bombas-reps) / ((n_linhas * n_colunas) - n_bombas)) print('Jogo', jogos) print('Placar') print('Vitorias', vitorias, "x", derrotas, 'Derrotas') Tabuleiro.imprimirTabuleiro(qtdLinhasTabela, tabuleiro) tempo = 'Tempo de Execucao: ' + str(tempoExecucao) + ' segundos\n' rodadas = 'Rodadas: ' + str((vitorias+derrotas)) + '\n' tempoMedioRodada = 'Tempo Medio por Rodada: ' + str(round(tempoExecucao/(vitorias+derrotas), 4)) + ' milisegundos\n' qtdVitorias = 'Quantidade de Vitorias: ' + str(vitorias) + '\n' qtdDerrotas = 'Quantidade de Derrotas: ' + str(derrotas) + '\n' acertosMedios = 'Media de Acertos por Rodadas:' + str(round((mediaAcertos/(vitorias+derrotas)) * 100, 2)) + '%\n' return tempo+rodadas+tempoMedioRodada+qtdVitorias+qtdDerrotas+acertosMedios
class Misere: def __init__(self, gameTree=None): self.tabuleiro = Tabuleiro('Misere') self.nomeJogo = 'Misere' self.arvore = gameTree self.ultimaJogada = ( 0, 0 ) # Ultima jogada serve para checar se o jogo encerrou no método fimDeJogo def __str__(self): string = '' tabuleiro = self.tabuleiro.criarTabuleiro() for linha in tabuleiro: i = 0 for elemento in linha: if elemento == '': elemento = ' ' if i < 2: string += elemento + '|' else: string += elemento i += 1 string += '\n' return string def tutorial(self): '''Mostra o tutorial do jogo Misere''' print('\n\n' + ' ' * 20 + ' Tutorial Miserè ') print( "\nOlá, para realizar suas jogadas siga a regra abaixo: \n\nVocê deve inserir um número referente a uma das posições disponíveis que serão apresentadas. \nAs posições vão de 1 a 9, que representam em ordem as posições do tabuleiro" ) print('\nExemplos: \n\nEntrada: 1') self.tabuleiro.tabuleiro = '100000000' print(self) print('Entrada: 5') self.tabuleiro.tabuleiro = '000010000' print(self) print('Entrada: 8') self.tabuleiro.tabuleiro = '000000010' print(self) self.tabuleiro.tabuleiro = '000000000' def posicoesDisponiveis(self): '''Retorna uma lista com as posições disponíveis para jogar no formato de input para o usuário''' jogadas = self.jogadasValidas() posicoes = [] for jogada in jogadas: if jogada[0] == 0: posicoes.append(str(jogada[1] + 1)) elif jogada[0] == 1: posicoes.append(str(jogada[1] + 4)) elif jogada[0] == 2: posicoes.append(str(jogada[1] + 7)) return posicoes def jogadasValidas(self, blackList=[]): '''Retorna todas as jogadas válidas possíveis no formato (linha,coluna) excluindo as que estão no parâmetro blackList''' tabuleiro = self.tabuleiro.criarTabuleiro() jogadas = [] indiceL = 0 for linha in tabuleiro: indiceC = 0 for coluna in linha: if coluna == '': if (indiceL, indiceC) not in blackList: jogadas.append((indiceL, indiceC)) indiceC += 1 indiceL += 1 return jogadas def jogar(self, jogada, simbolo='X'): """Faz a jogada e adiciona no grafo a aresta correspondente a esta jogada, somente se ainda não existir ligação entre elas""" linha = jogada[0] coluna = jogada[1] anterior = self.tabuleiro.tabuleiro i = linha * 3 + coluna self.ultimaJogada = (int(linha), int(coluna)) self.tabuleiro.tabuleiro = self.tabuleiro.alterarTabuleiro(i, simbolo) if not self.arvore.existeLigacao(anterior, self.tabuleiro.tabuleiro): self.arvore.add(anterior, self.tabuleiro.tabuleiro, 0) def jogarAleatorio(self, blackList=[]): """Joga aleatoriamente, porém exclui as jogadas contidas na blacklist""" jogadas = self.jogadasValidas(blackList) pos = random.randint(0, len(jogadas) - 1) self.jogar(jogadas[pos]) def fimDeJogo(self): '''Checa se a a partida encerrou com a ultima jogada. Este é um método mais eficiente do que o tabuleiroFinalizado()''' tabuleiro = self.tabuleiro.criarTabuleiro() linha = self.ultimaJogada[0] coluna = self.ultimaJogada[1] if tabuleiro[linha][0] == 'X' and tabuleiro[linha][ 1] == 'X' and tabuleiro[linha][2] == 'X': return True if tabuleiro[0][coluna] == 'X' and tabuleiro[1][ coluna] == 'X' and tabuleiro[2][coluna] == 'X': return True if (tabuleiro[0][0] == 'X' and tabuleiro[1][1] == 'X' and tabuleiro[2][2] == 'X') or (tabuleiro[2][0] == 'X' and tabuleiro[1][1] == 'X' and tabuleiro[0][2] == 'X'): return True return False def tabuleiroFinalizado(self): """Checa se a partida encerrou em qualquer posicao do tabuleiro""" tabuleiro = self.tabuleiro.criarTabuleiro() for l in range(3): if tabuleiro[l][0] == 'X' and tabuleiro[l][1] == 'X' and tabuleiro[ l][2] == 'X': return True for c in range(3): if tabuleiro[0][c] == 'X' and tabuleiro[1][c] == 'X' and tabuleiro[ 2][c] == 'X': return True if (tabuleiro[0][0] == 'X' and tabuleiro[1][1] == 'X' and tabuleiro[2][2] == 'X') or (tabuleiro[2][0] == 'X' and tabuleiro[1][1] == 'X' and tabuleiro[0][2] == 'X'): return True return False def buscarPosicao(self, proximo, anterior): '''Recebe dois estados do tabuleiro, retorna a linha e a coluna que difere estes tabuleiros, ou seja, a jogada seguinte''' i = 0 while i < 9: if proximo[i] != anterior[i]: iLinha = i linha = 0 while iLinha > 2: linha += 1 iLinha -= 3 coluna = iLinha return (linha, coluna) i += 1 return None
def __init__(self): self.tabule = tabule.Tabuleiro() # Tabuleiro self.ia = ia.IA(self.tabule) # IA para executar o MiniMax self.iniciarJogo()
#solicita o nome de um jogador player2 = input(" Informe o nome do Jogador 2: ") print("-=" *34) os.system('cls') #altera as cores dos nomes dos jogadores player2 = (Fore.RED + f'{player2}' + Fore.RESET) player1 = (Fore.BLUE + f'{player1}' + Fore.RESET) VitoriaP1 = int(0) VitoriaP2 = int(0) cont = int(0) jogo = FALSE Tabuleiro.tabuleiro() while( jogo == FALSE): Jogada.jogada(cont, player1, player2) os.system('cls') cont = cont + 1 jogo = FimJogo.ValidarJogo(cont, player1, player2) Tabuleiro.tabuleiro() if(jogo == TRUE): print() reset = input(" Deseja jogar novamente (S/N): ") if((reset == "S") or (reset == "s")): if(cont % 2 == 0): VitoriaP2 = VitoriaP2 + 1 else: VitoriaP1 = VitoriaP1 + 1
def jogar(self): # Inicializa pygames pygame.init() # Largura e altura da tela WINDOW_SIZE = [725, 725] screen = pygame.display.set_mode(WINDOW_SIZE) # Titulo pygame.display.set_caption("Don't be a drag, just be a queen") # Loop ate o usuario fechar a aplicacao done = False # gerencia os cliques do mouse clock = pygame.time.Clock() # -------- Recebe os movimentos do usuario ----------- while not done: for event in pygame.event.get(): # Usuario faz algo if event.type == pygame.QUIT: # Se clicar em fechar done = True # marca como terminado e acaba o loop elif event.type == pygame.MOUSEBUTTONDOWN: # Usuario clica no mouse. Pega posicao pos = pygame.mouse.get_pos() #Converte coordenadas x,y para coordenadas da tela column = pos[0] // (Casa.getLargura()) row = pos[1] // (Casa.getAltura()) print("Click ", pos, "Grid coordinates: ", row, column) # background screen.fill(self.BLACK) print(self.tabuleiro.getRows()) # Desenha os quadrinhos for row in range(self.tabuleiro.getRows()): for column in range(Tabuleiro.getColumns()): #Seta a cor das pecas if (row + column) % 2 == 0: self.tabuleiro.Tabuleiro.getGrid()[row][column].Casa.getPeca().setCor(self.WHITE) else: self.tabuleiro.Tabuleiro.getGrid()[row][column].Casa.getPeca().setCor(self.BLACK) #desenha as pecas pygame.draw.rect(screen, self.tabuleiro.Tabuleiro.getGrid()[row][column].Casa.getPeca().getCor(), [Casa.getLargura() * column, Casa.getAltura() * row, Casa.getLargura(), Casa.getAltura()]) #Preenche com pecas os quadros if self.tabuleiro.getGrid()[row][column].Casa.getPeca().getCor() == self.WHITE and (row < 3): #cada quadro tem 90px, entao pegamos a coordenada (x,y) e multiplicamos pelo valor do lado do quadrado # para obtermos a posicao que a peca deve ficar screen.blit(self.PecaPreta, (Casa.getLargura() * column+3, Casa.getAltura() * row+3)) #Esse +3 eh apenas pra peca nao ficar colada com o canto do quadrado #serve de margem #marca a casa como ocupada self.tabuleiro.getGrid()[row][column].Casa.getPeca().setOcupado() #Preenche com pecas os quadros if self.tabuleiro.getGrid()[row][column].Casa.getPeca().getCor() == self.WHITE and (row > 4): #cada quadro tem 90px, entao pegamos a coordenada (x,y) e multiplicamos pelo valor do lado do quadrado # para obtermos a posicao que a peca deve ficar screen.blit(self.PecaBranca, (Casa.getLargura() * column+3, Casa.getAltura() * row+3)) #Esse +3 eh apenas pra peca nao ficar colada com o canto do quadrado #serve de margem #marca a casa como ocupada self.tabuleiro.getGrid()[row][column].Casa.getPeca().setOcupado() # Limite de 60 frames por segundo clock.tick(60) # update na tela com o que desenhamos pygame.display.flip() #finaliza o py games pygame.quit()