Exemple #1
0
    private Midia[] ObterMidiasDaAula(EstadoDoJogo jogo)
    {
        var midiasDaAula = new Midia[QuantidadeDeMidiasDaAula];

        for (int i = 0; i < QuantidadeDeMidiasDaAula; i++)
        {
            midiasDaAula[i] = jogo.MidiasSelecionadas[i];
        }
        return(midiasDaAula);
    }
Exemple #2
0
    // Obter feedback da Lurdinha para o jogador de acordo com as escolhas de metodologia e de mídias
    // É uma lista de strings pois a Lurdinha pode trazer múltiplos feedbacks para o jogador
    // Fonte: https://docs.google.com/spreadsheets/d/1L1-BTr9iV8cBK-1nssccfwQVfkWrLKnsqK4fABewKmg/edit#gid=0
    public static List <string> ObterFeedback(EstadoDoJogo jogo)
    {
        var listaDeFeedbacks = new List <string>();

        if (jogo.MetodologiaSelecionada == Metodologia.ABJ)
        {
            // TODO
        }
        else // jogo.MetodologiaSelecionada == Metodologia.ABP
        {
            var escolheuMidiaDeConsulta = jogo.MidiasSelecionadas.Any((midia) => midia.NomeMidia.CategoriasDaMidia().HasFlag(CategoriasDeMidia.ConsultaRepositorio));
            var escolheuMidiaDigital    = jogo.MidiasSelecionadas.Any((midia) => midia.NomeMidia.CategoriasDaMidia().HasFlag(CategoriasDeMidia.Digital));
            var escolheuMidiaPopular    = jogo.MidiasSelecionadas.Any((midia) => midia.NomeMidia.CategoriasDaMidia().HasFlag(CategoriasDeMidia.Popular));

            if (escolheuMidiaDeConsulta && escolheuMidiaDigital)
            {
                listaDeFeedbacks.Add("Parabéns! Você oportunizou pesquisas de qualidade e discussões intensas para os alunos sobre o assunto abordado!");
            }
            else if (escolheuMidiaDeConsulta)
            {
                listaDeFeedbacks.Add("Muito bem! Os alunos puderam pesquisar ótimos conteúdos sobre o assunto.");
            }
            else if (escolheuMidiaDigital)
            {
                listaDeFeedbacks.Add("Muito bem! A diversidade de conteúdos e ferramentas ajudou os alunos.");
            }

            if (escolheuMidiaPopular)
            {
                listaDeFeedbacks.Add("Cuidado com as Fake News! Buscar conteúdos e discussões em locais sem controle sobre as fontes pode gerar interpretações erradas.");
            }

            // Feedback padrão da Lurdinha caso nenhum dos if's anteriores tenham sido satisfeitos
            if (listaDeFeedbacks.Count == 0)
            {
                listaDeFeedbacks.Add("Boa aula prof.! Pense na escolha de mídias que ajudem os alunos a pesquisar e dêem acesso a diversas fontes.");
            }
        }

        // Adicionar feedback para quando o jogador seleciona mídias repetidas
        var quantidadeMidiasDistintas = jogo.MidiasSelecionadas
                                        .GroupBy((midia) => midia.NomeMidia)
                                        .Select((grupo) => grupo.First())
                                        .Count();

        if (jogo.MidiasSelecionadas.Length > quantidadeMidiasDistintas)
        {
            listaDeFeedbacks.Add("Procure oportunizar aos alunos o contato com diferentes mídias.");
        }

        return(listaDeFeedbacks);
    }
    public void ReadData()
    {
        EstadoDoJogo estadoDoJogo = EstadoDoJogo.Instance;

        nivelDeEnsinoSelecionado      = estadoDoJogo.NivelDeEnsino;
        areaDeConhecimentoSelecionada = estadoDoJogo.AreaDeConhecimento;
        inteligenciasSelecionadas     = estadoDoJogo.Inteligencias;
        metodologiaSelecionada        = estadoDoJogo.Metodologia;
        midiasSelecionadas            = estadoDoJogo.Midias;
        SpriteCorpoPersonagem         = estadoDoJogo.SpriteCorpoPersonagem;
        SpriteCabeloPersonagem        = estadoDoJogo.SpriteCabeloPersonagem;
        SpriteRoupaPersonagem         = estadoDoJogo.SpriteRoupaPersonagem;
        SpriteIconePersonagem         = estadoDoJogo.SpriteIconePersonagem;
    }
    public void WriteData()
    {
        EstadoDoJogo estadoDoJogo = EstadoDoJogo.Instance;

        estadoDoJogo.NivelDeEnsino          = nivelDeEnsinoSelecionado;
        estadoDoJogo.AreaDeConhecimento     = areaDeConhecimentoSelecionada;
        estadoDoJogo.Inteligencias          = inteligenciasSelecionadas;
        estadoDoJogo.Metodologia            = metodologiaSelecionada;
        estadoDoJogo.Midias                 = midiasSelecionadas;
        estadoDoJogo.SpriteCorpoPersonagem  = SpriteCorpoPersonagem;
        estadoDoJogo.SpriteCabeloPersonagem = SpriteCabeloPersonagem;
        estadoDoJogo.SpriteRoupaPersonagem  = SpriteRoupaPersonagem;
        estadoDoJogo.SpriteIconePersonagem  = SpriteIconePersonagem;
    }
    public void DefaultInitialization()
    {
        EstadoDoJogo estadoDoJogo = EstadoDoJogo.Instance;

        Midia[] midias = new Midia[4];

        midias[0] = new Midia(NomeDeMidia.Plataformas);
        midias[1] = new Midia(NomeDeMidia.CadernosECartazes);
        midias[2] = new Midia(NomeDeMidia.EditoresDeTextoEPlanilhasEletronicas);
        midias[3] = new Midia(NomeDeMidia.Lousa);

        estadoDoJogo.NivelDeEnsino          = NivelDeEnsino.EducacaoInfantil;
        estadoDoJogo.AreaDeConhecimento     = AreaDeConhecimento.CienciasBiologicas;
        estadoDoJogo.Inteligencias          = Inteligencias.CorporalCinestesicaComNaturalista;
        estadoDoJogo.Metodologia            = Metodologia.Invertida;
        estadoDoJogo.Midias                 = midias;
        estadoDoJogo.SpriteCorpoPersonagem  = SpriteCorpoPersonagem;
        estadoDoJogo.SpriteCabeloPersonagem = SpriteCabeloPersonagem;
        estadoDoJogo.SpriteRoupaPersonagem  = SpriteRoupaPersonagem;
        estadoDoJogo.SpriteIconePersonagem  = SpriteIconePersonagem;
    }
    public IEnumerator ExecutarAnimacao(Inteligencias inteligenciasSelecionadas)
    {
        // Mostrar apenas os balões que correspondem ao par de inteligências selecionadas
        conjuntoDeBaloesAtivo = baloesPorInteligencias[inteligenciasSelecionadas];
        conjuntoDeBaloesAtivo.SetActive(true);

        var transformDoConjunto = conjuntoDeBaloesAtivo.transform;
        var quantidadeDeBaloes  = transformDoConjunto.childCount;

        // Esconder todos os balões deste conjunto
        for (var i = 0; i < quantidadeDeBaloes; i++)
        {
            transformDoConjunto.GetChild(i).gameObject.SetActive(false);
        }

        // Definir as variáveis usadas dentro do while
        int          indiceAleatorio;
        GameObject   balaoEscolhido;
        EstadoDoJogo jogo = EstadoDoJogo.Instance;
        Sprite       spriteDoIconeDoBalao;
        Image        imageDoIconeDoBalao;
        Image        imageDoIconeDoBalao2; // Caso especial para inteligências interpessoal + musical
        bool         InteligenciasInterpessoalComMusicalForamEscolhidas = (inteligenciasSelecionadas == Inteligencias.InterpessoalComMusical);

        // Mostrar um balão do conjunto de cada vez
        while (true)
        {
            // Sortear um balão aleatório do conjunto
            indiceAleatorio = Random.Range(0, quantidadeDeBaloes);
            balaoEscolhido  = transformDoConjunto.GetChild(indiceAleatorio).gameObject;

            // Sortear uma categoria de ícone aleatória para estar no balão
            indiceAleatorio = Random.Range(0, (int)TipoDeIconeDeBalao.TamanhoDoEnum);
            // Puxar o sprite correto de acordo com a categoria de ícone sorteada
            switch (indiceAleatorio)
            {
            case (int)TipoDeIconeDeBalao.NivelDeEnsino:
                spriteDoIconeDoBalao = jogo.NivelDeEnsinoSelecionado.Sprite ? jogo.NivelDeEnsinoSelecionado.Sprite : nivelDeEnsinoFallbackSprite;
                break;

            case (int)TipoDeIconeDeBalao.AreaDeConhecimento:
                spriteDoIconeDoBalao = jogo.AreaDeConhecimentoSelecionada.Sprite ? jogo.AreaDeConhecimentoSelecionada.Sprite : areaDeConhecimentoFallbackSprite;
                break;

            case (int)TipoDeIconeDeBalao.Inteligencias:
                spriteDoIconeDoBalao = jogo.InteligenciasSelecionadas.SpriteGrande ? jogo.InteligenciasSelecionadas.SpriteGrande : inteligenciasFallbackSprite;
                break;

            case (int)TipoDeIconeDeBalao.Metodologia:
                spriteDoIconeDoBalao = jogo.MetodologiaSelecionada.Sprite ? jogo.MetodologiaSelecionada.Sprite : metodologiaFallbackSprite;
                break;

            case (int)TipoDeIconeDeBalao.Midia:
                // O jogador pode ter escolhido várias mídias para serem usadas na aula,
                // portanto, escolher o sprite do ícone de uma delas aleatoriamente
                indiceAleatorio = Random.Range(0, jogo.MidiasSelecionadas.Length);
                var midia = jogo.MidiasSelecionadas[indiceAleatorio];
                spriteDoIconeDoBalao = midia.SpriteIcone ? midia.SpriteIcone : midiaFallbackSprite;
                break;

            default:
                spriteDoIconeDoBalao = null; break;
            }

            // Definir o sprite do ícone do balão
            // Caso especial para quando o jogador seleciona inteligências interpessoal + musical
            // Um balão na verdade é uma dupla de balões, os alunos conversam entre si e o
            // sprite do ícone estará apenas no segundo balão, que fica na frente
            if (InteligenciasInterpessoalComMusicalForamEscolhidas)
            {
                imageDoIconeDoBalao2        = balaoEscolhido.transform.GetChild(1).GetChild(0).GetComponent <Image>();
                imageDoIconeDoBalao2.sprite = spriteDoIconeDoBalao;
            }
            else
            {
                imageDoIconeDoBalao        = balaoEscolhido.transform.GetChild(0).GetComponent <Image>();
                imageDoIconeDoBalao.sprite = spriteDoIconeDoBalao;
            }

            balaoEscolhido.SetActive(true);
            yield return(new WaitForSeconds(TempoEmSegundosDeUmBalao));

            balaoEscolhido.SetActive(false);
            yield return(new WaitForSeconds(TempoEmSegundosEntreBaloes));
        }
    }
