コード例 #1
0
    def acoes(self, estado):
        """ supondo q estado já é uma tupla de valores """
        from acoes import AcaoJogador

        todas_acoes = []
        cima, baixo, esquerda, direita = "cima", "baixo", "esquerda", "direita"
        todas_acoes.extend([AcaoJogador.puxar(cima), AcaoJogador.puxar(baixo), AcaoJogador.puxar(esquerda), AcaoJogador.puxar(direita)])
        
        return todas_acoes
コード例 #2
0
ファイル: humano.py プロジェクト: SantosLimaLucas/AsteroidsIA
 def escolherProximaAcao(self):
     jogada = None
     while not jogada:
         for event in pygame.event.get():
             if event.type == pygame.KEYDOWN:
                 if event.key == pygame.K_LEFT:
                     return AcaoJogador.dirigirNave(
                         DirecaoMoverNave.MOVER_PARA_ESQUERDA)
                     jogada = "jogou"
                 if event.key == pygame.K_RIGHT:
                     return AcaoJogador.dirigirNave(
                         DirecaoMoverNave.MOVER_PARA_DIREITA)
                     jogada = "jogou"
                 if event.key == pygame.K_SPACE:
                     return AcaoJogador.dirigirNave(DirecaoMoverNave.ATIRAR)
                     jogada = "jogou"
コード例 #3
0
ファイル: busca_gulosa.py プロジェクト: guiulerme/ia
 def escolherProximaAcao(self):
   if not self.resolvido:
     self.caminho = self.buscaGulosa(self.borda, self.tabuleiro, self.percorridos, self.caminho)
   
   acao = AcaoJogador.mover(self.caminho[0][3][0], self.caminho[0][3][1])
   self.caminho.pop(0)
   return acao
コード例 #4
0
 def escolherProximaAcao(self):
     acao = self.no_solucao.pop(0)
     x, y, v = int(acao[0]), int(acao[1]), int(acao[2])
     print(
         f"\n A proxima acao sera em X: {x} Y: {y} colocando o valor {v} \n"
     )
     time.sleep(1)
     return AcaoJogador.adicionar_valor(x, y, v)
コード例 #5
0
 def escolherProximaAcao(self):
   #Verifica se o jogo ja foi resolvido
   if not self.resolvido:
     self.caminho = self.buscaBfs(self.borda, self.tabuleiro, self.percorridos, self.caminho)
   
   acao = AcaoJogador.mover(self.caminho[0][3][0], self.caminho[0][3][1])
   self.caminho.pop(0)
   return acao
コード例 #6
0
  def escolherProximaAcao(self):
    self.borda.insert(0, [self.tabuleiro, 0]) 
    
    altura = 0
    #Verifica se o jogo ja foi resolvido
    if self.resolvido is False:
      #Percorre todos estados da borda até encontrar o estado final
      while len(self.borda) > 0:
        #Verifica se a altura do estado aberto está dentro do padrão exigido
        if self.borda[0][1] <= int(self.profundidade):
          altura = self.borda[0][1] 
          estado_temp = self.borda.pop(0)[0]
        else: 
          self.borda.pop(0)
          altura = self.borda[0][1]
          estado_temp = self.borda.pop(0)[0]

        self.percorridos.append(estado_temp)
        if self.isFim(estado_temp) == True: 
          self.resolvido = True
          print('Resolvi o puzzle!')
          print('Tentativas: ', len(self.jogadas))
          
          self.tabuleiro.pop(3)
          #Após encontrar o resultado, encontra o caminho até o final desejado
          #  e os adiciona na variável caminho
          while self.caminho[0][:3] != self.tabuleiro:
            ult_percorrido = self.percorridos[-1]

            if self.isFim([ult_percorrido[0], ult_percorrido[1], ult_percorrido[2]]) == True:
              self.caminho.insert(0,ult_percorrido[3])
              
            else:
              for percorrido in self.percorridos:
                if percorrido[:3] == self.caminho[0][:3]:
                  if percorrido[:3] is not self.caminho: self.caminho.insert(0, percorrido[3])

            self.percorridos.pop(-1)
          break
        #Se não for o estado final, gera os estados filhos e os adiciona ao início borda
        else: 
          filhos = [
            self.gerarEstados(opcao, estado_temp, False) for opcao in self.validarOpcoes(estado_temp)
          ]

          for filho in filhos:
            ja_percorrido = False
            for percorrido in self.percorridos:
              if filho[:3] == percorrido[:3]: ja_percorrido = True
            if ja_percorrido == False: 
              self.borda.insert(0, [filho, altura])
              altura = altura + 1

    acao = AcaoJogador.mover(self.caminho[0][3][0], self.caminho[0][3][1])
    self.caminho.pop(0)
    return acao
