diff --git a/classes_base/Jogador.py b/classes_base/Jogador.py index ec198e4..7d29acc 100644 --- a/classes_base/Jogador.py +++ b/classes_base/Jogador.py @@ -3,6 +3,7 @@ #Escrito por: Luiz Felipe, Vítor Costa, Renato Bastos. import random +import os from classes_base.Cor import * from classes_base.Peca import * from classes_busca.Expectiminimax import * @@ -34,6 +35,8 @@ def __init__(self, ind=None, tipo=HUMANO): elif (self.tipo == self.MCTS): self.tipoStr = "MCTS" else: self.tipoStr = "RANDOM" + self.vezesQueComecou = 0 + def __str__(self): resp = "J" + str(self.__ind) + " ("+ self.tipoStr + ") -" resp += "\tMão: " @@ -144,6 +147,7 @@ def possibilidadesJogaveis(self, mesa): return possibilidades def probabilidadeJogada(self, peca, pos, mesa): + if (self.tipo == self.RANDOM): return 0 contagemMax = 7 contagem = 1 probMax = 1 @@ -272,63 +276,49 @@ def jogarExpectMM(self, mesa, oponente): def jogarMCTS(self, mesa, oponente): if self.__vezAtual == False: return else: - print("\n" + self.pecasJogaveis(mesa, self.__mao)) - print(self) - print("\n" + str(mesa)) - while (len(self.__maoJogaveis) == 0): - if (len(mesa.pegaPecasAComprar()) != 0): - self.adicionaPeca(mesa.comprarPeca()) - self.__maoJogaveis = [] - print("\n" + self.pecasJogaveis(mesa, self.__mao)) - print(self) - - else: - self.setaJogou(False) - self.setaVez(False) - oponente.setaVez(True) - print("J" + str(self.__ind) + " passou a vez.") - return - estadoAtual = EstadoMCTS(self, oponente, mesa) - noTeste = MonteCarloNo(estadoAtual) - noTeste.expandir() - if len(noTeste.filhos)>1: - for i in range(100): - melhorfilho=noTeste.melhorFilho() - noTeste.gerarJogo(melhorfilho,False) - #print("\nMelhor filho:" +str(noTeste.melhorFilho())) - #print("Gerou o jogo numero:"+ str(i)+"\n") - #print(noTeste) - #noTeste.melhorFilho() - #adicionou=True - #escolhida = int(input("Qual peça deseja jogar? ")) - #if (len(mesa.pegaTabuleiro()) != 0): pos = int(input("Em que posição?(0 p/ esquerda, 1 p/ direita) ")) - #else: pos = 0 - #peca = self.__mao.pop(escolhida - 1) - - melhorfilho=noTeste.melhorFilho() - print(str(melhorfilho.UCT)) - #print("Vitorias:"+str(melhorfilho.vitorias)+"Jogadas"+str(melhorfilho.visitas)) - self.removePeca(mesa,melhorfilho.estado.ultimaPecaJogada) - adicionou = mesa.adicionarNaMesa(melhorfilho.estado.ultimaPecaJogada, melhorfilho.estado.onde) - self.setaJogou(True) - self.__maoJogaveis = [] - melhorfilho.estado.ultimaPecaJogada.ordem(len(mesa.pegaTabuleiro())) - print("MCTS jogou a peça:"+ str(melhorfilho.estado.ultimaPecaJogada)+"na posição :"+ str(melhorfilho.estado.onde)+"\n" ) - self.setaVez(False) - oponente.setaVez(True) - return + adicionou = False + while not adicionou: + print("\n" + self.pecasJogaveis(mesa, self.__mao)) + print(self) + print("\n" + str(mesa)) + while (len(self.__maoJogaveis) == 0): + if (len(mesa.pegaPecasAComprar()) != 0): + self.adicionaPeca(mesa.comprarPeca()) + self.__maoJogaveis = [] + print("\n" + self.pecasJogaveis(mesa, self.__mao)) + print(self) + else: + self.setaJogou(False) + self.setaVez(False) + oponente.setaVez(True) + print("J" + str(self.__ind) + " passou a vez.") + return + estadoAtual = EstadoMCTS(self, oponente, mesa) + noTeste = MonteCarloNo(estadoAtual) + noTeste.expandir() + print(noTeste) + noTeste.melhorFilho() + escolhida = int(input("Qual peça deseja jogar? ")) + if (len(mesa.pegaTabuleiro()) != 0): pos = int(input("Em que posição?(0 p/ esquerda, 1 p/ direita) ")) + else: pos = 0 + peca = self.__mao.pop(escolhida - 1) + adicionou = mesa.adicionarNaMesa(peca, pos) + if (not adicionou): self.__mao.append(peca) + else: self.setaJogou(True) + self.__maoJogaveis = [] + peca.ordem(len(mesa.pegaTabuleiro())) + self.setaVez(False) + oponente.setaVez(True) + return # Define o método 'jogar' para um jogador 'random', usado para testes. def jogarRandom(self, mesa, oponente): - if self.__vezAtual == False: return + if (self.__vezAtual == False): return self.atualizaPecasJogaveis(mesa) # Caso não existam peças jogáveis em sua mão, executa a compra de peças enquanto for possível. - if (len(self.pegaPecasJogaveis()) == 0): self.compraDaMesa(mesa) - #print("\n" + str(mesa)) - #print("\n" + self.pecasJogaveis(mesa, self.__mao)) - #print(self) if (len(self.pegaPecasJogaveis()) == 0): - #mesa.fechada = True + if (len(self.__mao) != 0): self.compraDaMesa(mesa) + if (len(self.pegaPecasJogaveis()) == 0): self.setaJogou(False) #print("J" + str(self.__ind) + " passou a vez.") else: @@ -337,7 +327,7 @@ def jogarRandom(self, mesa, oponente): peca = possibilidades[escolhida][0] pos = possibilidades[escolhida][1] self.removePeca(mesa, peca) - adicionou = mesa.adicionarNaMesa(peca, pos) + mesa.adicionarNaMesa(peca, pos) self.setaJogou(True) peca.ordem(len(mesa.pegaTabuleiro())) self.setaVez(False) diff --git a/classes_base/Mesa.py b/classes_base/Mesa.py index a4cfb41..f8a6aac 100644 --- a/classes_base/Mesa.py +++ b/classes_base/Mesa.py @@ -55,6 +55,14 @@ def comecarJogo(self, jogador1, jogador2): jogador1.setaVez(True) if (maior1.somatorio() > maior2.somatorio()) else jogador2.setaVez(True) else: jogador1.setaVez(True) if ((somar1 == False) and (somar2 == True)) else jogador2.setaVez(True) + + #if (jogador1.ehSuaVez()): + # jogador1.vezesQueComecou += 1 + #elif (jogador2.ehSuaVez()): + # jogador2.vezesQueComecou += 1 + jogador1.setaJogou(True) + jogador2.setaJogou(True) + print("Maior peça de jog. 1: " + str(maior1) + "\tSomar? " + str(somar1)) print("Maior peça de jog. 2: " + str(maior2) + "\tSomar? " + str(somar2)) return