Exemple #7
0
        private bool JogadaDoComputadorImperativo(int _ProfundidadeTotal)
        {
            if (m_enumTipoJogo == TipoDosJogadores.HumanoXComputador)
            {
                m_TabuleiroAtual = m_CJogadorDois.RealizaJogada(this.TabuleiroAtual, m_CJogadorDois, m_HJogadorUm, _ProfundidadeTotal);

                if (m_CJogadorDois.ComeuPeca)
                {
                    m_HJogadorUm.PecasRestantes--;
                    this.PecasRestantesDosJogadores[0] = m_HJogadorUm.PecasRestantes;
                    this.PecasRestantesDosJogadores[1] = m_CJogadorDois.PecasRestantes;

                    while (m_CJogadorDois.ComeMaisUmPeca(m_TabuleiroAtual, m_CJogadorDois.CorDoJogador,
                        m_CJogadorDois.PecasRestantes, m_HJogadorUm.PecasRestantes))
                    {
                        m_HJogadorUm.PecasRestantes--;
                        this.PecasRestantesDosJogadores[0] = m_HJogadorUm.PecasRestantes;
                        this.PecasRestantesDosJogadores[1] = m_CJogadorDois.PecasRestantes;
                        m_CJogadorDois.ProximaJogada.CopyTo(m_TabuleiroAtual, 0);
                    }
                    m_CJogadorDois.ProximaJogada.CopyTo(m_TabuleiroAtual, 0);
                }
                m_enmEstado = EstadoDoJogo.JogadorUm;

                Fim();
                return true;

            }
            else if (m_enumTipoJogo == TipoDosJogadores.ComputadorXHumano)
            {
                m_TabuleiroAtual = m_CJogadorUm.RealizaJogada(this.TabuleiroAtual, m_CJogadorUm, m_HJogadorDois, _ProfundidadeTotal);

                if (m_CJogadorUm.ComeuPeca)
                {
                    m_HJogadorDois.PecasRestantes--;
                    this.PecasRestantesDosJogadores[0] = m_CJogadorUm.PecasRestantes;
                    this.PecasRestantesDosJogadores[1] = m_HJogadorDois.PecasRestantes;

                    while (m_CJogadorUm.ComeMaisUmPeca(m_TabuleiroAtual, m_CJogadorUm.CorDoJogador,
                        m_CJogadorUm.PecasRestantes, m_HJogadorDois.PecasRestantes))
                    {
                        m_HJogadorDois.PecasRestantes--;
                        this.PecasRestantesDosJogadores[0] = m_CJogadorUm.PecasRestantes;
                        this.PecasRestantesDosJogadores[1] = m_HJogadorDois.PecasRestantes;
                        m_CJogadorUm.ProximaJogada.CopyTo(m_TabuleiroAtual, 0);
                    }
                    m_CJogadorUm.ProximaJogada.CopyTo(m_TabuleiroAtual, 0);
                }
                m_enmEstado = EstadoDoJogo.JogadorDois;

                Fim();
                return true;

            }
            else if (m_enumTipoJogo == TipoDosJogadores.ComputadorXComputador)
            {
                if (m_IsComputadorUM)
                {
                    m_TabuleiroAtual = m_CJogadorUm.RealizaJogada(this.TabuleiroAtual, m_CJogadorUm, m_CJogadorDois, _ProfundidadeTotal);
                    m_IsComputadorUM = false;

                    Fim();
                    return true;
                }
                else //PC Dois jogando
                {
                    m_TabuleiroAtual = m_CJogadorDois.RealizaJogada(this.TabuleiroAtual, m_CJogadorDois, m_CJogadorUm, _ProfundidadeTotal);
                    m_IsComputadorUM = true;

                    Fim();
                    return true;
                }

            }
            else if (m_enumTipoJogo == TipoDosJogadores.ComputadorXFComputador)
            //Os testes de adversários estao separados por questoes de organizacao, pois quando for
            // computador x Fcomputador NAO HA JOGADA AQUI DO COMPUTADOR DOIS
            {
                if (m_IsComputadorUM)
                {
                    m_TabuleiroAtual = m_CJogadorUm.RealizaJogada(this.TabuleiroAtual, m_CJogadorUm, m_CJogadorDois, _ProfundidadeTotal);
                    m_IsComputadorUM = false;

                    Fim();
                    return true;
                }
                else
                {
                    throw new Exception();
                }
            }
            return false;
        }
