Example #1
0
        /// <summary>
        /// Construtor
        /// </summary>
        public Jogo(object _udtJogadorUm, object _udtJogadorDois, TipoDosJogadores _enumTipoJogo)
        {
            ////Chama o método que realiza jogada do computador para P1
            //m_cp1 = new MudaEstado(CP1);
            ////Chama o método que realiza jogada do computador para P2
            //m_cp2 = new MudaEstado(CP2);
            ////Chama o método que mostra o resultado do jogo
            //m_fim = new MudaEstado(Fim);

            m_enumTipoJogo = _enumTipoJogo;
            switch (m_enumTipoJogo)
            {

                case TipoDosJogadores.HumanoXComputador:
                    m_HJogadorUm = new JHumano();
                    m_CJogadorDois = new JComputador();
                    CopiaAtributosJogadores((Jogador)_udtJogadorUm, (Jogador)_udtJogadorDois);
                    break;
                case TipoDosJogadores.HumanoXFComputador:
                    m_HJogadorUm = new JHumano();
                    m_CJogadorDois = new JComputador();
                    CopiaAtributosJogadores((Jogador)_udtJogadorUm, (Jogador)_udtJogadorDois);
                    break;
                case TipoDosJogadores.HumanoXHumano:
                    m_HJogadorUm = new JHumano();
                    m_HJogadorDois = new JHumano();
                    CopiaAtributosJogadores((Jogador)_udtJogadorUm, (Jogador)_udtJogadorDois);
                    break;
                case TipoDosJogadores.ComputadorXHumano:
                    m_CJogadorUm = new JComputador();
                    m_HJogadorDois = new JHumano();
                    CopiaAtributosJogadores((Jogador)_udtJogadorUm, (Jogador)_udtJogadorDois);
                    break;
                case TipoDosJogadores.ComputadorXComputador:
                    m_CJogadorUm = new JComputador();
                    m_CJogadorDois = new JComputador();
                    CopiaAtributosJogadores((Jogador)_udtJogadorUm, (Jogador)_udtJogadorDois);
                    break;
                case TipoDosJogadores.ComputadorXFComputador:
                    m_CJogadorUm = new JComputador();
                    m_CJogadorDois = new JComputador();
                    CopiaAtributosJogadores((Jogador)_udtJogadorUm, (Jogador)_udtJogadorDois);
                    break;
                default:
                    break;
            }

            //Instancia o Tabuleiro
            //A posicao 0 do array nao sera usada para facilitar varios calculos dos algoritmos
            //que envolvem os indices dele, por isso 26 posicoes para o jogo com 25 casas
            m_TabuleiroAtual = new int[26];
            m_TabuleiroProximosMovimentos = new int[26];

            Jogador jogadorConfig = (Jogador)_udtJogadorUm;

            if (jogadorConfig.IsPrimeiroJogador)
            {
                if (m_enumTipoJogo == TipoDosJogadores.HumanoXComputador
                    || m_enumTipoJogo == TipoDosJogadores.HumanoXHumano
                    || m_enumTipoJogo == TipoDosJogadores.HumanoXFComputador)
                    m_enmEstado = EstadoDoJogo.JogadorUm;
                else if (m_enumTipoJogo == TipoDosJogadores.ComputadorXHumano
                      || m_enumTipoJogo == TipoDosJogadores.ComputadorXComputador
                      || m_enumTipoJogo == TipoDosJogadores.ComputadorXFComputador)
                {
                    m_enmEstado = EstadoDoJogo.ComputadorJogando;
                    m_IsComputadorUM = true;
                }
            }
            else
            {
                if (m_enumTipoJogo == TipoDosJogadores.ComputadorXHumano || m_enumTipoJogo == TipoDosJogadores.HumanoXHumano)
                    m_enmEstado = EstadoDoJogo.JogadorDois;
                else if (
                       m_enumTipoJogo == TipoDosJogadores.HumanoXComputador
                    || m_enumTipoJogo == TipoDosJogadores.ComputadorXComputador
                    || m_enumTipoJogo == TipoDosJogadores.ComputadorXFComputador)
                {
                    m_enmEstado = EstadoDoJogo.ComputadorJogando;
                    m_IsComputadorUM = false;
                }
            }

            //Inicializa o tabuleiro
            for (int i = 1; i < 26; i++)
            {
                /*
                 * Preenche de 1 a 12 com pecas do jogador NOT(Embaixo).
                 * 14 a 25 com pecas do jogador Embaixo.
                 * A casa 13 inicia vazia.
                 */
                if (jogadorConfig.IsEmbaixo)
                {
                    if (i < 13)
                        m_TabuleiroAtual[i] = CorJogadorAdversario(jogadorConfig.CorDoJogador);
                    else
                        m_TabuleiroAtual[i] = jogadorConfig.CorDoJogador;
                }
                else
                {
                    if (i < 13)
                        m_TabuleiroAtual[i] = jogadorConfig.CorDoJogador;
                    else
                        m_TabuleiroAtual[i] = CorJogadorAdversario(jogadorConfig.CorDoJogador);
                }

                m_TabuleiroProximosMovimentos[i] = VAZIA;

            }
            m_TabuleiroAtual[13] = VAZIA;
        }
Example #2
0
        public int[] RealizaJogada(int[] _TabuleiroAtual, JComputador _udtJogadorPC, Jogador _udtJogadorAdversario, int _ProfundidadeTotal)
        {
            m_ProfundidadeTotal = _ProfundidadeTotal;
            List<BoardNode> lstProximosTabuleiros = GeraMovimentos(new BoardNode(_TabuleiroAtual, this.CorDoJogador), this.CorDoJogador);

            if (lstProximosTabuleiros.Count > 1)
            {
                for (int i = 0; i < lstProximosTabuleiros.Count; i++)
                {
                    lstProximosTabuleiros[i].StepCost = MinimaxAlfaBeta(lstProximosTabuleiros[i], 1,
                        _udtJogadorPC, _udtJogadorAdversario, false, int.MinValue, int.MaxValue);
                }

                lstProximosTabuleiros.Sort(Comparer<BoardNode>.Default);
            }

            if (lstProximosTabuleiros[lstProximosTabuleiros.Count - 1].Tabuleiro[0] == COMEU_PECA)
            {
                m_ComeuPeca = true;
                for (int i = 0; i < 26; i++)
                {
                    if (_TabuleiroAtual[i] == VAZIA &&
                        lstProximosTabuleiros[lstProximosTabuleiros.Count - 1].Tabuleiro[i] == this.CorDoJogador)
                        m_casaDestinoAposComer = i;
                }
            }
            else
                m_ComeuPeca = false;

            this.ProximaJogada = lstProximosTabuleiros[lstProximosTabuleiros.Count - 1].Tabuleiro;

            return lstProximosTabuleiros[lstProximosTabuleiros.Count - 1].Tabuleiro;
        }