コード例 #7
0
    def acoes(self, estado):
        """
        Por simplificação, estado já é uma tupla de valores, mas não é bonito.
        """
        from acoes import AcaoJogador

        #lista = []
        #aux = ""

        #return [ AcaoJogador.permutar(str(i))
        #    for i,_ in enumerate(estado)
        #        for j,_ in enumerate(estado) ]

        return [
            AcaoJogador.permutar('C'),
            AcaoJogador.permutar('B'),
            AcaoJogador.permutar('E'),
            AcaoJogador.permutar('D')
        ]
コード例 #8
0
ファイル: humano.py プロジェクト: RafaelCasaSanta/Projeto_IA
    def escolherProximaAcao(self):
        jogada = None
        while not jogada:
            jogada = input("Escreva a direção (d|e|c|b): ").strip()
            try:
                d = AgentePrepostoESHumano.parse_jogada(jogada)
            except ValueError:
                jogada = None
                print("Jogada entrada é inválida. Tente novamente.")

        return AcaoJogador.MOVER_JOGADOR(d)
コード例 #9
0
ファイル: humano.py プロジェクト: guiulerme/ia
    def escolherProximaAcao(self):
        jogada = None
        while not jogada:
            jogada = input(
                "\nDigite a direção que deseja mover (e,d,c,b): ").strip()
            try:
                direcao = AgentePrepostoESHumano.parse_jogada(jogada)
            except ValueError:
                jogada = None
                print("Jogada inválida.")

        return AcaoJogador.mover(direcao)
コード例 #10
0
ファイル: agentes.py プロジェクト: guiulerme/ia
    def escolherProximaAcao(self):
        if not self.sol:
            no_sol = busca_arvore(self.problema, self.tipo_agente)
            self.sol = no_sol.caminho_acoes()
            if not self.sol:
                raise Exception(
                    f'Agente {self.tipo_agente.value} não encontrou solução.')

        acao = self.sol.pop(0)
        print(f'\nPróxima ação é mover para "{acao.direcao}".')
        time.sleep(1)

        direcao = AgenteAut.traduzir_acao_jogo(acao)
        return AcaoJogador.mover(direcao)
コード例 #11
0
    def escolherProximaAcao(self):
        # Pede a proxima ação pro jogador
        from acoes import AcaoJogador

        valido = False
        while valido == False:
            direcao = input(
                "Puxar peça de qual direção (cima, baixo, esquerda, direita)? "
            )
            if ((direcao == "cima") or (direcao == "baixo")
                    or (direcao == "esquerda") or (direcao == "direita")):
                valido = True
                return AcaoJogador.puxar(direcao)
            else:
                print('Input inválido! Tente novamente.')
コード例 #12
0
    def escolherProximaAcao(self):
        time.sleep(1)
        temp_acao = self.jogadas.pop(0)
        jogadas = []
        if temp_acao == AcoesJogador.CIMA:
            jogadas.append(AcoesJogador.CIMA)
        elif temp_acao == AcoesJogador.ESQUERDA:
            jogadas.append(AcoesJogador.ESQUERDA)
        elif temp_acao == AcoesJogador.DIREITA:
            jogadas.append(AcoesJogador.DIREITA)
        elif temp_acao == AcoesJogador.BAIXO:
            jogadas.append(AcoesJogador.BAIXO)

        acao = AcaoJogador("BFS", jogadas)
        return acao
コード例 #13
0
    def escolherProximaAcao(self):
        if not self.solucao:
            no_solucao = busca_arvore_dfs(self.problema)
            print(f'1')
            self.solucao = no_solucao.caminho_acoes()
            print(f'2')
            print(len(self.solucao), self.solucao)
            if not self.solucao:
                raise Exception("Agente BFS não encontrou solução.")

        acao = self.solucao.pop(0)
        print(f'Próxima ação é {acao}.')
        time.sleep(2)

        p1, p2 = AgenteAutomaticoDfs.parse_jogada(acao)
        return AcaoJogador.SelecionarIndividuo(p1, p2)