Exemple #8
0
        /// <summary>
        /// Este método faz o chaveamento entre as diferentes IA do computador: imperativa e funcional.
        /// Se o tipo de jogadores for ComputadorXComputador, simplesmente chama o método tradicional para jogar.
        /// Se o tipo de jogadores for ComputadorXFComputador, chama o método tradicional para o jogador um
        /// e os métodos funcionais para o jogador dois (pois o funcional será sempre o jogador dois).
        /// </summary>
        /// <param name="_ProfundidadeTotal"></param>
        /// <returns></returns>
        public bool JogadaDoComputador(int _ProfundidadeTotal)
        {
            for (int i = 0; i < m_TabuleiroAtual.Length; i++)
            {
                if (m_TabuleiroAtual[i] == PECA_COMIDA)
                    m_TabuleiroAtual[i] = VAZIA;
            }

            switch (m_enumTipoJogo)
            {
                //Apenas IA imperativas, joga totalmente imperativo
                case TipoDosJogadores.ComputadorXComputador:
                    return JogadaDoComputadorImperativo(_ProfundidadeTotal);
                //Apenas UMA IA, a qual deve ser funcional
                case TipoDosJogadores.HumanoXFComputador:
                    bool result = JogadaDoComputadorFuncional(_ProfundidadeTotal);
                    m_enmEstado = EstadoDoJogo.JogadorUm;
                    return result;
                //IA Imperativa X IA Funcional
                case TipoDosJogadores.ComputadorXFComputador:
                    if (m_IsComputadorUM)
                        return JogadaDoComputadorImperativo(_ProfundidadeTotal);
                    else
                        return JogadaDoComputadorFuncional(_ProfundidadeTotal);
                default:
                    break;
            }
            return false;
        }
