/// <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; }
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; }