public void DefinirAfirmacoes(Afirmacao afirmacaoVerdadeira, Afirmacao[] afirmacoesFalsas) { // Ignorar se não houver "slots" disponíveis pra encaixar as afirmações if (afirmacoesQuizMultiplaEscolha.Length == 0) { return; } // Se receber + que o número limite de afirmações deste objeto, que é // igual a afirmacoesQuizMultiplaEscolha.Length, não tentar adicionar + que o limite var quantidade = (afirmacoesFalsas.Length + 1 <= afirmacoesQuizMultiplaEscolha.Length) ? (afirmacoesFalsas.Length + 1) : afirmacoesQuizMultiplaEscolha.Length; // Juntar afirmação verdadeira e afirmações falsas em um único array var afirmacoes = new Afirmacao[quantidade]; afirmacoes[0] = afirmacaoVerdadeira; for (int i = 1; i < quantidade; i++) { afirmacoes[i] = afirmacoesFalsas[i - 1]; } // Embaralhar as afirmações usando algoritmo Fisher–Yates Shuffle, O(n) for (int i = quantidade - 1; i > 0; i--) { var randomIndex = Random.Range(0, i + 1); var temp = afirmacoes[randomIndex]; afirmacoes[randomIndex] = afirmacoes[i]; afirmacoes[i] = temp; } for (var i = 0; i < quantidade; i++) { afirmacoesQuizMultiplaEscolha[i].Afirmacao = afirmacoes[i]; } }
public void ConfigurarQuiz(NivelDeEnsino nivelDeEnsino, Inteligencias inteligencias) { Afirmacao[] afirmacoesDisponiveis; string enunciadoDoQuiz; Sprite spriteDoIconeDoQuiz; // Sorteio entre 0 e 1. // Se sair 0, o quiz será sobre nível de ensino // Se sair 1, o quiz será sobre Inteligências Múltiplas //int zeroOuUm = Random.Range(0, 2); int zeroOuUm = 1; if (zeroOuUm == 0) { this.NivelDeEnsino = nivelDeEnsino; enunciadoDoQuiz = "Analise as afirmativas abaixo e selecione a(s) correta(s) sobre " + nivelDeEnsino.nome; spriteDoIconeDoQuiz = nivelDeEnsino.Sprite; afirmacoesDisponiveis = AfirmacaoSobreNivelDeEnsino.ObterTodasAsAfirmacoes(nivelDeEnsino); } else // ZeroOuUm == 1 { this.Inteligencias = inteligencias; enunciadoDoQuiz = "Analise as afirmativas abaixo e selecione a(s) correta(s) sobre o par de inteligências " + inteligencias.Nome; spriteDoIconeDoQuiz = inteligencias.SpriteGrande; afirmacoesDisponiveis = AfirmacaoSobreInteligencias.ObterTodasAsAfirmacoes(inteligencias); } // Selecionar algumas dessas afirmações para colocar no quiz var afirmacoesDoQuiz = new Afirmacao[quantidadeDeAfirmacoesNoQuiz]; // Selecionar pelo menos uma afirmação verdadeira var afirmacoesVerdadeiras = afirmacoesDisponiveis.Where(a => a.Verdadeira); var indiceAleatorio = Random.Range(0, afirmacoesVerdadeiras.Count()); afirmacoesDoQuiz[0] = afirmacoesVerdadeiras.ElementAt(indiceAleatorio); // Selecionar as outras afirmações do quiz, que podem ou não serem verdadeiras for (int i = 1; i < quantidadeDeAfirmacoesNoQuiz; i++) { // Remover das afirmações disponíveis as afirmações selecionadas afirmacoesDisponiveis = afirmacoesDisponiveis.Except(afirmacoesDoQuiz).ToArray(); indiceAleatorio = Random.Range(0, afirmacoesDisponiveis.Count()); var afirmacaoAleatoria = afirmacoesDisponiveis.ElementAt(indiceAleatorio); afirmacoesDoQuiz[i] = afirmacaoAleatoria; } formatoDoQuiz = Instantiate(prefabQuizVF, canvas.transform); formatoDoQuiz.TextoDoEnunciado = enunciadoDoQuiz; formatoDoQuiz.IconeDoQuiz.sprite = spriteDoIconeDoQuiz ? spriteDoIconeDoQuiz : spritePadraoDoIconeDoQuiz; formatoDoQuiz.DefinirAfirmacoes(afirmacoesDoQuiz); }