Exemple #9
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;
        }
Exemple #10
0
        public void Fim()
        {
            switch (m_enumTipoJogo)
            {
                case TipoDosJogadores.ComputadorXHumano:
                    if (m_CJogadorUm.PecasRestantes == 0)
                    {
                        IsAdversarioVencedor = true;
                        m_enmEstado = EstadoDoJogo.Fim;
                    }
                    else if (m_HJogadorDois.PecasRestantes == 0)
                    {
                        IsAdversarioVencedor = false;
                        m_enmEstado = EstadoDoJogo.Fim;
                    }
                    break;
                case TipoDosJogadores.HumanoXComputador:
                    if (m_HJogadorUm.PecasRestantes == 0)
                    {
                        IsAdversarioVencedor = false;
                        m_enmEstado = EstadoDoJogo.Fim;
                    }
                    else if (m_CJogadorDois.PecasRestantes == 0)
                    {
                        IsAdversarioVencedor = true;
                        m_enmEstado = EstadoDoJogo.Fim;
                    }
                    break;
                case TipoDosJogadores.HumanoXFComputador:
                    if (m_HJogadorUm.PecasRestantes == 0)
                    {
                        IsAdversarioVencedor = false;
                        m_enmEstado = EstadoDoJogo.Fim;
                    }
                    else if (m_CJogadorDois.PecasRestantes == 0)
                    {
                        IsAdversarioVencedor = true;
                        m_enmEstado = EstadoDoJogo.Fim;
                    }
                    break;
                case TipoDosJogadores.HumanoXHumano:
                    if (m_HJogadorUm.PecasRestantes == 0)
                    {
                        m_enmEstado = EstadoDoJogo.Fim;
                    }
                    else if (m_HJogadorDois.PecasRestantes == 0)
                    {
                        m_enmEstado = EstadoDoJogo.Fim;
                    }
                    break;
                case TipoDosJogadores.ComputadorXComputador:
                    if (m_CJogadorUm.PecasRestantes == 0)
                    {
                        m_enmEstado = EstadoDoJogo.Fim;
                    }
                    else if (m_CJogadorDois.PecasRestantes == 0)
                    {
                        m_enmEstado = EstadoDoJogo.Fim;
                    }
                    break;
                case TipoDosJogadores.ComputadorXFComputador:
                    if (m_CJogadorUm.PecasRestantes == 0)
                    {
                        m_enmEstado = EstadoDoJogo.Fim;
                    }
                    else if (m_CJogadorDois.PecasRestantes == 0)
                    {
                        m_enmEstado = EstadoDoJogo.Fim;
                    }
                    break;
                default:
                    break;
            }
            if (m_enumTipoJogo == TipoDosJogadores.HumanoXHumano)
            {

            }
        }
