Exemple #1
0
        private NoDeMemoria EscolherNoDaProximaJogada(JogoDaVelha jogo)
        {
            NoDeMemoria retorno = null;

            int posicao = ObterPosicaoDeJogadaDeAtaqueObvio(jogo);

            if (posicao == 0)
            {
                posicao = ObterPosicaoDeJogadaDeDefesaObvia(jogo);
            }

            if (posicao == 0)
            {
                retorno = ObterNoFilhoPorMelhorEscolhaMemorizada(NoDaUltimaJogada);
            }

            if (posicao == 0 && retorno == null)
            {
                posicao = ObterPrimeiraPosicaoDeJogadaPossivel(jogo);
            }

            retorno = retorno ?? NoDaUltimaJogada.CarregarNoFilhoDaPosicao(posicao);

            return(retorno);
        }
Exemple #2
0
        public override void Jogar(JogoDaVelha jogoDaVelha)
        {
            int posicaoDoAdversario = 0;

            if (!EhPrimeiraRodada(jogoDaVelha))
            {
                posicaoDoAdversario = ObterPosicaoDaJogadaAdversaria(jogoDaVelha.Casas);
                NoDaUltimaJogada    = NoDaUltimaJogada.CarregarNoFilhoDaPosicao((Int32)posicaoDoAdversario);
            }

            NoDaUltimaJogada = EscolherNoDaProximaJogada(jogoDaVelha);

            ValidacaoDaJogada validacao;

            AtualizarCasasDaUltimaJogadaPelasCasasAtuais(CasasDaUltimaJogada, jogoDaVelha.Casas, posicaoDoAdversario);

            jogoDaVelha.Jogar(NoDaUltimaJogada.Posicao, out validacao);
        }
Exemple #3
0
        private void RepesarMemoriaDeLongoPrazo(JogoDaVelha jogoDaVelha)
        {
            if (jogoDaVelha.ObterVencedor() != Marca.Vazio)
            {
                NoDeMemoria no = NoDaUltimaJogada.NoPai;

                while (no.NoPai != null)
                {
                    Int32 pesoDeMelhorEscolha = jogoDaVelha.Casas[no.Posicao] == jogoDaVelha.ObterVencedor() ? ((Int32)(1)) : ((Int32)(-1));

                    if ((pesoDeMelhorEscolha > 0 && no.PesoDeMelhorEscolha < 10) || (pesoDeMelhorEscolha < 0 && no.PesoDeMelhorEscolha > 0))
                    {
                        no.PesoDeMelhorEscolha += pesoDeMelhorEscolha;
                    }

                    no = no.NoPai;
                }
            }
        }
Exemple #4
0
 private void ZerarMemoriaDeTrabalho(int escala)
 {
     MontarCasasDaUltimaJogadaZerada(escala);
     NoDaUltimaJogada = ArvoreDeAprendizado.NoRaiz;
 }
Exemple #5
0
 public JogadorIA(int escala)
 {
     ArvoreDeAprendizado = new ArvoreDeAprendizado(escala);
     NoDaUltimaJogada    = ArvoreDeAprendizado.NoRaiz;
     ZerarMemoriaDeTrabalho(escala);
 }
Exemple #6
0
 private NoDeMemoria ObterNoFilhoPorMelhorEscolhaMemorizada(NoDeMemoria noPai)
 {
     return(noPai.NosFilhos.Count > 0 ? noPai.NosFilhos.FirstOrDefault(n => n.PesoDeMelhorEscolha == noPai.NosFilhos.Max(p => p.PesoDeMelhorEscolha) && n.PesoDeMelhorEscolha > 4) : null);
 }