コード例 #14
0
    def escolherProximaAcao(self):
        if not self.solucao:
            no_solucao = busca_arvore_bfs(self.problema, self.count)
            print(f'busca_arvore_bfs = {busca_arvore_bfs}')
            self.solucao = no_solucao.caminho_acoes()
            #print(f'jfsdnflksn 2')
            #print(f'alooooo kk{len(self.solucao), self.solucao}')
            if not self.solucao:
                raise Exception("Agente BFS não encontrou solução.")

        acao = self.solucao.pop(0)
        print(f'Próxima ação é {acao}.')
        time.sleep(2)

        p1, p2 = AgenteAutomaticoBfs.parse_jogada(acao)
        return AcaoJogador.SelecionarIndividuo(p1, p2)
コード例 #15
0
    def escolherProximaAcao(self):
        jogada = None
        while not jogada:
            jogada = input(
                'Escreva sua jogada no formato [Pessoa1,Pessoa2] ou [Pessoa1]\n'
            ).strip()
            if len(jogada) == 3:
                p1, p2 = AgentePrepostoESHumano.parse_jogada(jogada)
            elif len(jogada) < 3:
                p1 = AgentePrepostoESHumano.parse_jogada(jogada)
                p2 = 0
            else:
                jogada = None
                print('Jogada entrada é inválida. Tente novamente.')

        return AcaoJogador.SelecionarIndividuo(p1, p2)
コード例 #16
0
    def escolherProximaAcao(self, ind: int):

        posicao = np.where(self.tabuleiro == 4)
        coordenadas = list(zip(posicao[0], posicao[1]))

        self.solucao = busca_heuristica.fila_de_acoes(busca_heuristica,
                                                      coordenadas[0],
                                                      self.lista[ind])
        acao = self.solucao[0]
        direcoes = AgenteAStar.traduzir_acao_jogo(acao[0])

        print('Direção')
        print(direcoes)
        print('Custo')
        print(acao[1] + acao[2])
        print('  ')
        print('  ')
        return AcaoJogador.MOVER_JOGADOR(direcoes)
コード例 #17
0
 def escolherProximaAcao(self):
     jogadas = []
     turno = True
     while turno:
         tecla = input()
         if tecla == "8":
             jogadas.append(AcoesJogador.CIMA)
             turno = False
         elif tecla == "4":
             jogadas.append(AcoesJogador.ESQUERDA)
             turno = False
         elif tecla == "6":
             jogadas.append(AcoesJogador.DIREITA)
             turno = False
         elif tecla == "2":
             jogadas.append(AcoesJogador.BAIXO)
             turno = False
     acao = AcaoJogador("Humano", jogadas)
     return acao
コード例 #18
0
    def escolherProximaAcao(self,ind:int):

      if not self.solucao:
          no_solucao = busca_arvore_bfs(self.problema)
          self.solucao = no_solucao.caminho_acoes()
          print(len(self.solucao), self.solucao)
          if not self.solucao:
              raise Exception("Agente BFS não encontrou solução.")

          acao = self.solucao.pop(0)
          print(f"Próxima ação é {acao}.")
          time.sleep(2)

          direcoes= AgenteAutomaticoBfs.traduzir_acao_jogo(acao)

      if  self.solucao:
            acao = self.solucao[ind]
            direcoes=AgenteAutomaticoBfs.traduzir_acao_jogo(acao)
            
      return AcaoJogador.MOVER_JOGADOR(direcoes)
コード例 #19
0
 def escolherProximaAcao(self):
     print("digite a cordenada que deseja motificar")
     print("cordenada x")
     try:
         x = int(input())
         if (x > 8):
             print("comando invalido")
         else:
             print("cordenada y")
             y = int(input())
             if (y > 8):
                 print("comando invalido")
             else:
                 print("valor que deseja adicionar")
                 valor = int(input())
                 if (valor > 9):
                     print("valor invalido")
                 else:
                     return AcaoJogador.adicionar_valor(x, y, valor)
     except:
         print("Comando invalido")