Exemple #11
0
        /// <summary>
        /// Move efetivamente um peca, indo para a casa clicada com o botão direito (destino).
        /// </summary>
        /// <param name="_casaDestino">Casa para onde a peca devera se mover</param>
        /// <returns>
        /// True: se o movimento for valido e ocorrer (atribui um novo estado de tabuleiro efetivo
        /// a propriedade TabuleiroAtual)
        /// False: se ela nao puder se mover naquela direcao</returns>
        public bool CliqueDireito(int _casaDestino)
        {
            if (m_enmEstado != EstadoDoJogo.ComputadorJogando)
            {
                m_PodeComerSequencia = false;

                if (m_enmEstado == EstadoDoJogo.JogadorUm)
                {
                    if (m_HJogadorUm.MovimentaPeca(_casaDestino, this.TabuleiroAtual))
                    {
                        m_HJogadorUm.NovoTabuleiroAtual.CopyTo(m_TabuleiroAtual, 0);

                        //Passa para o proximo jogador
                        if (m_enumTipoJogo == TipoDosJogadores.HumanoXComputador
                         || m_enumTipoJogo == TipoDosJogadores.ComputadorXHumano
                         || m_enumTipoJogo == TipoDosJogadores.HumanoXFComputador)
                            m_enmEstado = EstadoDoJogo.ComputadorJogando;
                        else
                            m_enmEstado = EstadoDoJogo.JogadorDois;

                        //Atualiza as pecas restantes
                        if (m_HJogadorUm.ComeuPeca)
                        {
                            this.PecaFoiComida = true;
                            if (m_enumTipoJogo == TipoDosJogadores.HumanoXHumano)
                            {
                                m_HJogadorDois.PecasRestantes--;
                                this.PecasRestantesDosJogadores[0] = m_HJogadorUm.PecasRestantes;
                                this.PecasRestantesDosJogadores[1] = m_HJogadorDois.PecasRestantes;
                            }
                            else if (m_enumTipoJogo == TipoDosJogadores.HumanoXComputador)
                            {
                                m_CJogadorDois.PecasRestantes--;
                                this.PecasRestantesDosJogadores[0] = m_HJogadorUm.PecasRestantes;
                                this.PecasRestantesDosJogadores[1] = m_CJogadorDois.PecasRestantes;
                            }

                            if (m_HJogadorUm.ComeMaisUmPeca(this.TabuleiroAtual, m_HJogadorUm.CorDoJogador, _casaDestino))
                            {
                                m_TabuleiroProximosMovimentos =
                                    m_HJogadorUm.CalculaProximasJogadas(_casaDestino, this.TabuleiroAtual);
                                m_PodeComerSequencia = true;
                                m_enmEstado = EstadoDoJogo.JogadorUm;
                            }
                        }

                        Fim();

                        return true;
                    }
                }
                else if (m_enmEstado == EstadoDoJogo.JogadorDois)
                {
                    if (m_HJogadorDois.MovimentaPeca(_casaDestino, this.TabuleiroAtual))
                    {
                        m_HJogadorDois.NovoTabuleiroAtual.CopyTo(m_TabuleiroAtual, 0);

                        //Passa para o proximo jogador
                        if (m_enumTipoJogo == TipoDosJogadores.HumanoXComputador
                         || m_enumTipoJogo == TipoDosJogadores.ComputadorXHumano
                         || m_enumTipoJogo == TipoDosJogadores.HumanoXFComputador)
                            m_enmEstado = EstadoDoJogo.ComputadorJogando;
                        else
                            m_enmEstado = EstadoDoJogo.JogadorUm;

                        //Atualiza as pecas restantes
                        if (m_HJogadorDois.ComeuPeca)
                        {
                            this.PecaFoiComida = true;
                            if (m_enumTipoJogo == TipoDosJogadores.HumanoXHumano)
                            {
                                m_HJogadorUm.PecasRestantes--;
                                this.PecasRestantesDosJogadores[0] = m_HJogadorUm.PecasRestantes;
                                this.PecasRestantesDosJogadores[1] = m_HJogadorDois.PecasRestantes;
                            }
                            else if (m_enumTipoJogo == TipoDosJogadores.ComputadorXHumano)
                            {
                                m_CJogadorUm.PecasRestantes--;
                                this.PecasRestantesDosJogadores[0] = m_CJogadorUm.PecasRestantes;
                                this.PecasRestantesDosJogadores[1] = m_HJogadorDois.PecasRestantes;
                            }

                            if (m_HJogadorDois.ComeMaisUmPeca(this.TabuleiroAtual, m_HJogadorDois.CorDoJogador, _casaDestino))
                            {
                                m_TabuleiroProximosMovimentos =
                                    m_HJogadorDois.CalculaProximasJogadas(_casaDestino, this.TabuleiroAtual);

                                m_PodeComerSequencia = true;
                                m_enmEstado = EstadoDoJogo.JogadorDois;
                            }

                        }
                        Fim();
                        return true;
                    }
                }
            }
            return false;
        }
 private void OnEnterPause(IGameEvent e)
 {
     estado = EstadoDoJogo.emPause;
 }
 private void OnExitPause(IGameEvent obj)
 {
     estado = EstadoDoJogo.emGame;
 }
    // Retorna uma dupla de strings, a primeira é o que o aluno falou e a segunda
    // é a assinatura do aluno, por exemplo "Nicole - Aluna do Ensino Fundamental"
    // Se ninguém assinou, a string assinatura == null
    public static (string feedback, string assinatura) ObterFeedback(EstadoDoJogo jogo)
    {
        if (jogo.MetodologiaSelecionada == Metodologia.ABJ)
        {
            // TODO
            return(SemFeedback, null);
        }
        else // jogo.MetodologiaSelecionada == Metodologia.ABP
        {
            // Escolher um entre os feedbacks possíveis,
            // dar prioridade a feedbacks sobre mídia de consulta
            var escolheuMidiaDeConsulta = jogo.MidiasSelecionadas.Any((midia) => midia.NomeMidia.CategoriasDaMidia().HasFlag(CategoriasDeMidia.ConsultaRepositorio));
            var escolheuMidiaDigital    = jogo.MidiasSelecionadas.Any((midia) => midia.NomeMidia.CategoriasDaMidia().HasFlag(CategoriasDeMidia.Digital));
            if (jogo.NivelDeEnsinoSelecionado == NivelDeEnsino.EducacaoInfantil)
            {
                if (escolheuMidiaDeConsulta)
                {
                    return("Adorei descobrir sobre tudo isso!", $"Ricardo - Aluno da {jogo.NivelDeEnsinoSelecionado.nome}");
                }
                if (escolheuMidiaDigital)
                {
                    return("É bem mais legal a aula com essas tecnologias.", $"Denise - Aluna da {jogo.NivelDeEnsinoSelecionado.nome}");
                }
            }
            else if (jogo.NivelDeEnsinoSelecionado == NivelDeEnsino.EnsinoFundamental)
            {
                if (escolheuMidiaDeConsulta)
                {
                    return("Não imaginava que existia tanta coisa diferente sobre esse assunto!", $"Nicole - Aluna do {jogo.NivelDeEnsinoSelecionado.nome}");
                }
                if (escolheuMidiaDigital)
                {
                    return("Gostei de interagir desse jeito na aula!", $"Fábio - Aluno do {jogo.NivelDeEnsinoSelecionado.nome}");
                }
            }
            else if (jogo.NivelDeEnsinoSelecionado == NivelDeEnsino.EnsinoMedio)
            {
                if (escolheuMidiaDeConsulta)
                {
                    return("Gostei de poder fazer as pesquisas sozinha, só pedi ajuda quando precisei mesmo.", $"Maria - Aluna do {jogo.NivelDeEnsinoSelecionado.nome}");
                }
                if (escolheuMidiaDigital)
                {
                    return("Usar essas ferramentas me ajudou na pesquisa e na apresentação!", $"Alexis - Aluno do {jogo.NivelDeEnsinoSelecionado.nome}");
                }
            }
            else // (jogo.NivelDeEnsinoSelecionado == NivelDeEnsino.EnsinoSuperior)
            {
                if (escolheuMidiaDeConsulta)
                {
                    return("O professor nos deu autonomia para pesquisar e encontrar nossas próprias soluções.", $"Natan - Aluno do {jogo.NivelDeEnsinoSelecionado.nome}");
                }
                if (escolheuMidiaDigital)
                {
                    return("As mídias digitais permitem que a gente pesquise e se prepare muito mais.", $"Indra - Aluna do {jogo.NivelDeEnsinoSelecionado.nome}");
                }
            }

            return(SemFeedback, null);
        }
    }