コード例 #1
0
ファイル: nodo.py プロジェクト: dizidoro/IA
    def visitar(self, nivel, alpha, beta, jogada):
        if nivel == Nodo.NIVEL_MAX or self.tabuleiro.verificarVitoria(jogada):
            return self.tabuleiro.utilidade(jogada)
        
        jogador = Jogador.HUMANO if jogada.jogador is Jogador.COMPUTADOR else Jogador.COMPUTADOR

        for i in [3,2,4,1,5,0,6]:
            # tabuleiro = copy.deepcopy(self.tabuleiro)
            tabuleiro = Tabuleiro(0,0,[list(linha) for linha in self.tabuleiro.celulas])
            linha = tabuleiro.inserirPeca(i, jogador)
            if linha is None:
                continue
            nodo = Nodo(tabuleiro)
            jogada = Jogada(linha, i, jogador)
            utilidade = nodo.visitar(nivel+1, alpha, beta, jogada)
            if jogador is Jogador.COMPUTADOR:
                if utilidade > alpha:
                    alpha = utilidade
            else:
                if utilidade < beta:
                    beta = utilidade

            if alpha >= beta:
                if jogador is Jogador.COMPUTADOR:
                    return alpha
                else:
                    return beta


        if jogador is Jogador.COMPUTADOR:
            return alpha
        else:
            return beta
コード例 #2
0
ファイル: nodo.py プロジェクト: dizidoro/IA
    def jogar(self):
        maior_utilidade = Nodo.MIN
        melhor_jogada = Jogada(0, 0, 1)
        nivel = 1
        # [0,1,2,3,4,5,6]
        # sort by next play utility
        # for i in range(7):
        #     tabuleiro = Tabuleiro(0, 0, [list(linha) for linha in self.tabuleiro.celulas])

        # if Nodo.N_JOGADAS is 8:
        #     Nodo.NIVEL_MAX = 11
        # elif Nodo.N_JOGADAS is 9:
        #     Nodo.NIVEL_MAX = 14
        # elif Nodo.N_JOGADAS >= 10:
        #     Nodo.NIVEL_MAX = 20
        Nodo.NIVEL_MAX = 9 + Nodo.tamanho_colunas.count(7) * 3

        for i in [3,2,4,1,5,0,6]:
            # tabuleiro = copy.deepcopy(self.tabuleiro)
            if Nodo.tamanho_colunas[i] is 7:
                continue

            tabuleiro = Tabuleiro(0,0,[list(linha) for linha in self.tabuleiro.celulas])
            linha = tabuleiro.inserirPeca(i, Jogador.COMPUTADOR)
            if linha is None:
                continue
            nodo = Nodo(tabuleiro)
            jogada = Jogada(linha, i, Jogador.COMPUTADOR)
            utilidade = nodo.visitar(nivel, Nodo.MIN, Nodo.MAX, jogada)
            if utilidade > maior_utilidade:
                melhor_jogada = jogada
                maior_utilidade = utilidade

        return melhor_jogada
コード例 #3
0
ファイル: jogo.py プロジェクト: dizidoro/IA
def main():
    numero_de_jogadas = 0

    tabuleiro = Tabuleiro(6, 7)

    jogador_atual = game_input.solicitarJogadorIniciante()
    jogo_nao_acabou = True
    print "\n", tabuleiro
    while jogo_nao_acabou:
        print "Vez do jogador", jogador_atual

        if jogador_atual is Jogador.COMPUTADOR:
            start = time.time()
            jogada = Nodo(copy.deepcopy(tabuleiro)).jogar();
            end = time.time()
            print "tempo: ", end - start
            tabuleiro.inserirPeca(jogada.coluna, jogador_atual)
        else:
            coluna = game_input.solicitarColuna()
            linha = tabuleiro.inserirPeca(coluna, jogador_atual)
            jogada = Jogada(linha, coluna, jogador_atual)
        
        numero_de_jogadas += 1
        jogada_vitoriosa = tabuleiro.verificarVitoria(jogada)

        Nodo.tamanho_colunas[jogada.coluna] +=1

        # print "linha: ",  str(jogada.linha + 1) 
        print "coluna: ", str(jogada.coluna + 1)

        print "\n", tabuleiro

        if jogada_vitoriosa:
            if jogador_atual is Jogador.COMPUTADOR:
                print "Perdeu playboy!!"
            else: 
                print "Voce ganhou, mas isso nao acaba aqui. Te pego na saida"
            jogo_nao_acabou = False
        else:
            if numero_de_jogadas is 42:
                print "Empate!"
                jogo_nao_acabou = False

        jogador_atual = Jogador.HUMANO if jogador_atual is Jogador.COMPUTADOR else Jogador.COMPUTADOR