コード例 #20
0
    def escolherProximaAcao(self, ind: int):

        if not self.solucao:
            no_solucao = fila_de_prioridades(self.problema)
            self.solucao = no_solucao.caminho_acoes
            "chamar a busca e o proxima ação estaria correto no gulosa ?"
            (busca_heuristica.escolherProximaAcao)
            print(len(self.solucao), self.solucao)
            if not self.solucao:
                raise Exception("Agente Guloso não encontrou solução.")

            acao = self.solucao.pop(0)
            print(f"Próxima ação é {acao}.")
            time.sleep(2)

            direcoes = AgenteBuscaGulosa.traduzir_acao_jogo(acao)

        if self.solucao:
            acao = self.solucao[ind]
            direcoes = AgenteBuscaGulosa.traduzir_acao_jogo(acao)

        return AcaoJogador.MOVER_JOGADOR(direcoes)
コード例 #21
0
 def escolherProximaAcao(self):
     from acoes import AcaoJogador
     i, j = (int(s) for s in input("Proxima troca (i,j)? ").split(',', 2))
     return AcaoJogador.permutar(i, j)
コード例 #22
0
def regras():
    from acoes import AcaoJogador
    global bateNum
    global fimJogo
    global valor
    global matriz
    global cordenadaLinha
    global cordenadaColuna
    global listaVlrCorreto
    global conflitoQuad
    global posicaoConflito
    global listaNaoPodeMudar
    bAux = False
    cordenadas = False
    while True:
        #cordenadaLinha  = input("Qual a cordenada de linha?  ")
        #if int(cordenadaLinha) in listaVlrCorreto:
        #    cordenadaColuna = input("Qual a cordenada de coluna?  ")
        #    if int(cordenadaColuna) in listaVlrCorreto:
        #        valor = input("Qual o valor que deseja colocar?  ")
        #
        #        if int(valor) in listaVlrCorreto:
        #            cordenadas = True
        #        else:
        #            print("Valor invalido!")
        #            cordenadas = False
        #    else:
        #        print("Cordenada da Coluna invalida.")
        #        cordenadas = False
        #else:
        #    print("Cordenada da Linha invalida")
        #    cordenadas = False
        acaoAtual = [AcaoJogador.inserir(matriz)]
        cordenadaLinha = acaoAtual[0][1][0]
        cordenadaColuna = acaoAtual[0][1][1]
        valor = acaoAtual[0][1][2]
        cordenadas = True

        print('teste -> ' + str(acaoAtual))
        #print('Lista que não pode mudar -> '+str(listaNaoPodeMudar))
        #print('linha -> '+str(cordenadaLinha))
        verificaConflito()
        verificaQuadrante()
        if not bConflito:
            #verificaConflito()
            if not bNaoPodeAlterar:
                #verificaQuadrante()
                matriz[int(cordenadaLinha) - 1][int(cordenadaColuna) -
                                                1] = valor

            aux = 0
            bAuxiliar = False

            while aux < len(posicaoConflito):
                if matriz[int(posicaoConflito[aux][0])][int(
                        posicaoConflito[aux][1])] != matriz[int(
                            posicaoConflito[aux + 1][0])][int(
                                posicaoConflito[aux + 1][1])]:
                    del (posicaoConflito[aux])
                    del (posicaoConflito[aux])
                    bAuxiliar = True

                if bAuxiliar:
                    aux = 0
                    bAuxiliar = False
                else:
                    aux = aux + 2

            if ((not bateNum) and (not conflitoQuad)):
                fimJogo = False

            for i in range(len(matriz)):
                for j in range(len(matriz[i])):
                    if matriz[i][j] == ' ':
                        fimJogo = False
                        break
                    else:
                        fimJogo = True
            if len(posicaoConflito) > 0:
                fimJogo = False

        desenhaQuadrado()
        conflitoQuad = False
        if fimJogo:
            break
    print('Parabéns, você ganhou o jogo!')
コード例 #23
0
 def escolherProximaAcao(self):
     from acoes import AcaoJogador
     escolhido = input("Proxima ação (C - cima, B - baixo, D - direita, E -esquerda)?  ")
     return AcaoJogador.permutar(escolhido)
コード例 #24
0
 def escolherProximaAcao(self):
     from acoes import AcaoJogador
     # try:
     i, j = (int(s) for s in input(
         "Qual peça deseja mover (linhas, coluna)? ").split(',', 2))
     return AcaoJogador.mover(i, j)